; LLVM IR from niessner/Matterport :: code/gaps/pkgs/RGBD (RGBDUtil)

; 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.R3Point = type { [3 x double] }
%class.R2Grid = type { %class.R2Affine, %class.R2Affine, double, ptr, [2 x i32], i32, i32 }
%class.R2Affine = type <{ %class.R2Transformation, %class.R3Matrix, i32, [4 x i8] }>
%class.R2Transformation = type { ptr }
%class.R3Matrix = type { [3 x [3 x double]] }
%class.R2Point = type { [2 x double] }
%class.RGBDCamera = type <{ i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, %class.R4Matrix, ptr, ptr, ptr, ptr, i32, i32, i32, [4 x i8] }>
%class.R4Matrix = type { [4 x [4 x double]] }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [285 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208)) unnamed_addr #2

declare noundef nonnull align 8 dereferenceable(208) ptr @_ZN6R2GridaSERKS_(ptr noundef nonnull align 8 dereferenceable(208), ptr noundef nonnull align 8 dereferenceable(208)) #1

declare void @_ZN6R2Grid5ClearEd(ptr noundef nonnull align 8 dereferenceable(208), double noundef) #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNK6R2Grid9GridValueEii(ptr noundef nonnull align 8 dereferenceable(208), i32 noundef, i32 noundef) #4 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6R2Grid12SetGridValueEiid(ptr noundef nonnull align 8 dereferenceable(208), i32 noundef, i32 noundef, double noundef) #4 align 2

declare void @_ZN6R2GridC1ERKS_(ptr noundef nonnull align 8 dereferenceable(208), ptr noundef nonnull align 8 dereferenceable(208)) unnamed_addr #1

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

declare void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #1

declare void @_Z7RNAbortPKcz(ptr noundef, ...) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7R2Point1XEv(ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7R2Point1YEv(ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7R2Point5ResetEdd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z31RGBDCreateUndistortedDepthImageRK6R2GridRS_RK10RGBDCameraRS3_(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr noundef nonnull align 8 dereferenceable(208) %1, ptr noundef nonnull align 8 dereferenceable(348) %2, ptr noundef nonnull align 8 dereferenceable(348) %3) #6 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca %class.R2Grid, align 8
  %11 = alloca %class.R2Grid, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca i32, align 4
  %19 = alloca double, align 8
  %20 = alloca %class.R2Point, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca double, align 8
  %31 = alloca %class.R3Point, align 8
  %32 = alloca %class.R3Point, align 8
  %33 = alloca %class.R3Point, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  %38 = load ptr, ptr %9, align 8, !tbaa !5
  %39 = getelementptr inbounds %class.RGBDCamera, ptr %38, i32 0, i32 18
  %40 = load double, ptr %39, align 8, !tbaa !9
  %41 = fcmp oeq double %40, 0.000000e+00
  br i1 %41, label %42, label %72

42:                                               ; preds = %4
  %43 = load ptr, ptr %9, align 8, !tbaa !5
  %44 = getelementptr inbounds %class.RGBDCamera, ptr %43, i32 0, i32 19
  %45 = load double, ptr %44, align 8, !tbaa !14
  %46 = fcmp oeq double %45, 0.000000e+00
  br i1 %46, label %47, label %72

47:                                               ; preds = %42
  %48 = load ptr, ptr %9, align 8, !tbaa !5
  %49 = getelementptr inbounds %class.RGBDCamera, ptr %48, i32 0, i32 20
  %50 = load double, ptr %49, align 8, !tbaa !15
  %51 = fcmp oeq double %50, 0.000000e+00
  br i1 %51, label %52, label %72

52:                                               ; preds = %47
  %53 = load ptr, ptr %9, align 8, !tbaa !5
  %54 = getelementptr inbounds %class.RGBDCamera, ptr %53, i32 0, i32 21
  %55 = load double, ptr %54, align 8, !tbaa !16
  %56 = fcmp oeq double %55, 0.000000e+00
  br i1 %56, label %57, label %72

57:                                               ; preds = %52
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  %59 = getelementptr inbounds %class.RGBDCamera, ptr %58, i32 0, i32 22
  %60 = load double, ptr %59, align 8, !tbaa !17
  %61 = fcmp oeq double %60, 0.000000e+00
  br i1 %61, label %62, label %72

62:                                               ; preds = %57
  %63 = load ptr, ptr %9, align 8, !tbaa !5
  %64 = getelementptr inbounds %class.RGBDCamera, ptr %63, i32 0, i32 23
  %65 = load double, ptr %64, align 8, !tbaa !18
  %66 = fcmp oeq double %65, 0.000000e+00
  br i1 %66, label %67, label %72

67:                                               ; preds = %62
  %68 = load ptr, ptr %9, align 8, !tbaa !5
  %69 = getelementptr inbounds %class.RGBDCamera, ptr %68, i32 0, i32 24
  %70 = call noundef i32 @_ZNK8R4Matrix10IsIdentityEv(ptr noundef nonnull align 8 dereferenceable(128) %69)
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %73, label %72

72:                                               ; preds = %67, %62, %57, %52, %47, %42, %4
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.3, i32 noundef 489, ptr noundef @.str.2)
  br label %73

73:                                               ; preds = %72, %67
  %74 = load ptr, ptr %8, align 8, !tbaa !5
  %75 = getelementptr inbounds %class.RGBDCamera, ptr %74, i32 0, i32 2
  %76 = load i32, ptr %75, align 8, !tbaa !19
  %77 = icmp eq i32 %76, 0
  br i1 %77, label %83, label %78

78:                                               ; preds = %73
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = getelementptr inbounds %class.RGBDCamera, ptr %79, i32 0, i32 3
  %81 = load i32, ptr %80, align 4, !tbaa !20
  %82 = icmp eq i32 %81, 0
  br i1 %82, label %83, label %84

83:                                               ; preds = %78, %73
  store i32 0, ptr %5, align 4
  br label %645

84:                                               ; preds = %78
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = getelementptr inbounds %class.RGBDCamera, ptr %85, i32 0, i32 2
  %87 = load i32, ptr %86, align 8, !tbaa !19
  %88 = icmp eq i32 %87, 0
  br i1 %88, label %94, label %89

89:                                               ; preds = %84
  %90 = load ptr, ptr %9, align 8, !tbaa !5
  %91 = getelementptr inbounds %class.RGBDCamera, ptr %90, i32 0, i32 3
  %92 = load i32, ptr %91, align 4, !tbaa !20
  %93 = icmp eq i32 %92, 0
  br i1 %93, label %94, label %95

94:                                               ; preds = %89, %84
  store i32 0, ptr %5, align 4
  br label %645

95:                                               ; preds = %89
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %96)
  %98 = icmp eq i32 %97, 0
  br i1 %98, label %103, label %99

99:                                               ; preds = %95
  %100 = load ptr, ptr %6, align 8, !tbaa !5
  %101 = call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %100)
  %102 = icmp eq i32 %101, 0
  br i1 %102, label %103, label %104

103:                                              ; preds = %99, %95
  store i32 0, ptr %5, align 4
  br label %645

104:                                              ; preds = %99
  %105 = load ptr, ptr %9, align 8, !tbaa !5
  %106 = getelementptr inbounds %class.RGBDCamera, ptr %105, i32 0, i32 2
  %107 = load i32, ptr %106, align 8, !tbaa !19
  %108 = load ptr, ptr %8, align 8, !tbaa !5
  %109 = getelementptr inbounds %class.RGBDCamera, ptr %108, i32 0, i32 2
  %110 = load i32, ptr %109, align 8, !tbaa !19
  %111 = icmp eq i32 %107, %110
  br i1 %111, label %112, label %169

112:                                              ; preds = %104
  %113 = load ptr, ptr %9, align 8, !tbaa !5
  %114 = getelementptr inbounds %class.RGBDCamera, ptr %113, i32 0, i32 3
  %115 = load i32, ptr %114, align 4, !tbaa !20
  %116 = load ptr, ptr %8, align 8, !tbaa !5
  %117 = getelementptr inbounds %class.RGBDCamera, ptr %116, i32 0, i32 3
  %118 = load i32, ptr %117, align 4, !tbaa !20
  %119 = icmp eq i32 %115, %118
  br i1 %119, label %120, label %169

120:                                              ; preds = %112
  %121 = load ptr, ptr %8, align 8, !tbaa !5
  %122 = getelementptr inbounds %class.RGBDCamera, ptr %121, i32 0, i32 16
  %123 = load double, ptr %122, align 8, !tbaa !21
  %124 = fcmp oeq double %123, 0.000000e+00
  br i1 %124, label %125, label %169

125:                                              ; preds = %120
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = getelementptr inbounds %class.RGBDCamera, ptr %126, i32 0, i32 17
  %128 = load double, ptr %127, align 8, !tbaa !22
  %129 = fcmp oeq double %128, 0.000000e+00
  br i1 %129, label %130, label %169

130:                                              ; preds = %125
  %131 = load ptr, ptr %8, align 8, !tbaa !5
  %132 = getelementptr inbounds %class.RGBDCamera, ptr %131, i32 0, i32 18
  %133 = load double, ptr %132, align 8, !tbaa !9
  %134 = fcmp oeq double %133, 0.000000e+00
  br i1 %134, label %135, label %169

135:                                              ; preds = %130
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = getelementptr inbounds %class.RGBDCamera, ptr %136, i32 0, i32 19
  %138 = load double, ptr %137, align 8, !tbaa !14
  %139 = fcmp oeq double %138, 0.000000e+00
  br i1 %139, label %140, label %169

140:                                              ; preds = %135
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  %142 = getelementptr inbounds %class.RGBDCamera, ptr %141, i32 0, i32 20
  %143 = load double, ptr %142, align 8, !tbaa !15
  %144 = fcmp oeq double %143, 0.000000e+00
  br i1 %144, label %145, label %169

145:                                              ; preds = %140
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = getelementptr inbounds %class.RGBDCamera, ptr %146, i32 0, i32 21
  %148 = load double, ptr %147, align 8, !tbaa !16
  %149 = fcmp oeq double %148, 0.000000e+00
  br i1 %149, label %150, label %169

150:                                              ; preds = %145
  %151 = load ptr, ptr %8, align 8, !tbaa !5
  %152 = getelementptr inbounds %class.RGBDCamera, ptr %151, i32 0, i32 22
  %153 = load double, ptr %152, align 8, !tbaa !17
  %154 = fcmp oeq double %153, 0.000000e+00
  br i1 %154, label %155, label %169

155:                                              ; preds = %150
  %156 = load ptr, ptr %8, align 8, !tbaa !5
  %157 = getelementptr inbounds %class.RGBDCamera, ptr %156, i32 0, i32 23
  %158 = load double, ptr %157, align 8, !tbaa !18
  %159 = fcmp oeq double %158, 0.000000e+00
  br i1 %159, label %160, label %169

160:                                              ; preds = %155
  %161 = load ptr, ptr %8, align 8, !tbaa !5
  %162 = getelementptr inbounds %class.RGBDCamera, ptr %161, i32 0, i32 24
  %163 = call noundef i32 @_ZNK8R4Matrix10IsIdentityEv(ptr noundef nonnull align 8 dereferenceable(128) %162)
  %164 = icmp ne i32 %163, 0
  br i1 %164, label %165, label %169

165:                                              ; preds = %160
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = call noundef nonnull align 8 dereferenceable(208) ptr @_ZN6R2GridaSERKS_(ptr noundef nonnull align 8 dereferenceable(208) %167, ptr noundef nonnull align 8 dereferenceable(208) %166)
  store i32 1, ptr %5, align 4
  br label %645

169:                                              ; preds = %160, %155, %150, %145, %140, %135, %130, %125, %120, %112, %104
  call void @llvm.lifetime.start.p0(i64 208, ptr %10) #7
  %170 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN6R2GridC1ERKS_(ptr noundef nonnull align 8 dereferenceable(208) %10, ptr noundef nonnull align 8 dereferenceable(208) %170)
  call void @llvm.lifetime.start.p0(i64 208, ptr %11) #7
  %171 = load ptr, ptr %9, align 8, !tbaa !5
  %172 = getelementptr inbounds %class.RGBDCamera, ptr %171, i32 0, i32 2
  %173 = load i32, ptr %172, align 8, !tbaa !19
  %174 = load ptr, ptr %9, align 8, !tbaa !5
  %175 = getelementptr inbounds %class.RGBDCamera, ptr %174, i32 0, i32 3
  %176 = load i32, ptr %175, align 4, !tbaa !20
  invoke void @_ZN6R2GridC1Eii(ptr noundef nonnull align 8 dereferenceable(208) %11, i32 noundef %173, i32 noundef %176)
          to label %177 unwind label %212

177:                                              ; preds = %169
  %178 = load ptr, ptr %7, align 8, !tbaa !5
  %179 = invoke noundef nonnull align 8 dereferenceable(208) ptr @_ZN6R2GridaSERKS_(ptr noundef nonnull align 8 dereferenceable(208) %178, ptr noundef nonnull align 8 dereferenceable(208) %11)
          to label %180 unwind label %216

180:                                              ; preds = %177
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %11) #7
  call void @llvm.lifetime.end.p0(i64 208, ptr %11) #7
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN6R2Grid5ClearEd(ptr noundef nonnull align 8 dereferenceable(208) %181, double noundef -3.210000e+02)
          to label %182 unwind label %221

182:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  store double 5.000000e-01, ptr %14, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  %183 = load double, ptr %14, align 8, !tbaa !23
  %184 = invoke noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %10)
          to label %185 unwind label %225

185:                                              ; preds = %182
  %186 = sitofp i32 %184 to double
  %187 = fmul double %183, %186
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = invoke noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %188)
          to label %190 unwind label %225

190:                                              ; preds = %185
  %191 = sitofp i32 %189 to double
  %192 = fdiv double %187, %191
  store double %192, ptr %15, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %193 = load double, ptr %14, align 8, !tbaa !23
  %194 = invoke noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %10)
          to label %195 unwind label %229

195:                                              ; preds = %190
  %196 = sitofp i32 %194 to double
  %197 = fmul double %193, %196
  %198 = load ptr, ptr %7, align 8, !tbaa !5
  %199 = invoke noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %198)
          to label %200 unwind label %229

200:                                              ; preds = %195
  %201 = sitofp i32 %199 to double
  %202 = fdiv double %197, %201
  store double %202, ptr %16, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %203 = load double, ptr %16, align 8, !tbaa !23
  %204 = fmul double 5.000000e-01, %203
  store double %204, ptr %17, align 8, !tbaa !23
  br label %205

205:                                              ; preds = %636, %200
  %206 = load double, ptr %17, align 8, !tbaa !23
  %207 = invoke noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %10)
          to label %208 unwind label %233

208:                                              ; preds = %205
  %209 = sitofp i32 %207 to double
  %210 = fcmp olt double %206, %209
  br i1 %210, label %237, label %211

211:                                              ; preds = %208
  store i32 2, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %641

212:                                              ; preds = %169
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %12, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %13, align 4
  br label %220

216:                                              ; preds = %177
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %12, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %13, align 4
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %11) #7
  br label %220

220:                                              ; preds = %216, %212
  call void @llvm.lifetime.end.p0(i64 208, ptr %11) #7
  br label %644

221:                                              ; preds = %180
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %12, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %13, align 4
  br label %644

225:                                              ; preds = %185, %182
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %12, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %13, align 4
  br label %643

229:                                              ; preds = %195, %190
  %230 = landingpad { ptr, i32 }
          cleanup
  %231 = extractvalue { ptr, i32 } %230, 0
  store ptr %231, ptr %12, align 8
  %232 = extractvalue { ptr, i32 } %230, 1
  store i32 %232, ptr %13, align 4
  br label %642

233:                                              ; preds = %205
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %12, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %13, align 4
  br label %640

237:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %238 = load double, ptr %15, align 8, !tbaa !23
  %239 = fmul double 5.000000e-01, %238
  store double %239, ptr %19, align 8, !tbaa !23
  br label %240

240:                                              ; preds = %621, %237
  %241 = load double, ptr %19, align 8, !tbaa !23
  %242 = invoke noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %10)
          to label %243 unwind label %247

243:                                              ; preds = %240
  %244 = sitofp i32 %242 to double
  %245 = fcmp olt double %241, %244
  br i1 %245, label %251, label %246

246:                                              ; preds = %243
  store i32 5, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %635

247:                                              ; preds = %240
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %12, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %13, align 4
  br label %634

251:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #7
  %252 = load double, ptr %19, align 8, !tbaa !23
  %253 = load double, ptr %17, align 8, !tbaa !23
  invoke void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16) %20, double noundef %252, double noundef %253)
          to label %254 unwind label %395

254:                                              ; preds = %251
  %255 = load ptr, ptr %8, align 8, !tbaa !5
  %256 = getelementptr inbounds %class.RGBDCamera, ptr %255, i32 0, i32 18
  %257 = load double, ptr %256, align 8, !tbaa !9
  %258 = fcmp une double %257, 0.000000e+00
  br i1 %258, label %284, label %259

259:                                              ; preds = %254
  %260 = load ptr, ptr %8, align 8, !tbaa !5
  %261 = getelementptr inbounds %class.RGBDCamera, ptr %260, i32 0, i32 19
  %262 = load double, ptr %261, align 8, !tbaa !14
  %263 = fcmp une double %262, 0.000000e+00
  br i1 %263, label %284, label %264

264:                                              ; preds = %259
  %265 = load ptr, ptr %8, align 8, !tbaa !5
  %266 = getelementptr inbounds %class.RGBDCamera, ptr %265, i32 0, i32 20
  %267 = load double, ptr %266, align 8, !tbaa !15
  %268 = fcmp une double %267, 0.000000e+00
  br i1 %268, label %284, label %269

269:                                              ; preds = %264
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = getelementptr inbounds %class.RGBDCamera, ptr %270, i32 0, i32 20
  %272 = load double, ptr %271, align 8, !tbaa !15
  %273 = fcmp une double %272, 0.000000e+00
  br i1 %273, label %284, label %274

274:                                              ; preds = %269
  %275 = load ptr, ptr %8, align 8, !tbaa !5
  %276 = getelementptr inbounds %class.RGBDCamera, ptr %275, i32 0, i32 22
  %277 = load double, ptr %276, align 8, !tbaa !17
  %278 = fcmp une double %277, 0.000000e+00
  br i1 %278, label %284, label %279

279:                                              ; preds = %274
  %280 = load ptr, ptr %8, align 8, !tbaa !5
  %281 = getelementptr inbounds %class.RGBDCamera, ptr %280, i32 0, i32 23
  %282 = load double, ptr %281, align 8, !tbaa !18
  %283 = fcmp une double %282, 0.000000e+00
  br i1 %283, label %284, label %403

284:                                              ; preds = %279, %274, %269, %264, %259, %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %285 = load double, ptr %19, align 8, !tbaa !23
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %class.RGBDCamera, ptr %286, i32 0, i32 16
  %288 = load double, ptr %287, align 8, !tbaa !21
  %289 = fsub double %285, %288
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  %291 = getelementptr inbounds %class.RGBDCamera, ptr %290, i32 0, i32 14
  %292 = load double, ptr %291, align 8, !tbaa !24
  %293 = fdiv double %289, %292
  store double %293, ptr %21, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %294 = load double, ptr %17, align 8, !tbaa !23
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  %296 = getelementptr inbounds %class.RGBDCamera, ptr %295, i32 0, i32 17
  %297 = load double, ptr %296, align 8, !tbaa !22
  %298 = fsub double %294, %297
  %299 = load ptr, ptr %8, align 8, !tbaa !5
  %300 = getelementptr inbounds %class.RGBDCamera, ptr %299, i32 0, i32 15
  %301 = load double, ptr %300, align 8, !tbaa !25
  %302 = fdiv double %298, %301
  store double %302, ptr %22, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %303 = load double, ptr %21, align 8, !tbaa !23
  %304 = load double, ptr %21, align 8, !tbaa !23
  %305 = load double, ptr %22, align 8, !tbaa !23
  %306 = load double, ptr %22, align 8, !tbaa !23
  %307 = fmul double %305, %306
  %308 = call double @llvm.fmuladd.f64(double %303, double %304, double %307)
  store double %308, ptr %23, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %309 = load double, ptr %23, align 8, !tbaa !23
  %310 = load double, ptr %23, align 8, !tbaa !23
  %311 = fmul double %309, %310
  store double %311, ptr %24, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %312 = load double, ptr %23, align 8, !tbaa !23
  %313 = load ptr, ptr %8, align 8, !tbaa !5
  %314 = getelementptr inbounds %class.RGBDCamera, ptr %313, i32 0, i32 18
  %315 = load double, ptr %314, align 8, !tbaa !9
  %316 = call double @llvm.fmuladd.f64(double %312, double %315, double 1.000000e+00)
  %317 = load double, ptr %24, align 8, !tbaa !23
  %318 = load ptr, ptr %8, align 8, !tbaa !5
  %319 = getelementptr inbounds %class.RGBDCamera, ptr %318, i32 0, i32 19
  %320 = load double, ptr %319, align 8, !tbaa !14
  %321 = call double @llvm.fmuladd.f64(double %317, double %320, double %316)
  %322 = load double, ptr %24, align 8, !tbaa !23
  %323 = load double, ptr %23, align 8, !tbaa !23
  %324 = fmul double %322, %323
  %325 = load ptr, ptr %8, align 8, !tbaa !5
  %326 = getelementptr inbounds %class.RGBDCamera, ptr %325, i32 0, i32 20
  %327 = load double, ptr %326, align 8, !tbaa !15
  %328 = call double @llvm.fmuladd.f64(double %324, double %327, double %321)
  %329 = load double, ptr %24, align 8, !tbaa !23
  %330 = load double, ptr %24, align 8, !tbaa !23
  %331 = fmul double %329, %330
  %332 = load ptr, ptr %8, align 8, !tbaa !5
  %333 = getelementptr inbounds %class.RGBDCamera, ptr %332, i32 0, i32 21
  %334 = load double, ptr %333, align 8, !tbaa !16
  %335 = call double @llvm.fmuladd.f64(double %331, double %334, double %328)
  store double %335, ptr %25, align 8, !tbaa !23
  %336 = load double, ptr %25, align 8, !tbaa !23
  %337 = load double, ptr %21, align 8, !tbaa !23
  %338 = load ptr, ptr %8, align 8, !tbaa !5
  %339 = getelementptr inbounds %class.RGBDCamera, ptr %338, i32 0, i32 23
  %340 = load double, ptr %339, align 8, !tbaa !18
  %341 = load double, ptr %23, align 8, !tbaa !23
  %342 = load double, ptr %21, align 8, !tbaa !23
  %343 = fmul double 2.000000e+00, %342
  %344 = load double, ptr %21, align 8, !tbaa !23
  %345 = call double @llvm.fmuladd.f64(double %343, double %344, double %341)
  %346 = fmul double %340, %345
  %347 = call double @llvm.fmuladd.f64(double %336, double %337, double %346)
  %348 = load ptr, ptr %8, align 8, !tbaa !5
  %349 = getelementptr inbounds %class.RGBDCamera, ptr %348, i32 0, i32 22
  %350 = load double, ptr %349, align 8, !tbaa !17
  %351 = fmul double 2.000000e+00, %350
  %352 = load double, ptr %21, align 8, !tbaa !23
  %353 = fmul double %351, %352
  %354 = load double, ptr %22, align 8, !tbaa !23
  %355 = call double @llvm.fmuladd.f64(double %353, double %354, double %347)
  store double %355, ptr %21, align 8, !tbaa !23
  %356 = load double, ptr %25, align 8, !tbaa !23
  %357 = load double, ptr %22, align 8, !tbaa !23
  %358 = load ptr, ptr %8, align 8, !tbaa !5
  %359 = getelementptr inbounds %class.RGBDCamera, ptr %358, i32 0, i32 22
  %360 = load double, ptr %359, align 8, !tbaa !17
  %361 = load double, ptr %23, align 8, !tbaa !23
  %362 = load double, ptr %22, align 8, !tbaa !23
  %363 = fmul double 2.000000e+00, %362
  %364 = load double, ptr %22, align 8, !tbaa !23
  %365 = call double @llvm.fmuladd.f64(double %363, double %364, double %361)
  %366 = fmul double %360, %365
  %367 = call double @llvm.fmuladd.f64(double %356, double %357, double %366)
  %368 = load ptr, ptr %8, align 8, !tbaa !5
  %369 = getelementptr inbounds %class.RGBDCamera, ptr %368, i32 0, i32 23
  %370 = load double, ptr %369, align 8, !tbaa !18
  %371 = fmul double 2.000000e+00, %370
  %372 = load double, ptr %21, align 8, !tbaa !23
  %373 = fmul double %371, %372
  %374 = load double, ptr %22, align 8, !tbaa !23
  %375 = call double @llvm.fmuladd.f64(double %373, double %374, double %367)
  store double %375, ptr %22, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %376 = load double, ptr %21, align 8, !tbaa !23
  %377 = load ptr, ptr %8, align 8, !tbaa !5
  %378 = getelementptr inbounds %class.RGBDCamera, ptr %377, i32 0, i32 14
  %379 = load double, ptr %378, align 8, !tbaa !24
  %380 = load ptr, ptr %8, align 8, !tbaa !5
  %381 = getelementptr inbounds %class.RGBDCamera, ptr %380, i32 0, i32 16
  %382 = load double, ptr %381, align 8, !tbaa !21
  %383 = call double @llvm.fmuladd.f64(double %376, double %379, double %382)
  store double %383, ptr %26, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %384 = load double, ptr %22, align 8, !tbaa !23
  %385 = load ptr, ptr %8, align 8, !tbaa !5
  %386 = getelementptr inbounds %class.RGBDCamera, ptr %385, i32 0, i32 15
  %387 = load double, ptr %386, align 8, !tbaa !25
  %388 = load ptr, ptr %8, align 8, !tbaa !5
  %389 = getelementptr inbounds %class.RGBDCamera, ptr %388, i32 0, i32 17
  %390 = load double, ptr %389, align 8, !tbaa !22
  %391 = call double @llvm.fmuladd.f64(double %384, double %387, double %390)
  store double %391, ptr %27, align 8, !tbaa !23
  %392 = load double, ptr %26, align 8, !tbaa !23
  %393 = load double, ptr %27, align 8, !tbaa !23
  invoke void @_ZN7R2Point5ResetEdd(ptr noundef nonnull align 8 dereferenceable(16) %20, double noundef %392, double noundef %393)
          to label %394 unwind label %399

394:                                              ; preds = %284
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %403

395:                                              ; preds = %251
  %396 = landingpad { ptr, i32 }
          cleanup
  %397 = extractvalue { ptr, i32 } %396, 0
  store ptr %397, ptr %12, align 8
  %398 = extractvalue { ptr, i32 } %396, 1
  store i32 %398, ptr %13, align 4
  br label %633

399:                                              ; preds = %284
  %400 = landingpad { ptr, i32 }
          cleanup
  %401 = extractvalue { ptr, i32 } %400, 0
  store ptr %401, ptr %12, align 8
  %402 = extractvalue { ptr, i32 } %400, 1
  store i32 %402, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  br label %633

403:                                              ; preds = %394, %279
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %404 = invoke noundef double @_ZNK7R2Point1XEv(ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %405 unwind label %415

405:                                              ; preds = %403
  %406 = fadd double %404, 5.000000e-01
  %407 = fptosi double %406 to i32
  store i32 %407, ptr %28, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %408 = invoke noundef double @_ZNK7R2Point1YEv(ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %409 unwind label %419

409:                                              ; preds = %405
  %410 = fadd double %408, 5.000000e-01
  %411 = fptosi double %410 to i32
  store i32 %411, ptr %29, align 4, !tbaa !26
  %412 = load i32, ptr %28, align 4, !tbaa !26
  %413 = icmp slt i32 %412, 0
  br i1 %413, label %414, label %423

414:                                              ; preds = %409
  store i32 7, ptr %18, align 4
  br label %618

415:                                              ; preds = %403
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %12, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %13, align 4
  br label %632

419:                                              ; preds = %433, %423, %405
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %12, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %13, align 4
  br label %631

423:                                              ; preds = %409
  %424 = load i32, ptr %28, align 4, !tbaa !26
  %425 = invoke noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %10)
          to label %426 unwind label %419

426:                                              ; preds = %423
  %427 = icmp sge i32 %424, %425
  br i1 %427, label %428, label %429

428:                                              ; preds = %426
  store i32 7, ptr %18, align 4
  br label %618

429:                                              ; preds = %426
  %430 = load i32, ptr %29, align 4, !tbaa !26
  %431 = icmp slt i32 %430, 0
  br i1 %431, label %432, label %433

432:                                              ; preds = %429
  store i32 7, ptr %18, align 4
  br label %618

433:                                              ; preds = %429
  %434 = load i32, ptr %29, align 4, !tbaa !26
  %435 = invoke noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %10)
          to label %436 unwind label %419

436:                                              ; preds = %433
  %437 = icmp sge i32 %434, %435
  br i1 %437, label %438, label %439

438:                                              ; preds = %436
  store i32 7, ptr %18, align 4
  br label %618

439:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %440 = load i32, ptr %28, align 4, !tbaa !26
  %441 = load i32, ptr %29, align 4, !tbaa !26
  %442 = invoke noundef double @_ZNK6R2Grid9GridValueEii(ptr noundef nonnull align 8 dereferenceable(208) %10, i32 noundef %440, i32 noundef %441)
          to label %443 unwind label %447

443:                                              ; preds = %439
  store double %442, ptr %30, align 8, !tbaa !23
  %444 = load double, ptr %30, align 8, !tbaa !23
  %445 = fcmp ole double %444, 0.000000e+00
  br i1 %445, label %446, label %451

446:                                              ; preds = %443
  store i32 7, ptr %18, align 4
  br label %617

447:                                              ; preds = %439
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %12, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %13, align 4
  br label %630

451:                                              ; preds = %443
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #7
  invoke void @_ZN7R3PointC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %31)
          to label %452 unwind label %538

452:                                              ; preds = %451
  %453 = load double, ptr %19, align 8, !tbaa !23
  %454 = load ptr, ptr %8, align 8, !tbaa !5
  %455 = getelementptr inbounds %class.RGBDCamera, ptr %454, i32 0, i32 16
  %456 = load double, ptr %455, align 8, !tbaa !21
  %457 = fsub double %453, %456
  %458 = load double, ptr %30, align 8, !tbaa !23
  %459 = fmul double %457, %458
  %460 = load ptr, ptr %8, align 8, !tbaa !5
  %461 = getelementptr inbounds %class.RGBDCamera, ptr %460, i32 0, i32 14
  %462 = load double, ptr %461, align 8, !tbaa !24
  %463 = fdiv double %459, %462
  %464 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 0)
          to label %465 unwind label %538

465:                                              ; preds = %452
  store double %463, ptr %464, align 8, !tbaa !23
  %466 = load double, ptr %17, align 8, !tbaa !23
  %467 = load ptr, ptr %8, align 8, !tbaa !5
  %468 = getelementptr inbounds %class.RGBDCamera, ptr %467, i32 0, i32 17
  %469 = load double, ptr %468, align 8, !tbaa !22
  %470 = fsub double %466, %469
  %471 = load double, ptr %30, align 8, !tbaa !23
  %472 = fmul double %470, %471
  %473 = load ptr, ptr %8, align 8, !tbaa !5
  %474 = getelementptr inbounds %class.RGBDCamera, ptr %473, i32 0, i32 15
  %475 = load double, ptr %474, align 8, !tbaa !25
  %476 = fdiv double %472, %475
  %477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 1)
          to label %478 unwind label %538

478:                                              ; preds = %465
  store double %476, ptr %477, align 8, !tbaa !23
  %479 = load double, ptr %30, align 8, !tbaa !23
  %480 = fneg double %479
  %481 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 2)
          to label %482 unwind label %538

482:                                              ; preds = %478
  store double %480, ptr %481, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #7
  %483 = load ptr, ptr %8, align 8, !tbaa !5
  %484 = getelementptr inbounds %class.RGBDCamera, ptr %483, i32 0, i32 24
  invoke void @_ZmlRK8R4MatrixRK7R3Point(ptr dead_on_unwind writable sret(%class.R3Point) align 8 %32, ptr noundef nonnull align 8 dereferenceable(128) %484, ptr noundef nonnull align 8 dereferenceable(24) %31)
          to label %485 unwind label %542

485:                                              ; preds = %482
  %486 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN7R3PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %487 unwind label %542

487:                                              ; preds = %485
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %33) #7
  invoke void @_ZN7R3PointC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %33)
          to label %488 unwind label %546

488:                                              ; preds = %487
  %489 = load ptr, ptr %9, align 8, !tbaa !5
  %490 = getelementptr inbounds %class.RGBDCamera, ptr %489, i32 0, i32 16
  %491 = load double, ptr %490, align 8, !tbaa !21
  %492 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 0)
          to label %493 unwind label %546

493:                                              ; preds = %488
  %494 = load double, ptr %492, align 8, !tbaa !23
  %495 = load ptr, ptr %9, align 8, !tbaa !5
  %496 = getelementptr inbounds %class.RGBDCamera, ptr %495, i32 0, i32 14
  %497 = load double, ptr %496, align 8, !tbaa !24
  %498 = fmul double %494, %497
  %499 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 2)
          to label %500 unwind label %546

500:                                              ; preds = %493
  %501 = load double, ptr %499, align 8, !tbaa !23
  %502 = fneg double %501
  %503 = fdiv double %498, %502
  %504 = fadd double %491, %503
  %505 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 0)
          to label %506 unwind label %546

506:                                              ; preds = %500
  store double %504, ptr %505, align 8, !tbaa !23
  %507 = load ptr, ptr %9, align 8, !tbaa !5
  %508 = getelementptr inbounds %class.RGBDCamera, ptr %507, i32 0, i32 17
  %509 = load double, ptr %508, align 8, !tbaa !22
  %510 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 1)
          to label %511 unwind label %546

511:                                              ; preds = %506
  %512 = load double, ptr %510, align 8, !tbaa !23
  %513 = load ptr, ptr %9, align 8, !tbaa !5
  %514 = getelementptr inbounds %class.RGBDCamera, ptr %513, i32 0, i32 15
  %515 = load double, ptr %514, align 8, !tbaa !25
  %516 = fmul double %512, %515
  %517 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 2)
          to label %518 unwind label %546

518:                                              ; preds = %511
  %519 = load double, ptr %517, align 8, !tbaa !23
  %520 = fneg double %519
  %521 = fdiv double %516, %520
  %522 = fadd double %509, %521
  %523 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 1)
          to label %524 unwind label %546

524:                                              ; preds = %518
  store double %522, ptr %523, align 8, !tbaa !23
  %525 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %31, i32 noundef 2)
          to label %526 unwind label %546

526:                                              ; preds = %524
  %527 = load double, ptr %525, align 8, !tbaa !23
  %528 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 2)
          to label %529 unwind label %546

529:                                              ; preds = %526
  store double %527, ptr %528, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %530 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 0)
          to label %531 unwind label %550

531:                                              ; preds = %529
  %532 = load double, ptr %530, align 8, !tbaa !23
  %533 = fadd double %532, 5.000000e-01
  %534 = fptosi double %533 to i32
  store i32 %534, ptr %34, align 4, !tbaa !26
  %535 = load i32, ptr %34, align 4, !tbaa !26
  %536 = icmp slt i32 %535, 0
  br i1 %536, label %537, label %554

537:                                              ; preds = %531
  store i32 7, ptr %18, align 4
  br label %616

538:                                              ; preds = %478, %465, %452, %451
  %539 = landingpad { ptr, i32 }
          cleanup
  %540 = extractvalue { ptr, i32 } %539, 0
  store ptr %540, ptr %12, align 8
  %541 = extractvalue { ptr, i32 } %539, 1
  store i32 %541, ptr %13, align 4
  br label %629

542:                                              ; preds = %485, %482
  %543 = landingpad { ptr, i32 }
          cleanup
  %544 = extractvalue { ptr, i32 } %543, 0
  store ptr %544, ptr %12, align 8
  %545 = extractvalue { ptr, i32 } %543, 1
  store i32 %545, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #7
  br label %629

546:                                              ; preds = %526, %524, %518, %511, %506, %500, %493, %488, %487
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %12, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %13, align 4
  br label %628

550:                                              ; preds = %554, %529
  %551 = landingpad { ptr, i32 }
          cleanup
  %552 = extractvalue { ptr, i32 } %551, 0
  store ptr %552, ptr %12, align 8
  %553 = extractvalue { ptr, i32 } %551, 1
  store i32 %553, ptr %13, align 4
  br label %627

554:                                              ; preds = %531
  %555 = load i32, ptr %34, align 4, !tbaa !26
  %556 = load ptr, ptr %7, align 8, !tbaa !5
  %557 = invoke noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %556)
          to label %558 unwind label %550

558:                                              ; preds = %554
  %559 = icmp sge i32 %555, %557
  br i1 %559, label %560, label %561

560:                                              ; preds = %558
  store i32 7, ptr %18, align 4
  br label %616

561:                                              ; preds = %558
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %562 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 1)
          to label %563 unwind label %570

563:                                              ; preds = %561
  %564 = load double, ptr %562, align 8, !tbaa !23
  %565 = fadd double %564, 5.000000e-01
  %566 = fptosi double %565 to i32
  store i32 %566, ptr %35, align 4, !tbaa !26
  %567 = load i32, ptr %35, align 4, !tbaa !26
  %568 = icmp slt i32 %567, 0
  br i1 %568, label %569, label %574

569:                                              ; preds = %563
  store i32 7, ptr %18, align 4
  br label %615

570:                                              ; preds = %574, %561
  %571 = landingpad { ptr, i32 }
          cleanup
  %572 = extractvalue { ptr, i32 } %571, 0
  store ptr %572, ptr %12, align 8
  %573 = extractvalue { ptr, i32 } %571, 1
  store i32 %573, ptr %13, align 4
  br label %626

574:                                              ; preds = %563
  %575 = load i32, ptr %35, align 4, !tbaa !26
  %576 = load ptr, ptr %7, align 8, !tbaa !5
  %577 = invoke noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %576)
          to label %578 unwind label %570

578:                                              ; preds = %574
  %579 = icmp sge i32 %575, %577
  br i1 %579, label %580, label %581

580:                                              ; preds = %578
  store i32 7, ptr %18, align 4
  br label %615

581:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %582 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 2)
          to label %583 unwind label %606

583:                                              ; preds = %581
  %584 = load double, ptr %582, align 8, !tbaa !23
  %585 = fneg double %584
  store double %585, ptr %36, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %586 = load ptr, ptr %7, align 8, !tbaa !5
  %587 = load i32, ptr %34, align 4, !tbaa !26
  %588 = load i32, ptr %35, align 4, !tbaa !26
  %589 = invoke noundef double @_ZNK6R2Grid9GridValueEii(ptr noundef nonnull align 8 dereferenceable(208) %586, i32 noundef %587, i32 noundef %588)
          to label %590 unwind label %610

590:                                              ; preds = %583
  store double %589, ptr %37, align 8, !tbaa !23
  %591 = load double, ptr %37, align 8, !tbaa !23
  %592 = fcmp oeq double %591, 0.000000e+00
  br i1 %592, label %600, label %593

593:                                              ; preds = %590
  %594 = load double, ptr %37, align 8, !tbaa !23
  %595 = fcmp oeq double %594, -3.210000e+02
  br i1 %595, label %600, label %596

596:                                              ; preds = %593
  %597 = load double, ptr %36, align 8, !tbaa !23
  %598 = load double, ptr %37, align 8, !tbaa !23
  %599 = fcmp olt double %597, %598
  br i1 %599, label %600, label %614

600:                                              ; preds = %596, %593, %590
  %601 = load ptr, ptr %7, align 8, !tbaa !5
  %602 = load i32, ptr %34, align 4, !tbaa !26
  %603 = load i32, ptr %35, align 4, !tbaa !26
  %604 = load double, ptr %36, align 8, !tbaa !23
  invoke void @_ZN6R2Grid12SetGridValueEiid(ptr noundef nonnull align 8 dereferenceable(208) %601, i32 noundef %602, i32 noundef %603, double noundef %604)
          to label %605 unwind label %610

605:                                              ; preds = %600
  br label %614

606:                                              ; preds = %581
  %607 = landingpad { ptr, i32 }
          cleanup
  %608 = extractvalue { ptr, i32 } %607, 0
  store ptr %608, ptr %12, align 8
  %609 = extractvalue { ptr, i32 } %607, 1
  store i32 %609, ptr %13, align 4
  br label %625

610:                                              ; preds = %600, %583
  %611 = landingpad { ptr, i32 }
          cleanup
  %612 = extractvalue { ptr, i32 } %611, 0
  store ptr %612, ptr %12, align 8
  %613 = extractvalue { ptr, i32 } %611, 1
  store i32 %613, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %625

614:                                              ; preds = %605, %596
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  store i32 0, ptr %18, align 4
  br label %615

615:                                              ; preds = %614, %580, %569
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %616

616:                                              ; preds = %615, %560, %537
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #7
  br label %617

617:                                              ; preds = %616, %446
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %618

618:                                              ; preds = %617, %438, %432, %428, %414
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #7
  %619 = load i32, ptr %18, align 4
  switch i32 %619, label %652 [
    i32 0, label %620
    i32 7, label %621
  ]

620:                                              ; preds = %618
  br label %621

621:                                              ; preds = %620, %618
  %622 = load double, ptr %15, align 8, !tbaa !23
  %623 = load double, ptr %19, align 8, !tbaa !23
  %624 = fadd double %623, %622
  store double %624, ptr %19, align 8, !tbaa !23
  br label %240, !llvm.loop !27

625:                                              ; preds = %610, %606
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  br label %626

626:                                              ; preds = %625, %570
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %627

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

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

629:                                              ; preds = %628, %542, %538
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #7
  br label %630

630:                                              ; preds = %629, %447
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %631

631:                                              ; preds = %630, %419
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %632

632:                                              ; preds = %631, %415
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %633

633:                                              ; preds = %632, %399, %395
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #7
  br label %634

634:                                              ; preds = %633, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %640

635:                                              ; preds = %246
  br label %636

636:                                              ; preds = %635
  %637 = load double, ptr %16, align 8, !tbaa !23
  %638 = load double, ptr %17, align 8, !tbaa !23
  %639 = fadd double %638, %637
  store double %639, ptr %17, align 8, !tbaa !23
  br label %205, !llvm.loop !29

640:                                              ; preds = %634, %233
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  br label %642

641:                                              ; preds = %211
  store i32 1, ptr %5, align 4
  store i32 1, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %10) #7
  call void @llvm.lifetime.end.p0(i64 208, ptr %10) #7
  br label %645

642:                                              ; preds = %640, %229
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %643

643:                                              ; preds = %642, %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  br label %644

644:                                              ; preds = %643, %221, %220
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %10) #7
  call void @llvm.lifetime.end.p0(i64 208, ptr %10) #7
  br label %647

645:                                              ; preds = %641, %165, %103, %94, %83
  %646 = load i32, ptr %5, align 4
  ret i32 %646

647:                                              ; preds = %644
  %648 = load ptr, ptr %12, align 8
  %649 = load i32, ptr %13, align 4
  %650 = insertvalue { ptr, i32 } poison, ptr %648, 0
  %651 = insertvalue { ptr, i32 } %650, i32 %649, 1
  resume { ptr, i32 } %651

652:                                              ; preds = %618
  unreachable
}

declare noundef i32 @_ZNK8R4Matrix10IsIdentityEv(ptr noundef nonnull align 8 dereferenceable(128)) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #4 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 = { 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 #3 = { 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 #4 = { inlinehint 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !12, i64 128}
!10 = !{!"_ZTS10RGBDCamera", !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, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !13, i64 176, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !11, i64 336, !11, i64 340, !11, i64 344}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!"_ZTS8R4Matrix", !7, i64 0}
!14 = !{!10, !12, i64 136}
!15 = !{!10, !12, i64 144}
!16 = !{!10, !12, i64 152}
!17 = !{!10, !12, i64 160}
!18 = !{!10, !12, i64 168}
!19 = !{!10, !11, i64 8}
!20 = !{!10, !11, i64 12}
!21 = !{!10, !12, i64 112}
!22 = !{!10, !12, i64 120}
!23 = !{!12, !12, i64 0}
!24 = !{!10, !12, i64 96}
!25 = !{!10, !12, i64 104}
!26 = !{!11, !11, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}


; 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.R3Point = type { [3 x double] }
%class.R2Grid = type { %class.R2Affine, %class.R2Affine, double, ptr, [2 x i32], i32, i32 }
%class.R2Affine = type <{ %class.R2Transformation, %class.R3Matrix, i32, [4 x i8] }>
%class.R2Transformation = type { ptr }
%class.R3Matrix = type { [3 x [3 x double]] }
%class.R2Point = type { [2 x double] }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [285 x i8], align 1

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

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208)) unnamed_addr #2

declare noundef nonnull align 8 dereferenceable(208) ptr @_ZN6R2GridaSERKS_(ptr noundef nonnull align 8 dereferenceable(208), ptr noundef nonnull align 8 dereferenceable(208)) local_unnamed_addr #1

declare void @_ZN6R2Grid5ClearEd(ptr noundef nonnull align 8 dereferenceable(208), double noundef) local_unnamed_addr #1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef double @_ZNK6R2Grid9GridValueEii(ptr noundef nonnull align 8 dereferenceable(208), i32 noundef, i32 noundef) local_unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6R2Grid12SetGridValueEiid(ptr noundef nonnull align 8 dereferenceable(208), i32 noundef, i32 noundef, double noundef) local_unnamed_addr #4 align 2

declare void @_ZN6R2GridC1ERKS_(ptr noundef nonnull align 8 dereferenceable(208), ptr noundef nonnull align 8 dereferenceable(208)) unnamed_addr #1

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

declare void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #1

declare void @_Z7RNAbortPKcz(ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7R2Point1XEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK7R2Point1YEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7R2Point5ResetEdd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 2) i32 @_Z31RGBDCreateUndistortedDepthImageRK6R2GridRS_RK10RGBDCameraRS3_(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr noundef nonnull align 8 dereferenceable(208) %1, ptr noundef nonnull align 8 dereferenceable(348) %2, ptr noundef nonnull align 8 dereferenceable(348) %3) local_unnamed_addr #6 personality ptr @__gxx_personality_v0 {
  %5 = alloca %class.R2Grid, align 8
  %6 = alloca %class.R2Grid, align 8
  %7 = alloca %class.R2Point, align 8
  %8 = alloca %class.R3Point, align 8
  %9 = alloca %class.R3Point, align 8
  %10 = alloca %class.R3Point, align 8
  %11 = getelementptr inbounds i8, ptr %3, i64 128
  %12 = load <4 x double>, ptr %11, align 8
  %.fr = freeze <4 x double> %12
  %13 = getelementptr inbounds i8, ptr %3, i64 160
  %14 = load double, ptr %13, align 8
  %.fr237 = freeze double %14
  %15 = fcmp oeq double %.fr237, 0.000000e+00
  %16 = getelementptr inbounds i8, ptr %3, i64 168
  %17 = load double, ptr %16, align 8
  %18 = fcmp oeq double %17, 0.000000e+00
  %19 = fcmp une <4 x double> %.fr, zeroinitializer
  %20 = bitcast <4 x i1> %19 to i4
  %21 = icmp eq i4 %20, 0
  %op.rdx234 = and i1 %21, %15
  %op.rdx235 = select i1 %op.rdx234, i1 %18, i1 false
  br i1 %op.rdx235, label %22, label %25

22:                                               ; preds = %4
  %23 = getelementptr inbounds i8, ptr %3, i64 176
  %24 = tail call noundef i32 @_ZNK8R4Matrix10IsIdentityEv(ptr noundef nonnull align 8 dereferenceable(128) %23)
  %.not = icmp eq i32 %24, 0
  br i1 %.not, label %25, label %26

25:                                               ; preds = %22, %4
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.3, i32 noundef 489, ptr noundef nonnull @.str.2)
  br label %26

26:                                               ; preds = %25, %22
  %27 = getelementptr inbounds i8, ptr %2, i64 8
  %28 = load i32, ptr %27, align 8, !tbaa !5
  %29 = icmp eq i32 %28, 0
  br i1 %29, label %295, label %30

30:                                               ; preds = %26
  %31 = getelementptr inbounds i8, ptr %2, i64 12
  %32 = load i32, ptr %31, align 4, !tbaa !13
  %33 = icmp eq i32 %32, 0
  br i1 %33, label %295, label %34

34:                                               ; preds = %30
  %35 = getelementptr inbounds i8, ptr %3, i64 8
  %36 = load i32, ptr %35, align 8, !tbaa !5
  %37 = icmp eq i32 %36, 0
  br i1 %37, label %295, label %38

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %3, i64 12
  %40 = load i32, ptr %39, align 4, !tbaa !13
  %41 = icmp eq i32 %40, 0
  br i1 %41, label %295, label %42

42:                                               ; preds = %38
  %43 = tail call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %0)
  %44 = icmp eq i32 %43, 0
  br i1 %44, label %295, label %45

45:                                               ; preds = %42
  %46 = tail call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %0)
  %47 = icmp eq i32 %46, 0
  br i1 %47, label %295, label %48

48:                                               ; preds = %45
  %49 = load i32, ptr %35, align 8, !tbaa !5
  %50 = load i32, ptr %27, align 8, !tbaa !5
  %51 = icmp eq i32 %49, %50
  br i1 %51, label %52, label %66

52:                                               ; preds = %48
  %53 = load i32, ptr %39, align 4, !tbaa !13
  %54 = load i32, ptr %31, align 4, !tbaa !13
  %55 = icmp eq i32 %53, %54
  %56 = getelementptr inbounds i8, ptr %2, i64 112
  %57 = load <8 x double>, ptr %56, align 8
  %.fr238 = freeze <8 x double> %57
  %58 = fcmp une <8 x double> %.fr238, zeroinitializer
  %59 = bitcast <8 x i1> %58 to i8
  %60 = icmp eq i8 %59, 0
  %op.rdx233 = and i1 %55, %60
  br i1 %op.rdx233, label %61, label %66

61:                                               ; preds = %52
  %62 = getelementptr inbounds i8, ptr %2, i64 176
  %63 = tail call noundef i32 @_ZNK8R4Matrix10IsIdentityEv(ptr noundef nonnull align 8 dereferenceable(128) %62)
  %.not160 = icmp eq i32 %63, 0
  br i1 %.not160, label %66, label %64

64:                                               ; preds = %61
  %65 = tail call noundef nonnull align 8 dereferenceable(208) ptr @_ZN6R2GridaSERKS_(ptr noundef nonnull align 8 dereferenceable(208) %1, ptr noundef nonnull align 8 dereferenceable(208) %0)
  br label %295

66:                                               ; preds = %61, %52, %48
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %5) #7
  call void @_ZN6R2GridC1ERKS_(ptr noundef nonnull align 8 dereferenceable(208) %5, ptr noundef nonnull align 8 dereferenceable(208) %0)
  call void @llvm.lifetime.start.p0(i64 208, ptr nonnull %6) #7
  %67 = load i32, ptr %35, align 8, !tbaa !5
  %68 = load i32, ptr %39, align 4, !tbaa !13
  invoke void @_ZN6R2GridC1Eii(ptr noundef nonnull align 8 dereferenceable(208) %6, i32 noundef %67, i32 noundef %68)
          to label %69 unwind label %104

69:                                               ; preds = %66
  %70 = invoke noundef nonnull align 8 dereferenceable(208) ptr @_ZN6R2GridaSERKS_(ptr noundef nonnull align 8 dereferenceable(208) %1, ptr noundef nonnull align 8 dereferenceable(208) %6)
          to label %71 unwind label %106

71:                                               ; preds = %69
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %6) #7
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %6) #7
  invoke void @_ZN6R2Grid5ClearEd(ptr noundef nonnull align 8 dereferenceable(208) %1, double noundef -3.210000e+02)
          to label %72 unwind label %109

72:                                               ; preds = %71
  %73 = call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %74 = sitofp i32 %73 to double
  %75 = fmul double %74, 5.000000e-01
  %76 = call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %1)
  %77 = sitofp i32 %76 to double
  %78 = fdiv double %75, %77
  %79 = call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %80 = sitofp i32 %79 to double
  %81 = fmul double %80, 5.000000e-01
  %82 = call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %1)
  %83 = sitofp i32 %82 to double
  %84 = fdiv double %81, %83
  %85 = fmul double %84, 5.000000e-01
  %86 = call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %87 = sitofp i32 %86 to double
  %88 = fcmp olt double %85, %87
  br i1 %88, label %.lr.ph231, label %._crit_edge232

.lr.ph231:                                        ; preds = %72
  %89 = fmul double %78, 5.000000e-01
  %90 = getelementptr inbounds i8, ptr %2, i64 128
  %91 = getelementptr inbounds i8, ptr %2, i64 144
  %92 = getelementptr inbounds i8, ptr %2, i64 160
  %93 = getelementptr inbounds i8, ptr %2, i64 168
  %94 = getelementptr inbounds i8, ptr %2, i64 112
  %95 = getelementptr inbounds i8, ptr %2, i64 96
  %96 = getelementptr inbounds i8, ptr %2, i64 120
  %97 = getelementptr inbounds i8, ptr %2, i64 104
  %98 = getelementptr inbounds i8, ptr %2, i64 152
  %99 = getelementptr inbounds i8, ptr %2, i64 176
  %100 = getelementptr inbounds i8, ptr %3, i64 112
  %101 = getelementptr inbounds i8, ptr %3, i64 96
  %102 = getelementptr inbounds i8, ptr %3, i64 120
  %103 = getelementptr inbounds i8, ptr %3, i64 104
  br label %111

._crit_edge232:                                   ; preds = %._crit_edge, %72
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %5) #7
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %5) #7
  br label %295

104:                                              ; preds = %66
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %108

106:                                              ; preds = %69
  %107 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %6) #7
  br label %108

108:                                              ; preds = %106, %104
  %.pn = phi { ptr, i32 } [ %107, %106 ], [ %105, %104 ]
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %6) #7
  br label %294

109:                                              ; preds = %71
  %110 = landingpad { ptr, i32 }
          cleanup
  br label %294

111:                                              ; preds = %.lr.ph231, %._crit_edge
  %.0152229 = phi double [ %85, %.lr.ph231 ], [ %115, %._crit_edge ]
  %112 = call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %113 = sitofp i32 %112 to double
  %114 = fcmp olt double %89, %113
  br i1 %114, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %286, %111
  %115 = fadd double %84, %.0152229
  %116 = call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %117 = sitofp i32 %116 to double
  %118 = fcmp olt double %115, %117
  br i1 %118, label %111, label %._crit_edge232, !llvm.loop !14

.lr.ph:                                           ; preds = %111, %286
  %.0153228 = phi double [ %287, %286 ], [ %89, %111 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #7
  invoke void @_ZN7R2PointC1Edd(ptr noundef nonnull align 8 dereferenceable(16) %7, double noundef %.0153228, double noundef %.0152229)
          to label %119 unwind label %168

119:                                              ; preds = %.lr.ph
  %120 = load <2 x double>, ptr %90, align 8
  %121 = load double, ptr %91, align 8
  %122 = load double, ptr %92, align 8
  %123 = shufflevector <2 x double> %120, <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
  %124 = insertelement <4 x double> %123, double %121, i64 2
  %125 = insertelement <4 x double> %124, double %122, i64 3
  %.fr239 = freeze <4 x double> %125
  %126 = fcmp une <4 x double> %.fr239, zeroinitializer
  %127 = load double, ptr %93, align 8
  %128 = fcmp une double %127, 0.000000e+00
  %129 = bitcast <4 x i1> %126 to i4
  %130 = icmp ne i4 %129, 0
  %op.rdx = select i1 %130, i1 true, i1 %128
  br i1 %op.rdx, label %131, label %170

131:                                              ; preds = %119
  %132 = load double, ptr %94, align 8, !tbaa !16
  %133 = fsub double %.0153228, %132
  %134 = load double, ptr %95, align 8, !tbaa !17
  %135 = fdiv double %133, %134
  %136 = load double, ptr %96, align 8, !tbaa !18
  %137 = fsub double %.0152229, %136
  %138 = load double, ptr %97, align 8, !tbaa !19
  %139 = fdiv double %137, %138
  %140 = fmul double %139, %139
  %141 = call double @llvm.fmuladd.f64(double %135, double %135, double %140)
  %142 = fmul double %141, %141
  %143 = extractelement <2 x double> %120, i64 0
  %144 = call double @llvm.fmuladd.f64(double %141, double %143, double 1.000000e+00)
  %145 = extractelement <2 x double> %120, i64 1
  %146 = call double @llvm.fmuladd.f64(double %142, double %145, double %144)
  %147 = fmul double %141, %142
  %148 = call double @llvm.fmuladd.f64(double %147, double %121, double %146)
  %149 = fmul double %142, %142
  %150 = load double, ptr %98, align 8, !tbaa !20
  %151 = call double @llvm.fmuladd.f64(double %149, double %150, double %148)
  %152 = fmul double %135, 2.000000e+00
  %153 = call double @llvm.fmuladd.f64(double %152, double %135, double %141)
  %154 = fmul double %127, %153
  %155 = call double @llvm.fmuladd.f64(double %151, double %135, double %154)
  %156 = fmul double %122, 2.000000e+00
  %157 = fmul double %156, %135
  %158 = call double @llvm.fmuladd.f64(double %157, double %139, double %155)
  %159 = fmul double %139, 2.000000e+00
  %160 = call double @llvm.fmuladd.f64(double %159, double %139, double %141)
  %161 = fmul double %122, %160
  %162 = call double @llvm.fmuladd.f64(double %151, double %139, double %161)
  %163 = fmul double %127, 2.000000e+00
  %164 = fmul double %163, %158
  %165 = call double @llvm.fmuladd.f64(double %164, double %139, double %162)
  %166 = call double @llvm.fmuladd.f64(double %158, double %134, double %132)
  %167 = call double @llvm.fmuladd.f64(double %165, double %138, double %136)
  call void @_ZN7R2Point5ResetEdd(ptr noundef nonnull align 8 dereferenceable(16) %7, double noundef %166, double noundef %167)
  br label %170

168:                                              ; preds = %.lr.ph
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %293

170:                                              ; preds = %119, %131
  %171 = call noundef double @_ZNK7R2Point1XEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
  %172 = fadd double %171, 5.000000e-01
  %173 = fptosi double %172 to i32
  %174 = call noundef double @_ZNK7R2Point1YEv(ptr noundef nonnull align 8 dereferenceable(16) %7)
  %175 = fadd double %174, 5.000000e-01
  %176 = fptosi double %175 to i32
  %177 = icmp slt i32 %173, 0
  br i1 %177, label %286, label %178

178:                                              ; preds = %170
  %179 = call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %.not162 = icmp sle i32 %179, %173
  %180 = icmp slt i32 %176, 0
  %or.cond227 = select i1 %.not162, i1 true, i1 %180
  br i1 %or.cond227, label %286, label %181

181:                                              ; preds = %178
  %182 = call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %.not163 = icmp sgt i32 %182, %176
  br i1 %.not163, label %183, label %286

183:                                              ; preds = %181
  %184 = invoke noundef double @_ZNK6R2Grid9GridValueEii(ptr noundef nonnull align 8 dereferenceable(208) %5, i32 noundef %173, i32 noundef %176)
          to label %185 unwind label %187

185:                                              ; preds = %183
  %186 = fcmp ugt double %184, 0.000000e+00
  br i1 %186, label %189, label %286

187:                                              ; preds = %183
  %188 = landingpad { ptr, i32 }
          cleanup
  br label %293

189:                                              ; preds = %185
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #7
  invoke void @_ZN7R3PointC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %190 unwind label %249

190:                                              ; preds = %189
  %191 = load double, ptr %94, align 8, !tbaa !16
  %192 = load double, ptr %95, align 8, !tbaa !17
  %193 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 0)
          to label %194 unwind label %249

194:                                              ; preds = %190
  %195 = fsub double %.0153228, %191
  %196 = fmul double %184, %195
  %197 = fdiv double %196, %192
  store double %197, ptr %193, align 8, !tbaa !21
  %198 = load double, ptr %96, align 8, !tbaa !18
  %199 = load double, ptr %97, align 8, !tbaa !19
  %200 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 1)
          to label %201 unwind label %249

201:                                              ; preds = %194
  %202 = fsub double %.0152229, %198
  %203 = fmul double %184, %202
  %204 = fdiv double %203, %199
  store double %204, ptr %200, align 8, !tbaa !21
  %205 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 2)
          to label %206 unwind label %249

206:                                              ; preds = %201
  %207 = fneg double %184
  store double %207, ptr %205, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #7
  invoke void @_ZmlRK8R4MatrixRK7R3Point(ptr dead_on_unwind nonnull writable sret(%class.R3Point) align 8 %9, ptr noundef nonnull align 8 dereferenceable(128) %99, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %208 unwind label %251

208:                                              ; preds = %206
  %209 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN7R3PointaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %210 unwind label %251

210:                                              ; preds = %208
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #7
  invoke void @_ZN7R3PointC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %211 unwind label %253

211:                                              ; preds = %210
  %212 = load double, ptr %100, align 8, !tbaa !16
  %213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 0)
          to label %214 unwind label %253

214:                                              ; preds = %211
  %215 = load double, ptr %213, align 8, !tbaa !21
  %216 = load double, ptr %101, align 8, !tbaa !17
  %217 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 2)
          to label %218 unwind label %253

218:                                              ; preds = %214
  %219 = load double, ptr %217, align 8, !tbaa !21
  %220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef 0)
          to label %221 unwind label %253

221:                                              ; preds = %218
  %222 = fmul double %215, %216
  %223 = fdiv double %222, %219
  %224 = fsub double %212, %223
  store double %224, ptr %220, align 8, !tbaa !21
  %225 = load double, ptr %102, align 8, !tbaa !18
  %226 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 1)
          to label %227 unwind label %253

227:                                              ; preds = %221
  %228 = load double, ptr %226, align 8, !tbaa !21
  %229 = load double, ptr %103, align 8, !tbaa !19
  %230 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 2)
          to label %231 unwind label %253

231:                                              ; preds = %227
  %232 = load double, ptr %230, align 8, !tbaa !21
  %233 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef 1)
          to label %234 unwind label %253

234:                                              ; preds = %231
  %235 = fmul double %228, %229
  %236 = fdiv double %235, %232
  %237 = fsub double %225, %236
  store double %237, ptr %233, align 8, !tbaa !21
  %238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %8, i32 noundef 2)
          to label %239 unwind label %253

239:                                              ; preds = %234
  %240 = load double, ptr %238, align 8, !tbaa !21
  %241 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef 2)
          to label %242 unwind label %253

242:                                              ; preds = %239
  store double %240, ptr %241, align 8, !tbaa !21
  %243 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef 0)
          to label %244 unwind label %255

244:                                              ; preds = %242
  %245 = load double, ptr %243, align 8, !tbaa !21
  %246 = fadd double %245, 5.000000e-01
  %247 = fptosi double %246 to i32
  %248 = icmp slt i32 %247, 0
  br i1 %248, label %285, label %257

249:                                              ; preds = %201, %194, %190, %189
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %292

251:                                              ; preds = %208, %206
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #7
  br label %292

253:                                              ; preds = %239, %234, %231, %227, %221, %218, %214, %211, %210
  %254 = landingpad { ptr, i32 }
          cleanup
  br label %291

255:                                              ; preds = %242
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %291

257:                                              ; preds = %244
  %258 = call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %1)
  %.not164 = icmp sgt i32 %258, %247
  br i1 %.not164, label %259, label %285

259:                                              ; preds = %257
  %260 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef 1)
          to label %261 unwind label %266

261:                                              ; preds = %259
  %262 = load double, ptr %260, align 8, !tbaa !21
  %263 = fadd double %262, 5.000000e-01
  %264 = fptosi double %263 to i32
  %265 = icmp slt i32 %264, 0
  br i1 %265, label %285, label %268

266:                                              ; preds = %259
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %291

268:                                              ; preds = %261
  %269 = call noundef i32 @_ZNK6R2Grid11YResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %1)
  %.not165 = icmp sgt i32 %269, %264
  br i1 %.not165, label %270, label %285

270:                                              ; preds = %268
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24) %10, i32 noundef 2)
          to label %272 unwind label %281

272:                                              ; preds = %270
  %273 = load double, ptr %271, align 8, !tbaa !21
  %274 = fneg double %273
  %275 = invoke noundef double @_ZNK6R2Grid9GridValueEii(ptr noundef nonnull align 8 dereferenceable(208) %1, i32 noundef %247, i32 noundef %264)
          to label %276 unwind label %283

276:                                              ; preds = %272
  %277 = fcmp oeq double %275, 0.000000e+00
  %278 = fcmp oeq double %275, -3.210000e+02
  %or.cond = or i1 %277, %278
  %279 = fcmp ogt double %275, %274
  %or.cond226 = select i1 %or.cond, i1 true, i1 %279
  br i1 %or.cond226, label %280, label %285

280:                                              ; preds = %276
  invoke void @_ZN6R2Grid12SetGridValueEiid(ptr noundef nonnull align 8 dereferenceable(208) %1, i32 noundef %247, i32 noundef %264, double noundef %274)
          to label %285 unwind label %283

281:                                              ; preds = %270
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %291

283:                                              ; preds = %280, %272
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %291

285:                                              ; preds = %261, %268, %276, %280, %257, %244
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  br label %286

286:                                              ; preds = %285, %185, %181, %178, %170
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  %287 = fadd double %78, %.0153228
  %288 = call noundef i32 @_ZNK6R2Grid11XResolutionEv(ptr noundef nonnull align 8 dereferenceable(208) %5)
  %289 = sitofp i32 %288 to double
  %290 = fcmp olt double %287, %289
  br i1 %290, label %.lr.ph, label %._crit_edge, !llvm.loop !22

291:                                              ; preds = %255, %281, %283, %266, %253
  %.pn166.pn.pn.pn = phi { ptr, i32 } [ %254, %253 ], [ %256, %255 ], [ %267, %266 ], [ %284, %283 ], [ %282, %281 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  br label %292

292:                                              ; preds = %291, %251, %249
  %.pn166.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn166.pn.pn.pn, %291 ], [ %252, %251 ], [ %250, %249 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  br label %293

293:                                              ; preds = %187, %292, %168
  %.pn166.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %169, %168 ], [ %.pn166.pn.pn.pn.pn, %292 ], [ %188, %187 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #7
  br label %294

294:                                              ; preds = %293, %109, %108
  %.pn166.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn166.pn.pn.pn.pn.pn.pn, %293 ], [ %110, %109 ], [ %.pn, %108 ]
  call void @_ZN6R2GridD1Ev(ptr noundef nonnull align 8 dereferenceable(208) %5) #7
  call void @llvm.lifetime.end.p0(i64 208, ptr nonnull %5) #7
  resume { ptr, i32 } %.pn166.pn.pn.pn.pn.pn.pn.pn

295:                                              ; preds = %42, %45, %34, %38, %26, %30, %._crit_edge232, %64
  %.0 = phi i32 [ 1, %64 ], [ 1, %._crit_edge232 ], [ 0, %30 ], [ 0, %26 ], [ 0, %38 ], [ 0, %34 ], [ 0, %45 ], [ 0, %42 ]
  ret i32 %.0
}

declare noundef i32 @_ZNK8R4Matrix10IsIdentityEv(ptr noundef nonnull align 8 dereferenceable(128)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN7R3PointixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #4 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 = { 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 #3 = { 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 #4 = { inlinehint 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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !7, i64 8}
!6 = !{!"_ZTS10RGBDCamera", !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, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !11, i64 176, !12, i64 304, !12, i64 312, !12, i64 320, !12, i64 328, !7, i64 336, !7, i64 340, !7, i64 344}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"_ZTS8R4Matrix", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!6, !7, i64 12}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!6, !10, i64 112}
!17 = !{!6, !10, i64 96}
!18 = !{!6, !10, i64 120}
!19 = !{!6, !10, i64 104}
!20 = !{!6, !10, i64 152}
!21 = !{!10, !10, i64 0}
!22 = distinct !{!22, !15}


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