; LLVM IR from ox-vgg/vise :: src/search_engine/relja_retrival/external/KMCode_relja/descriptor/AffineRegion._45d9eb29 (Z14displayEllipseP12ImageContentP6Matrixiif)

; 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

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

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

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

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

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

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

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

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 #1 align 2

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

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

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

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

26:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  %27 = load float, ptr %10, align 4, !tbaa !11
  %28 = invoke noundef float @_ZSt4rintf(float noundef %27)
          to label %29 unwind label %42

29:                                               ; preds = %26
  %30 = fmul float 3.000000e+00, %28
  %31 = fptosi float %30 to i32
  store i32 %31, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store float 2.550000e+02, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #7
  invoke void @_ZN6MatrixC1Eii(ptr noundef nonnull align 8 dereferenceable(24) %18, i32 noundef 2, i32 noundef 1)
          to label %32 unwind label %46

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

33:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 -2, ptr %20, align 4, !tbaa !9
  br label %34

34:                                               ; preds = %79, %33
  %35 = load i32, ptr %20, align 4, !tbaa !9
  %36 = icmp sle i32 %35, 2
  br i1 %36, label %54, label %37

37:                                               ; preds = %34
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %82

38:                                               ; preds = %5
  %39 = landingpad { ptr, i32 }
          cleanup
  %40 = extractvalue { ptr, i32 } %39, 0
  store ptr %40, ptr %12, align 8
  %41 = extractvalue { ptr, i32 } %39, 1
  store i32 %41, ptr %13, align 4
  br label %344

42:                                               ; preds = %26
  %43 = landingpad { ptr, i32 }
          cleanup
  %44 = extractvalue { ptr, i32 } %43, 0
  store ptr %44, ptr %12, align 8
  %45 = extractvalue { ptr, i32 } %43, 1
  store i32 %45, ptr %13, align 4
  br label %343

46:                                               ; preds = %29
  %47 = landingpad { ptr, i32 }
          cleanup
  %48 = extractvalue { ptr, i32 } %47, 0
  store ptr %48, ptr %12, align 8
  %49 = extractvalue { ptr, i32 } %47, 1
  store i32 %49, ptr %13, align 4
  br label %342

50:                                               ; preds = %32
  %51 = landingpad { ptr, i32 }
          cleanup
  %52 = extractvalue { ptr, i32 } %51, 0
  store ptr %52, ptr %12, align 8
  %53 = extractvalue { ptr, i32 } %51, 1
  store i32 %53, ptr %13, align 4
  br label %341

54:                                               ; preds = %34
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = getelementptr inbounds %class.ImageContent, ptr %55, i32 0, i32 4
  %57 = load ptr, ptr %56, align 8, !tbaa !13
  %58 = load i32, ptr %9, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds ptr, ptr %57, i64 %59
  %61 = load ptr, ptr %60, align 8, !tbaa !5
  %62 = load i32, ptr %8, align 4, !tbaa !9
  %63 = load i32, ptr %20, align 4, !tbaa !9
  %64 = add nsw i32 %62, %63
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds float, ptr %61, i64 %65
  store float 2.550000e+02, ptr %66, align 4, !tbaa !11
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds %class.ImageContent, ptr %67, i32 0, i32 4
  %69 = load ptr, ptr %68, align 8, !tbaa !13
  %70 = load i32, ptr %9, align 4, !tbaa !9
  %71 = load i32, ptr %20, align 4, !tbaa !9
  %72 = add nsw i32 %70, %71
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds ptr, ptr %69, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !5
  %76 = load i32, ptr %8, align 4, !tbaa !9
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds float, ptr %75, i64 %77
  store float 2.550000e+02, ptr %78, align 4, !tbaa !11
  br label %79

79:                                               ; preds = %54
  %80 = load i32, ptr %20, align 4, !tbaa !9
  %81 = add nsw i32 %80, 1
  store i32 %81, ptr %20, align 4, !tbaa !9
  br label %34, !llvm.loop !15

82:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %83 = load i32, ptr %14, align 4, !tbaa !9
  %84 = sub nsw i32 0, %83
  store i32 %84, ptr %21, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %336, %82
  %86 = load i32, ptr %21, align 4, !tbaa !9
  %87 = load i32, ptr %14, align 4, !tbaa !9
  %88 = icmp sle i32 %86, %87
  br i1 %88, label %90, label %89

89:                                               ; preds = %85
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %340

90:                                               ; preds = %85
  %91 = load i32, ptr %21, align 4, !tbaa !9
  %92 = sitofp i32 %91 to double
  %93 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %18, i32 noundef 1, i32 noundef 1)
          to label %94 unwind label %165

94:                                               ; preds = %90
  store double %92, ptr %93, align 8, !tbaa !17
  %95 = load i32, ptr %14, align 4, !tbaa !9
  %96 = load i32, ptr %14, align 4, !tbaa !9
  %97 = mul nsw i32 %95, %96
  %98 = load i32, ptr %21, align 4, !tbaa !9
  %99 = load i32, ptr %21, align 4, !tbaa !9
  %100 = mul nsw i32 %98, %99
  %101 = sub nsw i32 %97, %100
  %102 = sitofp i32 %101 to float
  %103 = invoke noundef float @_ZSt4sqrtf(float noundef %102)
          to label %104 unwind label %165

104:                                              ; preds = %94
  %105 = invoke noundef float @_ZSt4rintf(float noundef %103)
          to label %106 unwind label %165

106:                                              ; preds = %104
  %107 = fptosi float %105 to i32
  %108 = sitofp i32 %107 to double
  %109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %18, i32 noundef 2, i32 noundef 1)
          to label %110 unwind label %165

110:                                              ; preds = %106
  store double %108, ptr %109, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #7
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %22, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %111 unwind label %169

111:                                              ; preds = %110
  %112 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %113 unwind label %173

113:                                              ; preds = %111
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #7
  %114 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %19, i32 noundef 1, i32 noundef 1)
          to label %115 unwind label %165

115:                                              ; preds = %113
  %116 = load double, ptr %114, align 8, !tbaa !17
  %117 = call double @llvm.rint.f64(double %116)
  %118 = fptosi double %117 to i32
  store i32 %118, ptr %15, align 4, !tbaa !9
  %119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %19, i32 noundef 2, i32 noundef 1)
          to label %120 unwind label %165

120:                                              ; preds = %115
  %121 = load double, ptr %119, align 8, !tbaa !17
  %122 = call double @llvm.rint.f64(double %121)
  %123 = fptosi double %122 to i32
  store i32 %123, ptr %16, align 4, !tbaa !9
  %124 = load i32, ptr %9, align 4, !tbaa !9
  %125 = load i32, ptr %16, align 4, !tbaa !9
  %126 = add nsw i32 %124, %125
  %127 = icmp sgt i32 %126, 0
  br i1 %127, label %128, label %178

128:                                              ; preds = %120
  %129 = load i32, ptr %9, align 4, !tbaa !9
  %130 = load i32, ptr %16, align 4, !tbaa !9
  %131 = add nsw i32 %129, %130
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  %133 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %132)
          to label %134 unwind label %165

134:                                              ; preds = %128
  %135 = icmp ult i32 %131, %133
  br i1 %135, label %136, label %178

136:                                              ; preds = %134
  %137 = load i32, ptr %8, align 4, !tbaa !9
  %138 = load i32, ptr %15, align 4, !tbaa !9
  %139 = add nsw i32 %137, %138
  %140 = icmp sgt i32 %139, 0
  br i1 %140, label %141, label %178

141:                                              ; preds = %136
  %142 = load i32, ptr %8, align 4, !tbaa !9
  %143 = load i32, ptr %15, align 4, !tbaa !9
  %144 = add nsw i32 %142, %143
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  %146 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %145)
          to label %147 unwind label %165

147:                                              ; preds = %141
  %148 = icmp ult i32 %144, %146
  br i1 %148, label %149, label %178

149:                                              ; preds = %147
  %150 = load float, ptr %17, align 4, !tbaa !11
  %151 = load ptr, ptr %6, align 8, !tbaa !5
  %152 = getelementptr inbounds %class.ImageContent, ptr %151, i32 0, i32 4
  %153 = load ptr, ptr %152, align 8, !tbaa !13
  %154 = load i32, ptr %9, align 4, !tbaa !9
  %155 = load i32, ptr %16, align 4, !tbaa !9
  %156 = add nsw i32 %154, %155
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds ptr, ptr %153, i64 %157
  %159 = load ptr, ptr %158, align 8, !tbaa !5
  %160 = load i32, ptr %8, align 4, !tbaa !9
  %161 = load i32, ptr %15, align 4, !tbaa !9
  %162 = add nsw i32 %160, %161
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds float, ptr %159, i64 %163
  store float %150, ptr %164, align 4, !tbaa !11
  br label %178

165:                                              ; preds = %311, %298, %260, %247, %234, %232, %225, %222, %220, %196, %183, %141, %128, %115, %113, %106, %104, %94, %90
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %12, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %13, align 4
  br label %339

169:                                              ; preds = %110
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %12, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %13, align 4
  br label %177

173:                                              ; preds = %111
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %12, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %13, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  br label %177

177:                                              ; preds = %173, %169
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #7
  br label %339

178:                                              ; preds = %149, %147, %136, %134, %120
  %179 = load i32, ptr %9, align 4, !tbaa !9
  %180 = load i32, ptr %16, align 4, !tbaa !9
  %181 = sub nsw i32 %179, %180
  %182 = icmp sgt i32 %181, 0
  br i1 %182, label %183, label %220

183:                                              ; preds = %178
  %184 = load i32, ptr %9, align 4, !tbaa !9
  %185 = load i32, ptr %16, align 4, !tbaa !9
  %186 = sub nsw i32 %184, %185
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %187)
          to label %189 unwind label %165

189:                                              ; preds = %183
  %190 = icmp ult i32 %186, %188
  br i1 %190, label %191, label %220

191:                                              ; preds = %189
  %192 = load i32, ptr %8, align 4, !tbaa !9
  %193 = load i32, ptr %15, align 4, !tbaa !9
  %194 = sub nsw i32 %192, %193
  %195 = icmp sgt i32 %194, 0
  br i1 %195, label %196, label %220

196:                                              ; preds = %191
  %197 = load i32, ptr %8, align 4, !tbaa !9
  %198 = load i32, ptr %15, align 4, !tbaa !9
  %199 = sub nsw i32 %197, %198
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %200)
          to label %202 unwind label %165

202:                                              ; preds = %196
  %203 = icmp ult i32 %199, %201
  br i1 %203, label %204, label %220

204:                                              ; preds = %202
  %205 = load float, ptr %17, align 4, !tbaa !11
  %206 = load ptr, ptr %6, align 8, !tbaa !5
  %207 = getelementptr inbounds %class.ImageContent, ptr %206, i32 0, i32 4
  %208 = load ptr, ptr %207, align 8, !tbaa !13
  %209 = load i32, ptr %9, align 4, !tbaa !9
  %210 = load i32, ptr %16, align 4, !tbaa !9
  %211 = sub nsw i32 %209, %210
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds ptr, ptr %208, i64 %212
  %214 = load ptr, ptr %213, align 8, !tbaa !5
  %215 = load i32, ptr %8, align 4, !tbaa !9
  %216 = load i32, ptr %15, align 4, !tbaa !9
  %217 = sub nsw i32 %215, %216
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds float, ptr %214, i64 %218
  store float %205, ptr %219, align 4, !tbaa !11
  br label %220

220:                                              ; preds = %204, %202, %191, %189, %178
  %221 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %18, i32 noundef 2, i32 noundef 1)
          to label %222 unwind label %165

222:                                              ; preds = %220
  %223 = load double, ptr %221, align 8, !tbaa !17
  %224 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %18, i32 noundef 1, i32 noundef 1)
          to label %225 unwind label %165

225:                                              ; preds = %222
  store double %223, ptr %224, align 8, !tbaa !17
  %226 = load i32, ptr %21, align 4, !tbaa !9
  %227 = sitofp i32 %226 to double
  %228 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %18, i32 noundef 2, i32 noundef 1)
          to label %229 unwind label %165

229:                                              ; preds = %225
  store double %227, ptr %228, align 8, !tbaa !17
  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) %11, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %230 unwind label %284

230:                                              ; preds = %229
  %231 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %232 unwind label %288

232:                                              ; preds = %230
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #7
  %233 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %19, i32 noundef 1, i32 noundef 1)
          to label %234 unwind label %165

234:                                              ; preds = %232
  %235 = load double, ptr %233, align 8, !tbaa !17
  %236 = call double @llvm.rint.f64(double %235)
  %237 = fptosi double %236 to i32
  store i32 %237, ptr %15, align 4, !tbaa !9
  %238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %19, i32 noundef 2, i32 noundef 1)
          to label %239 unwind label %165

239:                                              ; preds = %234
  %240 = load double, ptr %238, align 8, !tbaa !17
  %241 = call double @llvm.rint.f64(double %240)
  %242 = fptosi double %241 to i32
  store i32 %242, ptr %16, align 4, !tbaa !9
  %243 = load i32, ptr %9, align 4, !tbaa !9
  %244 = load i32, ptr %16, align 4, !tbaa !9
  %245 = add nsw i32 %243, %244
  %246 = icmp sgt i32 %245, 0
  br i1 %246, label %247, label %293

247:                                              ; preds = %239
  %248 = load i32, ptr %9, align 4, !tbaa !9
  %249 = load i32, ptr %16, align 4, !tbaa !9
  %250 = add nsw i32 %248, %249
  %251 = load ptr, ptr %6, align 8, !tbaa !5
  %252 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %251)
          to label %253 unwind label %165

253:                                              ; preds = %247
  %254 = icmp ult i32 %250, %252
  br i1 %254, label %255, label %293

255:                                              ; preds = %253
  %256 = load i32, ptr %8, align 4, !tbaa !9
  %257 = load i32, ptr %15, align 4, !tbaa !9
  %258 = add nsw i32 %256, %257
  %259 = icmp sgt i32 %258, 0
  br i1 %259, label %260, label %293

260:                                              ; preds = %255
  %261 = load i32, ptr %8, align 4, !tbaa !9
  %262 = load i32, ptr %15, align 4, !tbaa !9
  %263 = add nsw i32 %261, %262
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  %265 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %264)
          to label %266 unwind label %165

266:                                              ; preds = %260
  %267 = icmp ult i32 %263, %265
  br i1 %267, label %268, label %293

268:                                              ; preds = %266
  %269 = load float, ptr %17, align 4, !tbaa !11
  %270 = load ptr, ptr %6, align 8, !tbaa !5
  %271 = getelementptr inbounds %class.ImageContent, ptr %270, i32 0, i32 4
  %272 = load ptr, ptr %271, align 8, !tbaa !13
  %273 = load i32, ptr %9, align 4, !tbaa !9
  %274 = load i32, ptr %16, align 4, !tbaa !9
  %275 = add nsw i32 %273, %274
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds ptr, ptr %272, i64 %276
  %278 = load ptr, ptr %277, align 8, !tbaa !5
  %279 = load i32, ptr %8, align 4, !tbaa !9
  %280 = load i32, ptr %15, align 4, !tbaa !9
  %281 = add nsw i32 %279, %280
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds float, ptr %278, i64 %282
  store float %269, ptr %283, align 4, !tbaa !11
  br label %293

284:                                              ; preds = %229
  %285 = landingpad { ptr, i32 }
          cleanup
  %286 = extractvalue { ptr, i32 } %285, 0
  store ptr %286, ptr %12, align 8
  %287 = extractvalue { ptr, i32 } %285, 1
  store i32 %287, ptr %13, align 4
  br label %292

288:                                              ; preds = %230
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %12, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %13, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  br label %292

292:                                              ; preds = %288, %284
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #7
  br label %339

293:                                              ; preds = %268, %266, %255, %253, %239
  %294 = load i32, ptr %9, align 4, !tbaa !9
  %295 = load i32, ptr %16, align 4, !tbaa !9
  %296 = sub nsw i32 %294, %295
  %297 = icmp sgt i32 %296, 0
  br i1 %297, label %298, label %335

298:                                              ; preds = %293
  %299 = load i32, ptr %9, align 4, !tbaa !9
  %300 = load i32, ptr %16, align 4, !tbaa !9
  %301 = sub nsw i32 %299, %300
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = invoke noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %302)
          to label %304 unwind label %165

304:                                              ; preds = %298
  %305 = icmp ult i32 %301, %303
  br i1 %305, label %306, label %335

306:                                              ; preds = %304
  %307 = load i32, ptr %8, align 4, !tbaa !9
  %308 = load i32, ptr %15, align 4, !tbaa !9
  %309 = sub nsw i32 %307, %308
  %310 = icmp sgt i32 %309, 0
  br i1 %310, label %311, label %335

311:                                              ; preds = %306
  %312 = load i32, ptr %8, align 4, !tbaa !9
  %313 = load i32, ptr %15, align 4, !tbaa !9
  %314 = sub nsw i32 %312, %313
  %315 = load ptr, ptr %6, align 8, !tbaa !5
  %316 = invoke noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %315)
          to label %317 unwind label %165

317:                                              ; preds = %311
  %318 = icmp ult i32 %314, %316
  br i1 %318, label %319, label %335

319:                                              ; preds = %317
  %320 = load float, ptr %17, align 4, !tbaa !11
  %321 = load ptr, ptr %6, align 8, !tbaa !5
  %322 = getelementptr inbounds %class.ImageContent, ptr %321, i32 0, i32 4
  %323 = load ptr, ptr %322, align 8, !tbaa !13
  %324 = load i32, ptr %9, align 4, !tbaa !9
  %325 = load i32, ptr %16, align 4, !tbaa !9
  %326 = sub nsw i32 %324, %325
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds ptr, ptr %323, i64 %327
  %329 = load ptr, ptr %328, align 8, !tbaa !5
  %330 = load i32, ptr %8, align 4, !tbaa !9
  %331 = load i32, ptr %15, align 4, !tbaa !9
  %332 = sub nsw i32 %330, %331
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds float, ptr %329, i64 %333
  store float %320, ptr %334, align 4, !tbaa !11
  br label %335

335:                                              ; preds = %319, %317, %306, %304, %293
  br label %336

336:                                              ; preds = %335
  %337 = load i32, ptr %21, align 4, !tbaa !9
  %338 = add nsw i32 %337, 1
  store i32 %338, ptr %21, align 4, !tbaa !9
  br label %85, !llvm.loop !19

339:                                              ; preds = %292, %177, %165
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #7
  br label %341

340:                                              ; preds = %89
  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) %18) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #7
  ret void

341:                                              ; preds = %339, %50
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  br label %342

342:                                              ; preds = %341, %46
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  br label %343

343:                                              ; preds = %342, %42
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  br label %344

344:                                              ; preds = %343, %38
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #7
  br label %345

345:                                              ; preds = %344
  %346 = load ptr, ptr %12, align 8
  %347 = load i32, ptr %13, align 4
  %348 = insertvalue { ptr, i32 } poison, ptr %346, 0
  %349 = insertvalue { ptr, i32 } %348, i32 %347, 1
  resume { ptr, i32 } %349
}

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)) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind "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 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 = { 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, !6, i64 16}
!14 = !{!"_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}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !18, i64 0}
!18 = !{!"double", !7, i64 0}
!19 = distinct !{!19, !16}


; 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

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

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

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

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

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

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

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

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 #1 align 2

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 #3

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z14displayEllipseP12ImageContentP6Matrixiif(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, float noundef %4) local_unnamed_addr #6 personality ptr @__gxx_personality_v0 {
  %6 = alloca %class.Matrix, align 8
  %7 = alloca %class.Matrix, align 8
  %8 = alloca %class.Matrix, align 8
  %9 = alloca %class.Matrix, align 8
  %10 = alloca %class.Matrix, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #7
  call void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6)
  %11 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %1)
          to label %12 unwind label %47

12:                                               ; preds = %5
  %13 = call noundef float @_ZSt4rintf(float noundef %4)
  %14 = fmul float %13, 3.000000e+00
  %15 = fptosi float %14 to i32
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #7
  invoke void @_ZN6MatrixC1Eii(ptr noundef nonnull align 8 dereferenceable(24) %7, i32 noundef 2, i32 noundef 1)
          to label %16 unwind label %49

16:                                               ; preds = %12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #7
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %.preheader unwind label %51

.preheader:                                       ; preds = %16
  %17 = getelementptr inbounds i8, ptr %0, i64 16
  %18 = load ptr, ptr %17, align 8, !tbaa !5
  %19 = sext i32 %3 to i64
  %20 = getelementptr inbounds ptr, ptr %18, i64 %19
  %21 = load ptr, ptr %20, align 8, !tbaa !11
  %22 = sext i32 %2 to i64
  %23 = getelementptr float, ptr %21, i64 %22
  %24 = getelementptr i8, ptr %23, i64 -8
  store float 2.550000e+02, ptr %24, align 4, !tbaa !12
  %25 = getelementptr ptr, ptr %18, i64 %19
  %26 = getelementptr i8, ptr %25, i64 -16
  %27 = load ptr, ptr %26, align 8, !tbaa !11
  %28 = getelementptr inbounds float, ptr %27, i64 %22
  store float 2.550000e+02, ptr %28, align 4, !tbaa !12
  %29 = getelementptr float, ptr %21, i64 %22
  %30 = getelementptr i8, ptr %29, i64 -4
  store float 2.550000e+02, ptr %30, align 4, !tbaa !12
  %31 = getelementptr ptr, ptr %18, i64 %19
  %32 = getelementptr i8, ptr %31, i64 -8
  %33 = load ptr, ptr %32, align 8, !tbaa !11
  %34 = getelementptr inbounds float, ptr %33, i64 %22
  store float 2.550000e+02, ptr %34, align 4, !tbaa !12
  %35 = getelementptr inbounds float, ptr %21, i64 %22
  store <2 x float> <float 2.550000e+02, float 2.550000e+02>, ptr %35, align 4, !tbaa !12
  %36 = getelementptr ptr, ptr %18, i64 %19
  %37 = getelementptr i8, ptr %36, i64 8
  %38 = load ptr, ptr %37, align 8, !tbaa !11
  %39 = getelementptr inbounds float, ptr %38, i64 %22
  store float 2.550000e+02, ptr %39, align 4, !tbaa !12
  %40 = getelementptr float, ptr %21, i64 %22
  %41 = getelementptr i8, ptr %40, i64 8
  store float 2.550000e+02, ptr %41, align 4, !tbaa !12
  %42 = getelementptr ptr, ptr %18, i64 %19
  %43 = getelementptr i8, ptr %42, i64 16
  %44 = load ptr, ptr %43, align 8, !tbaa !11
  %45 = getelementptr inbounds float, ptr %44, i64 %22
  store float 2.550000e+02, ptr %45, align 4, !tbaa !12
  %.not112 = icmp slt i32 %15, 0
  br i1 %.not112, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %46 = sub nsw i32 0, %15
  br label %53

47:                                               ; preds = %5
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %179

49:                                               ; preds = %12
  %50 = landingpad { ptr, i32 }
          cleanup
  br label %178

51:                                               ; preds = %16
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %177

._crit_edge:                                      ; preds = %174, %.preheader
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  ret void

53:                                               ; preds = %.lr.ph, %174
  %.0113 = phi i32 [ %46, %.lr.ph ], [ %175, %174 ]
  %54 = sitofp i32 %.0113 to double
  %55 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %7, i32 noundef 1, i32 noundef 1)
  store double %54, ptr %55, align 8, !tbaa !14
  %add = add nsw i32 %.0113, %15
  %sub = sub nsw i32 %15, %.0113
  %56 = mul nsw i32 %add, %sub
  %57 = sitofp i32 %56 to float
  %58 = call noundef float @_ZSt4sqrtf(float noundef %57)
  %59 = call noundef float @_ZSt4rintf(float noundef %58)
  %60 = fptosi float %59 to i32
  %61 = sitofp i32 %60 to double
  %62 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %7, i32 noundef 2, i32 noundef 1)
  store double %61, ptr %62, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #7
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %9, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %63 unwind label %92

63:                                               ; preds = %53
  %64 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %65 unwind label %94

65:                                               ; preds = %63
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #7
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 1, i32 noundef 1)
  %67 = load double, ptr %66, align 8, !tbaa !14
  %68 = call double @llvm.rint.f64(double %67)
  %69 = fptosi double %68 to i32
  %70 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 2, i32 noundef 1)
  %71 = load double, ptr %70, align 8, !tbaa !14
  %72 = call double @llvm.rint.f64(double %71)
  %73 = fptosi double %72 to i32
  %74 = add nsw i32 %73, %3
  %75 = icmp sgt i32 %74, 0
  br i1 %75, label %76, label %97

76:                                               ; preds = %65
  %77 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %78 = icmp ult i32 %74, %77
  br i1 %78, label %79, label %97

79:                                               ; preds = %76
  %80 = add nsw i32 %69, %2
  %81 = icmp sgt i32 %80, 0
  br i1 %81, label %82, label %97

82:                                               ; preds = %79
  %83 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %84 = icmp ult i32 %80, %83
  br i1 %84, label %85, label %97

85:                                               ; preds = %82
  %86 = load ptr, ptr %17, align 8, !tbaa !5
  %87 = zext nneg i32 %74 to i64
  %88 = getelementptr inbounds ptr, ptr %86, i64 %87
  %89 = load ptr, ptr %88, align 8, !tbaa !11
  %90 = zext nneg i32 %80 to i64
  %91 = getelementptr inbounds float, ptr %89, i64 %90
  store float 2.550000e+02, ptr %91, align 4, !tbaa !12
  br label %97

92:                                               ; preds = %53
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %96

94:                                               ; preds = %63
  %95 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  br label %96

96:                                               ; preds = %94, %92
  %.pn = phi { ptr, i32 } [ %95, %94 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #7
  br label %176

97:                                               ; preds = %85, %82, %79, %76, %65
  %98 = sub nsw i32 %3, %73
  %99 = icmp sgt i32 %98, 0
  br i1 %99, label %100, label %116

100:                                              ; preds = %97
  %101 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %102 = icmp ult i32 %98, %101
  br i1 %102, label %103, label %116

103:                                              ; preds = %100
  %104 = sub nsw i32 %2, %69
  %105 = icmp sgt i32 %104, 0
  br i1 %105, label %106, label %116

106:                                              ; preds = %103
  %107 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %108 = icmp ult i32 %104, %107
  br i1 %108, label %109, label %116

109:                                              ; preds = %106
  %110 = load ptr, ptr %17, align 8, !tbaa !5
  %111 = zext nneg i32 %98 to i64
  %112 = getelementptr inbounds ptr, ptr %110, i64 %111
  %113 = load ptr, ptr %112, align 8, !tbaa !11
  %114 = zext nneg i32 %104 to i64
  %115 = getelementptr inbounds float, ptr %113, i64 %114
  store float 2.550000e+02, ptr %115, align 4, !tbaa !12
  br label %116

116:                                              ; preds = %109, %106, %103, %100, %97
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %7, i32 noundef 2, i32 noundef 1)
  %118 = load double, ptr %117, align 8, !tbaa !14
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %7, i32 noundef 1, i32 noundef 1)
  store double %118, ptr %119, align 8, !tbaa !14
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %7, i32 noundef 2, i32 noundef 1)
  store double %54, ptr %120, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #7
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %10, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %121 unwind label %150

121:                                              ; preds = %116
  %122 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %123 unwind label %152

123:                                              ; preds = %121
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  %124 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 1, i32 noundef 1)
  %125 = load double, ptr %124, align 8, !tbaa !14
  %126 = call double @llvm.rint.f64(double %125)
  %127 = fptosi double %126 to i32
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 2, i32 noundef 1)
  %129 = load double, ptr %128, align 8, !tbaa !14
  %130 = call double @llvm.rint.f64(double %129)
  %131 = fptosi double %130 to i32
  %132 = add nsw i32 %131, %3
  %133 = icmp sgt i32 %132, 0
  br i1 %133, label %134, label %155

134:                                              ; preds = %123
  %135 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %136 = icmp ult i32 %132, %135
  br i1 %136, label %137, label %155

137:                                              ; preds = %134
  %138 = add nsw i32 %127, %2
  %139 = icmp sgt i32 %138, 0
  br i1 %139, label %140, label %155

140:                                              ; preds = %137
  %141 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %142 = icmp ult i32 %138, %141
  br i1 %142, label %143, label %155

143:                                              ; preds = %140
  %144 = load ptr, ptr %17, align 8, !tbaa !5
  %145 = zext nneg i32 %132 to i64
  %146 = getelementptr inbounds ptr, ptr %144, i64 %145
  %147 = load ptr, ptr %146, align 8, !tbaa !11
  %148 = zext nneg i32 %138 to i64
  %149 = getelementptr inbounds float, ptr %147, i64 %148
  store float 2.550000e+02, ptr %149, align 4, !tbaa !12
  br label %155

150:                                              ; preds = %116
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %154

152:                                              ; preds = %121
  %153 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  br label %154

154:                                              ; preds = %152, %150
  %.pn105 = phi { ptr, i32 } [ %153, %152 ], [ %151, %150 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  br label %176

155:                                              ; preds = %143, %140, %137, %134, %123
  %156 = sub nsw i32 %3, %131
  %157 = icmp sgt i32 %156, 0
  br i1 %157, label %158, label %174

158:                                              ; preds = %155
  %159 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %160 = icmp ult i32 %156, %159
  br i1 %160, label %161, label %174

161:                                              ; preds = %158
  %162 = sub nsw i32 %2, %127
  %163 = icmp sgt i32 %162, 0
  br i1 %163, label %164, label %174

164:                                              ; preds = %161
  %165 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %0)
  %166 = icmp ult i32 %162, %165
  br i1 %166, label %167, label %174

167:                                              ; preds = %164
  %168 = load ptr, ptr %17, align 8, !tbaa !5
  %169 = zext nneg i32 %156 to i64
  %170 = getelementptr inbounds ptr, ptr %168, i64 %169
  %171 = load ptr, ptr %170, align 8, !tbaa !11
  %172 = zext nneg i32 %162 to i64
  %173 = getelementptr inbounds float, ptr %171, i64 %172
  store float 2.550000e+02, ptr %173, align 4, !tbaa !12
  br label %174

174:                                              ; preds = %155, %158, %161, %164, %167
  %175 = add i32 %.0113, 1
  %exitcond.not = icmp eq i32 %.0113, %15
  br i1 %exitcond.not, label %._crit_edge, label %53, !llvm.loop !16

176:                                              ; preds = %154, %96
  %.pn105.pn = phi { ptr, i32 } [ %.pn105, %154 ], [ %.pn, %96 ]
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #7
  br label %177

177:                                              ; preds = %176, %51
  %.pn105.pn.pn = phi { ptr, i32 } [ %.pn105.pn, %176 ], [ %52, %51 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #7
  br label %178

178:                                              ; preds = %177, %49
  %.pn105.pn.pn.pn = phi { ptr, i32 } [ %.pn105.pn.pn, %177 ], [ %50, %49 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #7
  br label %179

179:                                              ; preds = %178, %47
  %.pn105.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn105.pn.pn.pn, %178 ], [ %48, %47 ]
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  resume { ptr, i32 } %.pn105.pn.pn.pn.pn
}

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 #3

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