; LLVM IR from mackorone/mms :: old/v2/src/sim (TransformationMatrix)

; 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.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair" = type { double, double }
%"struct.std::pair.0" = type { i32, i32 }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.std::allocator" = type { i8 }
%"class.sim::Meters" = type { %"class.sim::Distance" }
%"class.sim::Distance" = type { ptr, double }
%"class.sim::Cartesian" = type { %"class.sim::Coordinate" }
%"class.sim::Coordinate" = type { ptr, %"class.sim::Meters", %"class.sim::Meters" }
%"class.sim::Degrees" = type { %"class.sim::Angle" }
%"class.sim::Angle" = type { ptr, double }

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

declare noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double, double, i64) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIiiESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIddEC2IiiTnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE22_MoveConstructiblePairIS3_S4_EEclsr6_PCCFPIS3_S4_EE30_ImplicitlyMoveConvertiblePairIS3_S4_EEEbE4typeELb1EEEOS_IS3_S4_E(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef, ptr noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3sim20TransformationMatrix32getZoomedMapTransformationMatrixESt4pairIddES1_IiiES3_S3_ddbRKNS_10CoordinateES6_RKNS_5AngleE(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8 %0, double %1, double %2, i64 %3, i64 %4, i64 %5, double noundef %6, double noundef %7, i1 noundef zeroext %8, ptr noundef nonnull align 8 dereferenceable(40) %9, ptr noundef nonnull align 8 dereferenceable(40) %10, ptr noundef nonnull align 8 dereferenceable(16) %11) #3 align 2 personality ptr @__gxx_personality_v0 {
  %13 = alloca ptr, align 8
  %14 = alloca %"struct.std::pair", align 8
  %15 = alloca %"struct.std::pair.0", align 4
  %16 = alloca %"struct.std::pair.0", align 4
  %17 = alloca %"struct.std::pair.0", align 4
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca %"struct.std::pair", align 8
  %30 = alloca %"struct.std::pair", align 8
  %31 = alloca %"struct.std::pair.0", align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %"struct.std::pair.0", align 4
  %35 = alloca %"struct.std::pair", align 8
  %36 = alloca %"struct.std::pair", align 8
  %37 = alloca %"struct.std::pair.0", align 4
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca %"class.std::vector", align 8
  %43 = alloca %"class.std::initializer_list", align 8
  %44 = alloca [16 x float], align 4
  %45 = alloca %"class.std::allocator", align 1
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca double, align 8
  %49 = alloca %"class.sim::Meters", align 8
  %50 = alloca double, align 8
  %51 = alloca %"class.sim::Meters", align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca %"struct.std::pair", align 8
  %57 = alloca %"struct.std::pair", align 8
  %58 = alloca %"struct.std::pair.0", align 4
  %59 = alloca %"class.sim::Cartesian", align 8
  %60 = alloca %"class.sim::Cartesian", align 8
  %61 = alloca double, align 8
  %62 = alloca %"class.sim::Meters", align 8
  %63 = alloca double, align 8
  %64 = alloca %"class.sim::Meters", align 8
  %65 = alloca %"struct.std::pair", align 8
  %66 = alloca %"struct.std::pair", align 8
  %67 = alloca %"struct.std::pair.0", align 4
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca %"class.std::vector", align 8
  %71 = alloca %"class.std::initializer_list", align 8
  %72 = alloca [16 x float], align 4
  %73 = alloca %"class.std::allocator", align 1
  %74 = alloca double, align 8
  %75 = alloca %"class.sim::Degrees", align 8
  %76 = alloca %"class.sim::Degrees", align 8
  %77 = alloca %"class.sim::Degrees", align 8
  %78 = alloca %"class.std::vector", align 8
  %79 = alloca %"class.std::initializer_list", align 8
  %80 = alloca [16 x float], align 4
  %81 = alloca %"class.std::allocator", align 1
  %82 = alloca %"class.std::vector", align 8
  %83 = alloca %"class.std::initializer_list", align 8
  %84 = alloca [16 x float], align 4
  %85 = alloca %"class.std::allocator", align 1
  %86 = alloca %"struct.std::pair", align 8
  %87 = alloca %"struct.std::pair", align 8
  %88 = alloca %"struct.std::pair.0", align 4
  %89 = alloca %"class.std::vector", align 8
  %90 = alloca %"class.std::initializer_list", align 8
  %91 = alloca [16 x float], align 4
  %92 = alloca %"class.std::allocator", align 1
  %93 = alloca %"class.std::vector", align 8
  %94 = alloca %"class.std::initializer_list", align 8
  %95 = alloca [16 x float], align 4
  %96 = alloca %"class.std::allocator", align 1
  %97 = alloca i1, align 1
  %98 = alloca %"class.std::vector", align 8
  %99 = alloca %"class.std::vector", align 8
  %100 = alloca %"class.std::vector", align 8
  %101 = alloca %"class.std::vector", align 8
  %102 = alloca %"class.std::vector", align 8
  %103 = alloca %"class.std::vector", align 8
  %104 = alloca %"class.std::vector", align 8
  %105 = alloca %"class.std::vector", align 8
  %106 = alloca %"class.std::vector", align 8
  %107 = alloca %"class.std::vector", align 8
  %108 = alloca %"class.std::vector", align 8
  %109 = alloca %"class.std::vector", align 8
  %110 = alloca %"class.std::vector", align 8
  store ptr %0, ptr %13, align 8
  %111 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  store double %1, ptr %111, align 8
  %112 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  store double %2, ptr %112, align 8
  store i64 %3, ptr %15, align 4
  store i64 %4, ptr %16, align 4
  store i64 %5, ptr %17, align 4
  store double %6, ptr %18, align 8, !tbaa !5
  store double %7, ptr %19, align 8, !tbaa !5
  %113 = zext i1 %8 to i8
  store i8 %113, ptr %20, align 1, !tbaa !9
  store ptr %9, ptr %21, align 8, !tbaa !11
  store ptr %10, ptr %22, align 8, !tbaa !11
  store ptr %11, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %114 = getelementptr inbounds %"struct.std::pair", ptr %14, i32 0, i32 0
  %115 = load double, ptr %114, align 8, !tbaa !13
  store double %115, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %116 = getelementptr inbounds %"struct.std::pair", ptr %14, i32 0, i32 1
  %117 = load double, ptr %116, align 8, !tbaa !15
  store double %117, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %118 = load double, ptr %18, align 8, !tbaa !5
  %119 = load double, ptr %19, align 8, !tbaa !5
  %120 = fmul double %118, %119
  store double %120, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %121 = load double, ptr %26, align 8, !tbaa !5
  %122 = load double, ptr %24, align 8, !tbaa !5
  %123 = fmul double %121, %122
  store double %123, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %124 = load double, ptr %26, align 8, !tbaa !5
  %125 = load double, ptr %25, align 8, !tbaa !5
  %126 = fmul double %124, %125
  store double %126, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  store i32 0, ptr %32, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !16
  %127 = call i64 @_ZSt9make_pairIiiESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_(ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 4 dereferenceable(4) %33)
  store i64 %127, ptr %31, align 4
  call void @_ZNSt4pairIddEC2IiiTnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE22_MoveConstructiblePairIS3_S4_EEclsr6_PCCFPIS3_S4_EE30_ImplicitlyMoveConvertiblePairIS3_S4_EEEbE4typeELb1EEEOS_IS3_S4_E(ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull align 4 dereferenceable(8) %31)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %17, i64 8, i1 false)
  %128 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %129 = load double, ptr %128, align 8
  %130 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %131 = load double, ptr %130, align 8
  %132 = load i64, ptr %34, align 4
  %133 = call { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %129, double %131, i64 %132)
  %134 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %135 = extractvalue { double, double } %133, 0
  store double %135, ptr %134, align 8
  %136 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %137 = extractvalue { double, double } %133, 1
  store double %137, ptr %136, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #8
  %138 = call { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28)
  %139 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %140 = extractvalue { double, double } %138, 0
  store double %140, ptr %139, align 8
  %141 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %142 = extractvalue { double, double } %138, 1
  store double %142, ptr %141, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %37, ptr align 4 %17, i64 8, i1 false)
  %143 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %144 = load double, ptr %143, align 8
  %145 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %146 = load double, ptr %145, align 8
  %147 = load i64, ptr %37, align 4
  %148 = call { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %144, double %146, i64 %147)
  %149 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %150 = extractvalue { double, double } %148, 0
  store double %150, ptr %149, align 8
  %151 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %152 = extractvalue { double, double } %148, 1
  store double %152, ptr %151, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %153 = getelementptr inbounds %"struct.std::pair", ptr %35, i32 0, i32 0
  %154 = load double, ptr %153, align 8, !tbaa !13
  %155 = getelementptr inbounds %"struct.std::pair", ptr %29, i32 0, i32 0
  %156 = load double, ptr %155, align 8, !tbaa !13
  %157 = fsub double %154, %156
  store double %157, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %158 = getelementptr inbounds %"struct.std::pair", ptr %35, i32 0, i32 1
  %159 = load double, ptr %158, align 8, !tbaa !15
  %160 = getelementptr inbounds %"struct.std::pair", ptr %29, i32 0, i32 1
  %161 = load double, ptr %160, align 8, !tbaa !15
  %162 = fsub double %159, %161
  store double %162, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %163 = load double, ptr %38, align 8, !tbaa !5
  %164 = load double, ptr %24, align 8, !tbaa !5
  %165 = fdiv double %163, %164
  store double %165, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %166 = load double, ptr %39, align 8, !tbaa !5
  %167 = load double, ptr %25, align 8, !tbaa !5
  %168 = fdiv double %166, %167
  store double %168, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %44) #8
  call void @llvm.memset.p0.i64(ptr align 4 %44, i8 0, i64 64, i1 false)
  %169 = load double, ptr %40, align 8, !tbaa !5
  %170 = fptrunc double %169 to float
  store float %170, ptr %44, align 4, !tbaa !18
  %171 = getelementptr inbounds float, ptr %44, i64 1
  %172 = getelementptr inbounds float, ptr %44, i64 2
  %173 = getelementptr inbounds float, ptr %44, i64 3
  %174 = getelementptr inbounds float, ptr %44, i64 4
  %175 = getelementptr inbounds float, ptr %44, i64 5
  %176 = load double, ptr %41, align 8, !tbaa !5
  %177 = fptrunc double %176 to float
  store float %177, ptr %175, align 4, !tbaa !18
  %178 = getelementptr inbounds float, ptr %44, i64 6
  %179 = getelementptr inbounds float, ptr %44, i64 7
  %180 = getelementptr inbounds float, ptr %44, i64 8
  %181 = getelementptr inbounds float, ptr %44, i64 9
  %182 = getelementptr inbounds float, ptr %44, i64 10
  store float 1.000000e+00, ptr %182, align 4, !tbaa !18
  %183 = getelementptr inbounds float, ptr %44, i64 11
  %184 = getelementptr inbounds float, ptr %44, i64 12
  %185 = getelementptr inbounds float, ptr %44, i64 13
  %186 = getelementptr inbounds float, ptr %44, i64 14
  %187 = getelementptr inbounds float, ptr %44, i64 15
  store float 1.000000e+00, ptr %187, align 4, !tbaa !18
  %188 = getelementptr inbounds %"class.std::initializer_list", ptr %43, i32 0, i32 0
  store ptr %44, ptr %188, align 8, !tbaa !20
  %189 = getelementptr inbounds %"class.std::initializer_list", ptr %43, i32 0, i32 1
  store i64 16, ptr %189, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #8
  %190 = getelementptr inbounds { ptr, i64 }, ptr %43, i32 0, i32 0
  %191 = load ptr, ptr %190, align 8
  %192 = getelementptr inbounds { ptr, i64 }, ptr %43, i32 0, i32 1
  %193 = load i64, ptr %192, align 8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %42, ptr %191, i64 %193, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %194 unwind label %479

194:                                              ; preds = %12
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #8
  %195 = load ptr, ptr %21, align 8, !tbaa !11
  invoke void @_ZNK3sim10Coordinate4getXEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8 %49, ptr noundef nonnull align 8 dereferenceable(40) %195)
          to label %196 unwind label %483

196:                                              ; preds = %194
  %197 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %49)
          to label %198 unwind label %487

198:                                              ; preds = %196
  %199 = load double, ptr %26, align 8, !tbaa !5
  %200 = fmul double %197, %199
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %49) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #8
  store double %200, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #8
  %201 = load ptr, ptr %21, align 8, !tbaa !11
  invoke void @_ZNK3sim10Coordinate4getYEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8 %51, ptr noundef nonnull align 8 dereferenceable(40) %201)
          to label %202 unwind label %492

202:                                              ; preds = %198
  %203 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %51)
          to label %204 unwind label %496

204:                                              ; preds = %202
  %205 = load double, ptr %26, align 8, !tbaa !5
  %206 = fmul double %203, %205
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %51) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #8
  store double %206, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %207 = getelementptr inbounds %"struct.std::pair.0", ptr %15, i32 0, i32 0
  %208 = load i32, ptr %207, align 4, !tbaa !24
  %209 = sitofp i32 %208 to double
  %210 = getelementptr inbounds %"struct.std::pair.0", ptr %16, i32 0, i32 0
  %211 = load i32, ptr %210, align 4, !tbaa !24
  %212 = sitofp i32 %211 to double
  %213 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %212, double %209)
  store double %213, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %214 = getelementptr inbounds %"struct.std::pair.0", ptr %15, i32 0, i32 1
  %215 = load i32, ptr %214, align 4, !tbaa !26
  %216 = sitofp i32 %215 to double
  %217 = getelementptr inbounds %"struct.std::pair.0", ptr %16, i32 0, i32 1
  %218 = load i32, ptr %217, align 4, !tbaa !26
  %219 = sitofp i32 %218 to double
  %220 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %219, double %216)
  store double %220, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %221 = load double, ptr %52, align 8, !tbaa !5
  %222 = load double, ptr %48, align 8, !tbaa !5
  %223 = fsub double %221, %222
  store double %223, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %224 = load double, ptr %53, align 8, !tbaa !5
  %225 = load double, ptr %50, align 8, !tbaa !5
  %226 = fsub double %224, %225
  store double %226, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #8
  %227 = invoke { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55)
          to label %228 unwind label %501

228:                                              ; preds = %204
  %229 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %230 = extractvalue { double, double } %227, 0
  store double %230, ptr %229, align 8
  %231 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %232 = extractvalue { double, double } %227, 1
  store double %232, ptr %231, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %58, ptr align 4 %17, i64 8, i1 false)
  %233 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %234 = load double, ptr %233, align 8
  %235 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %236 = load double, ptr %235, align 8
  %237 = load i64, ptr %58, align 4
  %238 = invoke { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %234, double %236, i64 %237)
          to label %239 unwind label %501

239:                                              ; preds = %228
  %240 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 0
  %241 = extractvalue { double, double } %238, 0
  store double %241, ptr %240, align 8
  %242 = getelementptr inbounds { double, double }, ptr %56, i32 0, i32 1
  %243 = extractvalue { double, double } %238, 1
  store double %243, ptr %242, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %59) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr %60) #8
  %244 = load ptr, ptr %22, align 8, !tbaa !11
  invoke void @_ZN3sim9CartesianC1ERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40) %60, ptr noundef nonnull align 8 dereferenceable(40) %244)
          to label %245 unwind label %505

245:                                              ; preds = %239
  %246 = load ptr, ptr %21, align 8, !tbaa !11
  invoke void @_ZNK3sim9CartesianmiERKNS_10CoordinateE(ptr dead_on_unwind writable sret(%"class.sim::Cartesian") align 8 %59, ptr noundef nonnull align 8 dereferenceable(40) %60, ptr noundef nonnull align 8 dereferenceable(40) %246)
          to label %247 unwind label %509

247:                                              ; preds = %245
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %60) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %60) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #8
  invoke void @_ZNK3sim10Coordinate4getXEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8 %62, ptr noundef nonnull align 8 dereferenceable(40) %59)
          to label %248 unwind label %514

248:                                              ; preds = %247
  %249 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %62)
          to label %250 unwind label %518

250:                                              ; preds = %248
  %251 = load double, ptr %26, align 8, !tbaa !5
  %252 = fmul double %249, %251
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %62) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #8
  store double %252, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #8
  invoke void @_ZNK3sim10Coordinate4getYEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8 %64, ptr noundef nonnull align 8 dereferenceable(40) %59)
          to label %253 unwind label %523

253:                                              ; preds = %250
  %254 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %64)
          to label %255 unwind label %527

255:                                              ; preds = %253
  %256 = load double, ptr %26, align 8, !tbaa !5
  %257 = fmul double %254, %256
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #8
  store double %257, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #8
  %258 = invoke { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %61, ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %259 unwind label %532

259:                                              ; preds = %255
  %260 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %261 = extractvalue { double, double } %258, 0
  store double %261, ptr %260, align 8
  %262 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %263 = extractvalue { double, double } %258, 1
  store double %263, ptr %262, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 4 %17, i64 8, i1 false)
  %264 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 0
  %265 = load double, ptr %264, align 8
  %266 = getelementptr inbounds { double, double }, ptr %66, i32 0, i32 1
  %267 = load double, ptr %266, align 8
  %268 = load i64, ptr %67, align 4
  %269 = invoke { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %265, double %267, i64 %268)
          to label %270 unwind label %532

270:                                              ; preds = %259
  %271 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %272 = extractvalue { double, double } %269, 0
  store double %272, ptr %271, align 8
  %273 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %274 = extractvalue { double, double } %269, 1
  store double %274, ptr %273, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %275 = getelementptr inbounds %"struct.std::pair", ptr %56, i32 0, i32 0
  %276 = load double, ptr %275, align 8, !tbaa !13
  %277 = getelementptr inbounds %"struct.std::pair", ptr %65, i32 0, i32 0
  %278 = load double, ptr %277, align 8, !tbaa !13
  %279 = fsub double %276, %278
  %280 = getelementptr inbounds %"struct.std::pair", ptr %29, i32 0, i32 0
  %281 = load double, ptr %280, align 8, !tbaa !13
  %282 = fadd double %279, %281
  store double %282, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #8
  %283 = getelementptr inbounds %"struct.std::pair", ptr %56, i32 0, i32 1
  %284 = load double, ptr %283, align 8, !tbaa !15
  %285 = getelementptr inbounds %"struct.std::pair", ptr %65, i32 0, i32 1
  %286 = load double, ptr %285, align 8, !tbaa !15
  %287 = fsub double %284, %286
  %288 = getelementptr inbounds %"struct.std::pair", ptr %29, i32 0, i32 1
  %289 = load double, ptr %288, align 8, !tbaa !15
  %290 = fadd double %287, %289
  store double %290, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %70) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %72) #8
  store float 1.000000e+00, ptr %72, align 4, !tbaa !18
  %291 = getelementptr inbounds float, ptr %72, i64 1
  store float 0.000000e+00, ptr %291, align 4, !tbaa !18
  %292 = getelementptr inbounds float, ptr %72, i64 2
  store float 0.000000e+00, ptr %292, align 4, !tbaa !18
  %293 = getelementptr inbounds float, ptr %72, i64 3
  %294 = load double, ptr %68, align 8, !tbaa !5
  %295 = fptrunc double %294 to float
  store float %295, ptr %293, align 4, !tbaa !18
  %296 = getelementptr inbounds float, ptr %72, i64 4
  store float 0.000000e+00, ptr %296, align 4, !tbaa !18
  %297 = getelementptr inbounds float, ptr %72, i64 5
  store float 1.000000e+00, ptr %297, align 4, !tbaa !18
  %298 = getelementptr inbounds float, ptr %72, i64 6
  store float 0.000000e+00, ptr %298, align 4, !tbaa !18
  %299 = getelementptr inbounds float, ptr %72, i64 7
  %300 = load double, ptr %69, align 8, !tbaa !5
  %301 = fptrunc double %300 to float
  store float %301, ptr %299, align 4, !tbaa !18
  %302 = getelementptr inbounds float, ptr %72, i64 8
  store float 0.000000e+00, ptr %302, align 4, !tbaa !18
  %303 = getelementptr inbounds float, ptr %72, i64 9
  store float 0.000000e+00, ptr %303, align 4, !tbaa !18
  %304 = getelementptr inbounds float, ptr %72, i64 10
  store float 1.000000e+00, ptr %304, align 4, !tbaa !18
  %305 = getelementptr inbounds float, ptr %72, i64 11
  store float 0.000000e+00, ptr %305, align 4, !tbaa !18
  %306 = getelementptr inbounds float, ptr %72, i64 12
  store float 0.000000e+00, ptr %306, align 4, !tbaa !18
  %307 = getelementptr inbounds float, ptr %72, i64 13
  store float 0.000000e+00, ptr %307, align 4, !tbaa !18
  %308 = getelementptr inbounds float, ptr %72, i64 14
  store float 0.000000e+00, ptr %308, align 4, !tbaa !18
  %309 = getelementptr inbounds float, ptr %72, i64 15
  store float 1.000000e+00, ptr %309, align 4, !tbaa !18
  %310 = getelementptr inbounds %"class.std::initializer_list", ptr %71, i32 0, i32 0
  store ptr %72, ptr %310, align 8, !tbaa !20
  %311 = getelementptr inbounds %"class.std::initializer_list", ptr %71, i32 0, i32 1
  store i64 16, ptr %311, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %73) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #8
  %312 = getelementptr inbounds { ptr, i64 }, ptr %71, i32 0, i32 0
  %313 = load ptr, ptr %312, align 8
  %314 = getelementptr inbounds { ptr, i64 }, ptr %71, i32 0, i32 1
  %315 = load i64, ptr %314, align 8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %70, ptr %313, i64 %315, ptr noundef nonnull align 1 dereferenceable(1) %73)
          to label %316 unwind label %536

316:                                              ; preds = %270
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %72) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %75) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %76) #8
  %317 = load ptr, ptr %23, align 8, !tbaa !11
  invoke void @_ZN3sim7DegreesC1ERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16) %76, ptr noundef nonnull align 8 dereferenceable(16) %317)
          to label %318 unwind label %540

318:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 16, ptr %77) #8
  invoke void @_ZN3sim7DegreesC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %77, double noundef 9.000000e+01)
          to label %319 unwind label %544

319:                                              ; preds = %318
  invoke void @_ZNK3sim7DegreesmiERKNS_5AngleE(ptr dead_on_unwind writable sret(%"class.sim::Degrees") align 8 %75, ptr noundef nonnull align 8 dereferenceable(16) %76, ptr noundef nonnull align 8 dereferenceable(16) %77)
          to label %320 unwind label %548

320:                                              ; preds = %319
  %321 = invoke noundef double @_ZNK3sim5Angle19getRadiansZeroTo2piEv(ptr noundef nonnull align 8 dereferenceable(16) %75)
          to label %322 unwind label %552

322:                                              ; preds = %320
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %77) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %77) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %76) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #8
  store double %321, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %78) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %80) #8
  %323 = load double, ptr %74, align 8, !tbaa !5
  %324 = call double @cos(double noundef %323) #8
  %325 = fptrunc double %324 to float
  store float %325, ptr %80, align 4, !tbaa !18
  %326 = getelementptr inbounds float, ptr %80, i64 1
  %327 = load double, ptr %74, align 8, !tbaa !5
  %328 = call double @sin(double noundef %327) #8
  %329 = fptrunc double %328 to float
  store float %329, ptr %326, align 4, !tbaa !18
  %330 = getelementptr inbounds float, ptr %80, i64 2
  store float 0.000000e+00, ptr %330, align 4, !tbaa !18
  %331 = getelementptr inbounds float, ptr %80, i64 3
  store float 0.000000e+00, ptr %331, align 4, !tbaa !18
  %332 = getelementptr inbounds float, ptr %80, i64 4
  %333 = load double, ptr %74, align 8, !tbaa !5
  %334 = call double @sin(double noundef %333) #8
  %335 = fneg double %334
  %336 = fptrunc double %335 to float
  store float %336, ptr %332, align 4, !tbaa !18
  %337 = getelementptr inbounds float, ptr %80, i64 5
  %338 = load double, ptr %74, align 8, !tbaa !5
  %339 = call double @cos(double noundef %338) #8
  %340 = fptrunc double %339 to float
  store float %340, ptr %337, align 4, !tbaa !18
  %341 = getelementptr inbounds float, ptr %80, i64 6
  store float 0.000000e+00, ptr %341, align 4, !tbaa !18
  %342 = getelementptr inbounds float, ptr %80, i64 7
  store float 0.000000e+00, ptr %342, align 4, !tbaa !18
  %343 = getelementptr inbounds float, ptr %80, i64 8
  store float 0.000000e+00, ptr %343, align 4, !tbaa !18
  %344 = getelementptr inbounds float, ptr %80, i64 9
  store float 0.000000e+00, ptr %344, align 4, !tbaa !18
  %345 = getelementptr inbounds float, ptr %80, i64 10
  store float 1.000000e+00, ptr %345, align 4, !tbaa !18
  %346 = getelementptr inbounds float, ptr %80, i64 11
  store float 0.000000e+00, ptr %346, align 4, !tbaa !18
  %347 = getelementptr inbounds float, ptr %80, i64 12
  store float 0.000000e+00, ptr %347, align 4, !tbaa !18
  %348 = getelementptr inbounds float, ptr %80, i64 13
  store float 0.000000e+00, ptr %348, align 4, !tbaa !18
  %349 = getelementptr inbounds float, ptr %80, i64 14
  store float 0.000000e+00, ptr %349, align 4, !tbaa !18
  %350 = getelementptr inbounds float, ptr %80, i64 15
  store float 1.000000e+00, ptr %350, align 4, !tbaa !18
  %351 = getelementptr inbounds %"class.std::initializer_list", ptr %79, i32 0, i32 0
  store ptr %80, ptr %351, align 8, !tbaa !20
  %352 = getelementptr inbounds %"class.std::initializer_list", ptr %79, i32 0, i32 1
  store i64 16, ptr %352, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %81) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %81) #8
  %353 = getelementptr inbounds { ptr, i64 }, ptr %79, i32 0, i32 0
  %354 = load ptr, ptr %353, align 8
  %355 = getelementptr inbounds { ptr, i64 }, ptr %79, i32 0, i32 1
  %356 = load i64, ptr %355, align 8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %78, ptr %354, i64 %356, ptr noundef nonnull align 1 dereferenceable(1) %81)
          to label %357 unwind label %559

357:                                              ; preds = %322
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %81) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %80) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %82) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %84) #8
  call void @llvm.memset.p0.i64(ptr align 4 %84, i8 0, i64 64, i1 false)
  %358 = load double, ptr %40, align 8, !tbaa !5
  %359 = fdiv double 1.000000e+00, %358
  %360 = fptrunc double %359 to float
  store float %360, ptr %84, align 4, !tbaa !18
  %361 = getelementptr inbounds float, ptr %84, i64 1
  %362 = getelementptr inbounds float, ptr %84, i64 2
  %363 = getelementptr inbounds float, ptr %84, i64 3
  %364 = getelementptr inbounds float, ptr %84, i64 4
  %365 = getelementptr inbounds float, ptr %84, i64 5
  %366 = load double, ptr %41, align 8, !tbaa !5
  %367 = fdiv double 1.000000e+00, %366
  %368 = fptrunc double %367 to float
  store float %368, ptr %365, align 4, !tbaa !18
  %369 = getelementptr inbounds float, ptr %84, i64 6
  %370 = getelementptr inbounds float, ptr %84, i64 7
  %371 = getelementptr inbounds float, ptr %84, i64 8
  %372 = getelementptr inbounds float, ptr %84, i64 9
  %373 = getelementptr inbounds float, ptr %84, i64 10
  store float 1.000000e+00, ptr %373, align 4, !tbaa !18
  %374 = getelementptr inbounds float, ptr %84, i64 11
  %375 = getelementptr inbounds float, ptr %84, i64 12
  %376 = getelementptr inbounds float, ptr %84, i64 13
  %377 = getelementptr inbounds float, ptr %84, i64 14
  %378 = getelementptr inbounds float, ptr %84, i64 15
  store float 1.000000e+00, ptr %378, align 4, !tbaa !18
  %379 = getelementptr inbounds %"class.std::initializer_list", ptr %83, i32 0, i32 0
  store ptr %84, ptr %379, align 8, !tbaa !20
  %380 = getelementptr inbounds %"class.std::initializer_list", ptr %83, i32 0, i32 1
  store i64 16, ptr %380, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %85) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %85) #8
  %381 = getelementptr inbounds { ptr, i64 }, ptr %83, i32 0, i32 0
  %382 = load ptr, ptr %381, align 8
  %383 = getelementptr inbounds { ptr, i64 }, ptr %83, i32 0, i32 1
  %384 = load i64, ptr %383, align 8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %82, ptr %382, i64 %384, ptr noundef nonnull align 1 dereferenceable(1) %85)
          to label %385 unwind label %563

385:                                              ; preds = %357
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %85) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %84) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %86) #8
  %386 = invoke { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %387 unwind label %567

387:                                              ; preds = %385
  %388 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %389 = extractvalue { double, double } %386, 0
  store double %389, ptr %388, align 8
  %390 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %391 = extractvalue { double, double } %386, 1
  store double %391, ptr %390, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %88, ptr align 4 %17, i64 8, i1 false)
  %392 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 0
  %393 = load double, ptr %392, align 8
  %394 = getelementptr inbounds { double, double }, ptr %87, i32 0, i32 1
  %395 = load double, ptr %394, align 8
  %396 = load i64, ptr %88, align 4
  %397 = invoke { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %393, double %395, i64 %396)
          to label %398 unwind label %567

398:                                              ; preds = %387
  %399 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 0
  %400 = extractvalue { double, double } %397, 0
  store double %400, ptr %399, align 8
  %401 = getelementptr inbounds { double, double }, ptr %86, i32 0, i32 1
  %402 = extractvalue { double, double } %397, 1
  store double %402, ptr %401, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %89) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %91) #8
  store float 1.000000e+00, ptr %91, align 4, !tbaa !18
  %403 = getelementptr inbounds float, ptr %91, i64 1
  store float 0.000000e+00, ptr %403, align 4, !tbaa !18
  %404 = getelementptr inbounds float, ptr %91, i64 2
  store float 0.000000e+00, ptr %404, align 4, !tbaa !18
  %405 = getelementptr inbounds float, ptr %91, i64 3
  %406 = getelementptr inbounds %"struct.std::pair", ptr %86, i32 0, i32 0
  %407 = load double, ptr %406, align 8, !tbaa !13
  %408 = fptrunc double %407 to float
  store float %408, ptr %405, align 4, !tbaa !18
  %409 = getelementptr inbounds float, ptr %91, i64 4
  store float 0.000000e+00, ptr %409, align 4, !tbaa !18
  %410 = getelementptr inbounds float, ptr %91, i64 5
  store float 1.000000e+00, ptr %410, align 4, !tbaa !18
  %411 = getelementptr inbounds float, ptr %91, i64 6
  store float 0.000000e+00, ptr %411, align 4, !tbaa !18
  %412 = getelementptr inbounds float, ptr %91, i64 7
  %413 = getelementptr inbounds %"struct.std::pair", ptr %86, i32 0, i32 1
  %414 = load double, ptr %413, align 8, !tbaa !15
  %415 = fptrunc double %414 to float
  store float %415, ptr %412, align 4, !tbaa !18
  %416 = getelementptr inbounds float, ptr %91, i64 8
  store float 0.000000e+00, ptr %416, align 4, !tbaa !18
  %417 = getelementptr inbounds float, ptr %91, i64 9
  store float 0.000000e+00, ptr %417, align 4, !tbaa !18
  %418 = getelementptr inbounds float, ptr %91, i64 10
  store float 1.000000e+00, ptr %418, align 4, !tbaa !18
  %419 = getelementptr inbounds float, ptr %91, i64 11
  store float 0.000000e+00, ptr %419, align 4, !tbaa !18
  %420 = getelementptr inbounds float, ptr %91, i64 12
  store float 0.000000e+00, ptr %420, align 4, !tbaa !18
  %421 = getelementptr inbounds float, ptr %91, i64 13
  store float 0.000000e+00, ptr %421, align 4, !tbaa !18
  %422 = getelementptr inbounds float, ptr %91, i64 14
  store float 0.000000e+00, ptr %422, align 4, !tbaa !18
  %423 = getelementptr inbounds float, ptr %91, i64 15
  store float 1.000000e+00, ptr %423, align 4, !tbaa !18
  %424 = getelementptr inbounds %"class.std::initializer_list", ptr %90, i32 0, i32 0
  store ptr %91, ptr %424, align 8, !tbaa !20
  %425 = getelementptr inbounds %"class.std::initializer_list", ptr %90, i32 0, i32 1
  store i64 16, ptr %425, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %92) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %92) #8
  %426 = getelementptr inbounds { ptr, i64 }, ptr %90, i32 0, i32 0
  %427 = load ptr, ptr %426, align 8
  %428 = getelementptr inbounds { ptr, i64 }, ptr %90, i32 0, i32 1
  %429 = load i64, ptr %428, align 8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %89, ptr %427, i64 %429, ptr noundef nonnull align 1 dereferenceable(1) %92)
          to label %430 unwind label %571

430:                                              ; preds = %398
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %92) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %91) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %93) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %95) #8
  store float 1.000000e+00, ptr %95, align 4, !tbaa !18
  %431 = getelementptr inbounds float, ptr %95, i64 1
  store float 0.000000e+00, ptr %431, align 4, !tbaa !18
  %432 = getelementptr inbounds float, ptr %95, i64 2
  store float 0.000000e+00, ptr %432, align 4, !tbaa !18
  %433 = getelementptr inbounds float, ptr %95, i64 3
  %434 = getelementptr inbounds %"struct.std::pair", ptr %86, i32 0, i32 0
  %435 = load double, ptr %434, align 8, !tbaa !13
  %436 = fneg double %435
  %437 = fptrunc double %436 to float
  store float %437, ptr %433, align 4, !tbaa !18
  %438 = getelementptr inbounds float, ptr %95, i64 4
  store float 0.000000e+00, ptr %438, align 4, !tbaa !18
  %439 = getelementptr inbounds float, ptr %95, i64 5
  store float 1.000000e+00, ptr %439, align 4, !tbaa !18
  %440 = getelementptr inbounds float, ptr %95, i64 6
  store float 0.000000e+00, ptr %440, align 4, !tbaa !18
  %441 = getelementptr inbounds float, ptr %95, i64 7
  %442 = getelementptr inbounds %"struct.std::pair", ptr %86, i32 0, i32 1
  %443 = load double, ptr %442, align 8, !tbaa !15
  %444 = fneg double %443
  %445 = fptrunc double %444 to float
  store float %445, ptr %441, align 4, !tbaa !18
  %446 = getelementptr inbounds float, ptr %95, i64 8
  store float 0.000000e+00, ptr %446, align 4, !tbaa !18
  %447 = getelementptr inbounds float, ptr %95, i64 9
  store float 0.000000e+00, ptr %447, align 4, !tbaa !18
  %448 = getelementptr inbounds float, ptr %95, i64 10
  store float 1.000000e+00, ptr %448, align 4, !tbaa !18
  %449 = getelementptr inbounds float, ptr %95, i64 11
  store float 0.000000e+00, ptr %449, align 4, !tbaa !18
  %450 = getelementptr inbounds float, ptr %95, i64 12
  store float 0.000000e+00, ptr %450, align 4, !tbaa !18
  %451 = getelementptr inbounds float, ptr %95, i64 13
  store float 0.000000e+00, ptr %451, align 4, !tbaa !18
  %452 = getelementptr inbounds float, ptr %95, i64 14
  store float 0.000000e+00, ptr %452, align 4, !tbaa !18
  %453 = getelementptr inbounds float, ptr %95, i64 15
  store float 1.000000e+00, ptr %453, align 4, !tbaa !18
  %454 = getelementptr inbounds %"class.std::initializer_list", ptr %94, i32 0, i32 0
  store ptr %95, ptr %454, align 8, !tbaa !20
  %455 = getelementptr inbounds %"class.std::initializer_list", ptr %94, i32 0, i32 1
  store i64 16, ptr %455, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 1, ptr %96) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #8
  %456 = getelementptr inbounds { ptr, i64 }, ptr %94, i32 0, i32 0
  %457 = load ptr, ptr %456, align 8
  %458 = getelementptr inbounds { ptr, i64 }, ptr %94, i32 0, i32 1
  %459 = load i64, ptr %458, align 8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %93, ptr %457, i64 %459, ptr noundef nonnull align 1 dereferenceable(1) %96)
          to label %460 unwind label %575

460:                                              ; preds = %430
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %95) #8
  store i1 false, ptr %97, align 1
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %98, ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %461 unwind label %579

461:                                              ; preds = %460
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %99, ptr noundef nonnull align 8 dereferenceable(24) %42)
          to label %462 unwind label %583

462:                                              ; preds = %461
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %0, ptr noundef %98, ptr noundef %99)
          to label %463 unwind label %587

463:                                              ; preds = %462
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %99) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %98) #8
  %464 = load i8, ptr %20, align 1, !tbaa !9, !range !27, !noundef !28
  %465 = trunc i8 %464 to i1
  br i1 %465, label %466, label %646

466:                                              ; preds = %463
  call void @llvm.lifetime.start.p0(i64 24, ptr %100) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %101, ptr noundef nonnull align 8 dereferenceable(24) %89)
          to label %467 unwind label %592

467:                                              ; preds = %466
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %103, ptr noundef nonnull align 8 dereferenceable(24) %42)
          to label %468 unwind label %596

468:                                              ; preds = %467
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %105, ptr noundef nonnull align 8 dereferenceable(24) %78)
          to label %469 unwind label %600

469:                                              ; preds = %468
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(24) %82)
          to label %470 unwind label %604

470:                                              ; preds = %469
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %109, ptr noundef nonnull align 8 dereferenceable(24) %93)
          to label %471 unwind label %608

471:                                              ; preds = %470
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %110, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %472 unwind label %612

472:                                              ; preds = %471
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %108, ptr noundef %109, ptr noundef %110)
          to label %473 unwind label %616

473:                                              ; preds = %472
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %106, ptr noundef %107, ptr noundef %108)
          to label %474 unwind label %620

474:                                              ; preds = %473
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %104, ptr noundef %105, ptr noundef %106)
          to label %475 unwind label %624

475:                                              ; preds = %474
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %102, ptr noundef %103, ptr noundef %104)
          to label %476 unwind label %628

476:                                              ; preds = %475
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %100, ptr noundef %101, ptr noundef %102)
          to label %477 unwind label %632

477:                                              ; preds = %476
  %478 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIfSaIfEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %100) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %100) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %102) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %104) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %106) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %108) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %110) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %109) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %105) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %103) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %101) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %100) #8
  br label %646

479:                                              ; preds = %12
  %480 = landingpad { ptr, i32 }
          cleanup
  %481 = extractvalue { ptr, i32 } %480, 0
  store ptr %481, ptr %46, align 8
  %482 = extractvalue { ptr, i32 } %480, 1
  store i32 %482, ptr %47, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %44) #8
  br label %665

483:                                              ; preds = %194
  %484 = landingpad { ptr, i32 }
          cleanup
  %485 = extractvalue { ptr, i32 } %484, 0
  store ptr %485, ptr %46, align 8
  %486 = extractvalue { ptr, i32 } %484, 1
  store i32 %486, ptr %47, align 4
  br label %491

487:                                              ; preds = %196
  %488 = landingpad { ptr, i32 }
          cleanup
  %489 = extractvalue { ptr, i32 } %488, 0
  store ptr %489, ptr %46, align 8
  %490 = extractvalue { ptr, i32 } %488, 1
  store i32 %490, ptr %47, align 4
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %49) #8
  br label %491

491:                                              ; preds = %487, %483
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #8
  br label %664

492:                                              ; preds = %198
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %46, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %47, align 4
  br label %500

496:                                              ; preds = %202
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %46, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %47, align 4
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %51) #8
  br label %500

500:                                              ; preds = %496, %492
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #8
  br label %663

501:                                              ; preds = %228, %204
  %502 = landingpad { ptr, i32 }
          cleanup
  %503 = extractvalue { ptr, i32 } %502, 0
  store ptr %503, ptr %46, align 8
  %504 = extractvalue { ptr, i32 } %502, 1
  store i32 %504, ptr %47, align 4
  br label %662

505:                                              ; preds = %239
  %506 = landingpad { ptr, i32 }
          cleanup
  %507 = extractvalue { ptr, i32 } %506, 0
  store ptr %507, ptr %46, align 8
  %508 = extractvalue { ptr, i32 } %506, 1
  store i32 %508, ptr %47, align 4
  br label %513

509:                                              ; preds = %245
  %510 = landingpad { ptr, i32 }
          cleanup
  %511 = extractvalue { ptr, i32 } %510, 0
  store ptr %511, ptr %46, align 8
  %512 = extractvalue { ptr, i32 } %510, 1
  store i32 %512, ptr %47, align 4
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %60) #8
  br label %513

513:                                              ; preds = %509, %505
  call void @llvm.lifetime.end.p0(i64 40, ptr %60) #8
  br label %661

514:                                              ; preds = %247
  %515 = landingpad { ptr, i32 }
          cleanup
  %516 = extractvalue { ptr, i32 } %515, 0
  store ptr %516, ptr %46, align 8
  %517 = extractvalue { ptr, i32 } %515, 1
  store i32 %517, ptr %47, align 4
  br label %522

518:                                              ; preds = %248
  %519 = landingpad { ptr, i32 }
          cleanup
  %520 = extractvalue { ptr, i32 } %519, 0
  store ptr %520, ptr %46, align 8
  %521 = extractvalue { ptr, i32 } %519, 1
  store i32 %521, ptr %47, align 4
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %62) #8
  br label %522

522:                                              ; preds = %518, %514
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #8
  br label %660

523:                                              ; preds = %250
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %46, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %47, align 4
  br label %531

527:                                              ; preds = %253
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %46, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %47, align 4
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  br label %531

531:                                              ; preds = %527, %523
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #8
  br label %659

532:                                              ; preds = %259, %255
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %46, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %47, align 4
  br label %658

536:                                              ; preds = %270
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %46, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %47, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %72) #8
  br label %657

540:                                              ; preds = %316
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %46, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %47, align 4
  br label %558

544:                                              ; preds = %318
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %46, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %47, align 4
  br label %557

548:                                              ; preds = %319
  %549 = landingpad { ptr, i32 }
          cleanup
  %550 = extractvalue { ptr, i32 } %549, 0
  store ptr %550, ptr %46, align 8
  %551 = extractvalue { ptr, i32 } %549, 1
  store i32 %551, ptr %47, align 4
  br label %556

552:                                              ; preds = %320
  %553 = landingpad { ptr, i32 }
          cleanup
  %554 = extractvalue { ptr, i32 } %553, 0
  store ptr %554, ptr %46, align 8
  %555 = extractvalue { ptr, i32 } %553, 1
  store i32 %555, ptr %47, align 4
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  br label %556

556:                                              ; preds = %552, %548
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %77) #8
  br label %557

557:                                              ; preds = %556, %544
  call void @llvm.lifetime.end.p0(i64 16, ptr %77) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %76) #8
  br label %558

558:                                              ; preds = %557, %540
  call void @llvm.lifetime.end.p0(i64 16, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %75) #8
  br label %656

559:                                              ; preds = %322
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %46, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %47, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %81) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %80) #8
  br label %655

563:                                              ; preds = %357
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %46, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %47, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %85) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %84) #8
  br label %654

567:                                              ; preds = %387, %385
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %46, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %47, align 4
  br label %653

571:                                              ; preds = %398
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %46, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %47, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %92) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %91) #8
  br label %652

575:                                              ; preds = %430
  %576 = landingpad { ptr, i32 }
          cleanup
  %577 = extractvalue { ptr, i32 } %576, 0
  store ptr %577, ptr %46, align 8
  %578 = extractvalue { ptr, i32 } %576, 1
  store i32 %578, ptr %47, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %95) #8
  br label %651

579:                                              ; preds = %460
  %580 = landingpad { ptr, i32 }
          cleanup
  %581 = extractvalue { ptr, i32 } %580, 0
  store ptr %581, ptr %46, align 8
  %582 = extractvalue { ptr, i32 } %580, 1
  store i32 %582, ptr %47, align 4
  br label %650

583:                                              ; preds = %461
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %46, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %47, align 4
  br label %591

587:                                              ; preds = %462
  %588 = landingpad { ptr, i32 }
          cleanup
  %589 = extractvalue { ptr, i32 } %588, 0
  store ptr %589, ptr %46, align 8
  %590 = extractvalue { ptr, i32 } %588, 1
  store i32 %590, ptr %47, align 4
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %99) #8
  br label %591

591:                                              ; preds = %587, %583
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %98) #8
  br label %650

592:                                              ; preds = %466
  %593 = landingpad { ptr, i32 }
          cleanup
  %594 = extractvalue { ptr, i32 } %593, 0
  store ptr %594, ptr %46, align 8
  %595 = extractvalue { ptr, i32 } %593, 1
  store i32 %595, ptr %47, align 4
  br label %645

596:                                              ; preds = %467
  %597 = landingpad { ptr, i32 }
          cleanup
  %598 = extractvalue { ptr, i32 } %597, 0
  store ptr %598, ptr %46, align 8
  %599 = extractvalue { ptr, i32 } %597, 1
  store i32 %599, ptr %47, align 4
  br label %644

600:                                              ; preds = %468
  %601 = landingpad { ptr, i32 }
          cleanup
  %602 = extractvalue { ptr, i32 } %601, 0
  store ptr %602, ptr %46, align 8
  %603 = extractvalue { ptr, i32 } %601, 1
  store i32 %603, ptr %47, align 4
  br label %643

604:                                              ; preds = %469
  %605 = landingpad { ptr, i32 }
          cleanup
  %606 = extractvalue { ptr, i32 } %605, 0
  store ptr %606, ptr %46, align 8
  %607 = extractvalue { ptr, i32 } %605, 1
  store i32 %607, ptr %47, align 4
  br label %642

608:                                              ; preds = %470
  %609 = landingpad { ptr, i32 }
          cleanup
  %610 = extractvalue { ptr, i32 } %609, 0
  store ptr %610, ptr %46, align 8
  %611 = extractvalue { ptr, i32 } %609, 1
  store i32 %611, ptr %47, align 4
  br label %641

612:                                              ; preds = %471
  %613 = landingpad { ptr, i32 }
          cleanup
  %614 = extractvalue { ptr, i32 } %613, 0
  store ptr %614, ptr %46, align 8
  %615 = extractvalue { ptr, i32 } %613, 1
  store i32 %615, ptr %47, align 4
  br label %640

616:                                              ; preds = %472
  %617 = landingpad { ptr, i32 }
          cleanup
  %618 = extractvalue { ptr, i32 } %617, 0
  store ptr %618, ptr %46, align 8
  %619 = extractvalue { ptr, i32 } %617, 1
  store i32 %619, ptr %47, align 4
  br label %639

620:                                              ; preds = %473
  %621 = landingpad { ptr, i32 }
          cleanup
  %622 = extractvalue { ptr, i32 } %621, 0
  store ptr %622, ptr %46, align 8
  %623 = extractvalue { ptr, i32 } %621, 1
  store i32 %623, ptr %47, align 4
  br label %638

624:                                              ; preds = %474
  %625 = landingpad { ptr, i32 }
          cleanup
  %626 = extractvalue { ptr, i32 } %625, 0
  store ptr %626, ptr %46, align 8
  %627 = extractvalue { ptr, i32 } %625, 1
  store i32 %627, ptr %47, align 4
  br label %637

628:                                              ; preds = %475
  %629 = landingpad { ptr, i32 }
          cleanup
  %630 = extractvalue { ptr, i32 } %629, 0
  store ptr %630, ptr %46, align 8
  %631 = extractvalue { ptr, i32 } %629, 1
  store i32 %631, ptr %47, align 4
  br label %636

632:                                              ; preds = %476
  %633 = landingpad { ptr, i32 }
          cleanup
  %634 = extractvalue { ptr, i32 } %633, 0
  store ptr %634, ptr %46, align 8
  %635 = extractvalue { ptr, i32 } %633, 1
  store i32 %635, ptr %47, align 4
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %102) #8
  br label %636

636:                                              ; preds = %632, %628
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %104) #8
  br label %637

637:                                              ; preds = %636, %624
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %106) #8
  br label %638

638:                                              ; preds = %637, %620
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %108) #8
  br label %639

639:                                              ; preds = %638, %616
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %110) #8
  br label %640

640:                                              ; preds = %639, %612
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %109) #8
  br label %641

641:                                              ; preds = %640, %608
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #8
  br label %642

642:                                              ; preds = %641, %604
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %105) #8
  br label %643

643:                                              ; preds = %642, %600
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %103) #8
  br label %644

644:                                              ; preds = %643, %596
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %101) #8
  br label %645

645:                                              ; preds = %644, %592
  call void @llvm.lifetime.end.p0(i64 24, ptr %100) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  br label %650

646:                                              ; preds = %477, %463
  store i1 true, ptr %97, align 1
  %647 = load i1, ptr %97, align 1
  br i1 %647, label %649, label %648

648:                                              ; preds = %646
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  br label %649

649:                                              ; preds = %648, %646
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %93) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %93) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %89) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %82) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %82) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %78) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %59) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  ret void

650:                                              ; preds = %645, %591, %579
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %93) #8
  br label %651

651:                                              ; preds = %650, %575
  call void @llvm.lifetime.end.p0(i64 24, ptr %93) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %89) #8
  br label %652

652:                                              ; preds = %651, %571
  call void @llvm.lifetime.end.p0(i64 24, ptr %89) #8
  br label %653

653:                                              ; preds = %652, %567
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %82) #8
  br label %654

654:                                              ; preds = %653, %563
  call void @llvm.lifetime.end.p0(i64 24, ptr %82) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %78) #8
  br label %655

655:                                              ; preds = %654, %559
  call void @llvm.lifetime.end.p0(i64 24, ptr %78) #8
  br label %656

656:                                              ; preds = %655, %558
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70) #8
  br label %657

657:                                              ; preds = %656, %536
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  br label %658

658:                                              ; preds = %657, %532
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #8
  br label %659

659:                                              ; preds = %658, %531
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  br label %660

660:                                              ; preds = %659, %522
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %59) #8
  br label %661

661:                                              ; preds = %660, %513
  call void @llvm.lifetime.end.p0(i64 40, ptr %59) #8
  br label %662

662:                                              ; preds = %661, %501
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  br label %663

663:                                              ; preds = %662, %500
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %664

664:                                              ; preds = %663, %491
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %42) #8
  br label %665

665:                                              ; preds = %664, %479
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  br label %666

666:                                              ; preds = %665
  %667 = load ptr, ptr %46, align 8
  %668 = load i32, ptr %47, align 4
  %669 = insertvalue { ptr, i32 } poison, ptr %667, 0
  %670 = insertvalue { ptr, i32 } %669, i32 %668, 1
  resume { ptr, i32 } %670
}

declare void @_ZNK3sim10Coordinate4getXEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1

; Function Attrs: nounwind
declare void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7

declare void @_ZNK3sim10Coordinate4getYEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1

declare void @_ZN3sim9CartesianC1ERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #1

declare void @_ZNK3sim9CartesianmiERKNS_10CoordinateE(ptr dead_on_unwind writable sret(%"class.sim::Cartesian") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #1

; Function Attrs: nounwind
declare void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #7

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

declare void @_ZNK3sim7DegreesmiERKNS_5AngleE(ptr dead_on_unwind writable sret(%"class.sim::Degrees") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #1

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

declare noundef double @_ZNK3sim5Angle19getRadiansZeroTo2piEv(ptr noundef nonnull align 8 dereferenceable(16)) #1

; Function Attrs: nounwind
declare void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #7

; Function Attrs: nounwind
declare double @cos(double noundef) #7

; Function Attrs: nounwind
declare double @sin(double noundef) #7

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !6, i64 0}
!14 = !{!"_ZTSSt4pairIddE", !6, i64 0, !6, i64 8}
!15 = !{!14, !6, i64 8}
!16 = !{!17, !17, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"float", !7, i64 0}
!20 = !{!21, !12, i64 0}
!21 = !{!"_ZTSSt16initializer_listIfE", !12, i64 0, !22, i64 8}
!22 = !{!"long", !7, i64 0}
!23 = !{!21, !22, i64 8}
!24 = !{!25, !17, i64 0}
!25 = !{!"_ZTSSt4pairIiiE", !17, i64 0, !17, i64 4}
!26 = !{!25, !17, i64 4}
!27 = !{i8 0, i8 2}
!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.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair" = type { double, double }
%"struct.std::pair.0" = type { i32, i32 }
%"class.std::allocator" = type { i8 }
%"class.sim::Meters" = type { %"class.sim::Distance" }
%"class.sim::Distance" = type { ptr, double }
%"class.sim::Cartesian" = type { %"class.sim::Coordinate" }
%"class.sim::Coordinate" = type { ptr, %"class.sim::Meters", %"class.sim::Meters" }
%"class.sim::Degrees" = type { %"class.sim::Angle" }
%"class.sim::Angle" = type { ptr, double }

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

declare noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; 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 uwtable
declare dso_local { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double, double, i64) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIiiESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIddEC2IiiTnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE22_MoveConstructiblePairIS3_S4_EEclsr6_PCCFPIS3_S4_EE30_ImplicitlyMoveConvertiblePairIS3_S4_EEEbE4typeELb1EEEOS_IS3_S4_E(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef, ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3sim20TransformationMatrix32getZoomedMapTransformationMatrixESt4pairIddES1_IiiES3_S3_ddbRKNS_10CoordinateES6_RKNS_5AngleE(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8 %0, double %1, double %2, i64 %3, i64 %4, i64 %5, double noundef %6, double noundef %7, i1 noundef zeroext %8, ptr noundef nonnull align 8 dereferenceable(40) %9, ptr noundef nonnull align 8 dereferenceable(40) %10, ptr noundef nonnull align 8 dereferenceable(16) %11) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca %"struct.std::pair", align 8
  %16 = alloca %"struct.std::pair.0", align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::vector", align 8
  %20 = alloca [16 x float], align 4
  %21 = alloca %"class.std::allocator", align 1
  %22 = alloca %"class.sim::Meters", align 8
  %23 = alloca %"class.sim::Meters", align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca %"class.sim::Cartesian", align 8
  %29 = alloca %"class.sim::Cartesian", align 8
  %30 = alloca double, align 8
  %31 = alloca %"class.sim::Meters", align 8
  %32 = alloca double, align 8
  %33 = alloca %"class.sim::Meters", align 8
  %34 = alloca %"class.std::vector", align 8
  %35 = alloca [16 x float], align 8
  %36 = alloca %"class.std::allocator", align 1
  %37 = alloca %"class.sim::Degrees", align 8
  %38 = alloca %"class.sim::Degrees", align 8
  %39 = alloca %"class.sim::Degrees", align 8
  %40 = alloca %"class.std::vector", align 8
  %41 = alloca [16 x float], align 4
  %42 = alloca %"class.std::allocator", align 1
  %43 = alloca %"class.std::vector", align 8
  %44 = alloca [16 x float], align 4
  %45 = alloca %"class.std::allocator", align 1
  %46 = alloca %"class.std::vector", align 8
  %47 = alloca [16 x float], align 8
  %48 = alloca %"class.std::allocator", align 1
  %49 = alloca %"class.std::vector", align 8
  %50 = alloca [16 x float], align 8
  %51 = alloca %"class.std::allocator", align 1
  %52 = alloca %"class.std::vector", align 8
  %53 = alloca %"class.std::vector", align 8
  %54 = alloca %"class.std::vector", align 8
  %55 = alloca %"class.std::vector", align 8
  %56 = alloca %"class.std::vector", align 8
  %57 = alloca %"class.std::vector", align 8
  %58 = alloca %"class.std::vector", align 8
  %59 = alloca %"class.std::vector", align 8
  %60 = alloca %"class.std::vector", align 8
  %61 = alloca %"class.std::vector", align 8
  %62 = alloca %"class.std::vector", align 8
  %63 = alloca %"class.std::vector", align 8
  %64 = alloca %"class.std::vector", align 8
  %.sroa.076.0.extract.trunc = trunc i64 %3 to i32
  %.sroa.277.0.extract.shift = lshr i64 %3, 32
  %.sroa.277.0.extract.trunc = trunc nuw i64 %.sroa.277.0.extract.shift to i32
  %.sroa.074.0.extract.trunc = trunc i64 %4 to i32
  %.sroa.275.0.extract.shift = lshr i64 %4, 32
  %.sroa.275.0.extract.trunc = trunc nuw i64 %.sroa.275.0.extract.shift to i32
  %65 = fmul double %6, %7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %66 = fmul double %65, %1
  store double %66, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  %67 = fmul double %65, %2
  store double %67, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  store i32 0, ptr %18, align 4, !tbaa !9
  %68 = call i64 @_ZSt9make_pairIiiESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS1_INS2_IT0_E4typeEE6__typeEEOS3_OS8_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18)
  store i64 %68, ptr %16, align 8
  call void @_ZNSt4pairIddEC2IiiTnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE22_MoveConstructiblePairIS3_S4_EEclsr6_PCCFPIS3_S4_EE30_ImplicitlyMoveConvertiblePairIS3_S4_EEEbE4typeELb1EEEOS_IS3_S4_E(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(8) %16)
  %69 = load double, ptr %15, align 8
  %70 = getelementptr inbounds i8, ptr %15, i64 8
  %71 = load double, ptr %70, align 8
  %72 = call { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %69, double %71, i64 %5)
  %73 = extractvalue { double, double } %72, 0
  %74 = extractvalue { double, double } %72, 1
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %75 = call { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14)
  %76 = extractvalue { double, double } %75, 0
  %77 = extractvalue { double, double } %75, 1
  %78 = call { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %76, double %77, i64 %5)
  %79 = extractvalue { double, double } %78, 0
  %80 = extractvalue { double, double } %78, 1
  %81 = fsub double %79, %73
  %82 = fsub double %80, %74
  %83 = fdiv double %81, %1
  %84 = fdiv double %82, %2
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #8
  %85 = getelementptr inbounds i8, ptr %20, i64 4
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %85, i8 0, i64 56, i1 false)
  %86 = fptrunc double %83 to float
  store float %86, ptr %20, align 4, !tbaa !11
  %87 = getelementptr inbounds i8, ptr %20, i64 20
  %88 = fptrunc double %84 to float
  store float %88, ptr %87, align 4, !tbaa !11
  %89 = getelementptr inbounds i8, ptr %20, i64 40
  store float 1.000000e+00, ptr %89, align 4, !tbaa !11
  %90 = getelementptr inbounds i8, ptr %20, i64 60
  store float 1.000000e+00, ptr %90, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr nonnull %20, i64 16, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %91 unwind label %230

91:                                               ; preds = %12
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #8
  invoke void @_ZNK3sim10Coordinate4getXEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Meters") align 8 %22, ptr noundef nonnull align 8 dereferenceable(40) %9)
          to label %92 unwind label %232

92:                                               ; preds = %91
  %93 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %94 unwind label %234

94:                                               ; preds = %92
  %95 = fmul double %65, %93
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #8
  invoke void @_ZNK3sim10Coordinate4getYEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Meters") align 8 %23, ptr noundef nonnull align 8 dereferenceable(40) %9)
          to label %96 unwind label %237

96:                                               ; preds = %94
  %97 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %23)
          to label %98 unwind label %239

98:                                               ; preds = %96
  %99 = fmul double %65, %97
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  %100 = sitofp i32 %.sroa.076.0.extract.trunc to double
  %101 = sitofp i32 %.sroa.074.0.extract.trunc to double
  %102 = call double @llvm.fmuladd.f64(double %101, double 5.000000e-01, double %100)
  store double %102, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #8
  %103 = sitofp i32 %.sroa.277.0.extract.trunc to double
  %104 = sitofp i32 %.sroa.275.0.extract.trunc to double
  %105 = call double @llvm.fmuladd.f64(double %104, double 5.000000e-01, double %103)
  store double %105, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  %106 = fsub double %102, %95
  store double %106, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #8
  %107 = fsub double %105, %99
  store double %107, ptr %27, align 8, !tbaa !5
  %108 = invoke { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %109 unwind label %242

109:                                              ; preds = %98
  %110 = extractvalue { double, double } %108, 0
  %111 = extractvalue { double, double } %108, 1
  %112 = invoke { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %110, double %111, i64 %5)
          to label %113 unwind label %242

113:                                              ; preds = %109
  %114 = extractvalue { double, double } %112, 0
  %115 = extractvalue { double, double } %112, 1
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %28) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %29) #8
  invoke void @_ZN3sim9CartesianC1ERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40) %29, ptr noundef nonnull align 8 dereferenceable(40) %10)
          to label %116 unwind label %244

116:                                              ; preds = %113
  invoke void @_ZNK3sim9CartesianmiERKNS_10CoordinateE(ptr dead_on_unwind nonnull writable sret(%"class.sim::Cartesian") align 8 %28, ptr noundef nonnull align 8 dereferenceable(40) %29, ptr noundef nonnull align 8 dereferenceable(40) %9)
          to label %117 unwind label %246

117:                                              ; preds = %116
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %29) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #8
  invoke void @_ZNK3sim10Coordinate4getXEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Meters") align 8 %31, ptr noundef nonnull align 8 dereferenceable(40) %28)
          to label %118 unwind label %249

118:                                              ; preds = %117
  %119 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %120 unwind label %251

120:                                              ; preds = %118
  %121 = fmul double %65, %119
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #8
  store double %121, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #8
  invoke void @_ZNK3sim10Coordinate4getYEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Meters") align 8 %33, ptr noundef nonnull align 8 dereferenceable(40) %28)
          to label %122 unwind label %254

122:                                              ; preds = %120
  %123 = invoke noundef double @_ZNK3sim8Distance9getMetersEv(ptr noundef nonnull align 8 dereferenceable(16) %33)
          to label %124 unwind label %256

124:                                              ; preds = %122
  %125 = fmul double %65, %123
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #8
  store double %125, ptr %32, align 8, !tbaa !5
  %126 = invoke { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %127 unwind label %259

127:                                              ; preds = %124
  %128 = extractvalue { double, double } %126, 0
  %129 = extractvalue { double, double } %126, 1
  %130 = invoke { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %128, double %129, i64 %5)
          to label %131 unwind label %259

131:                                              ; preds = %127
  %132 = extractvalue { double, double } %130, 0
  %133 = extractvalue { double, double } %130, 1
  %134 = fsub double %114, %132
  %135 = fadd double %73, %134
  %136 = fsub double %115, %133
  %137 = fadd double %74, %136
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %35) #8
  store <2 x float> <float 1.000000e+00, float 0.000000e+00>, ptr %35, align 8, !tbaa !11
  %138 = getelementptr inbounds i8, ptr %35, i64 8
  store float 0.000000e+00, ptr %138, align 8, !tbaa !11
  %139 = getelementptr inbounds i8, ptr %35, i64 12
  %140 = fptrunc double %135 to float
  store float %140, ptr %139, align 4, !tbaa !11
  %141 = getelementptr inbounds i8, ptr %35, i64 16
  store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr %141, align 8, !tbaa !11
  %142 = getelementptr inbounds i8, ptr %35, i64 24
  store float 0.000000e+00, ptr %142, align 8, !tbaa !11
  %143 = getelementptr inbounds i8, ptr %35, i64 28
  %144 = fptrunc double %137 to float
  store float %144, ptr %143, align 4, !tbaa !11
  %145 = getelementptr inbounds i8, ptr %35, i64 32
  store <2 x float> zeroinitializer, ptr %145, align 8, !tbaa !11
  %146 = getelementptr inbounds i8, ptr %35, i64 40
  store float 1.000000e+00, ptr %146, align 8, !tbaa !11
  %147 = getelementptr inbounds i8, ptr %35, i64 44
  %148 = getelementptr inbounds i8, ptr %35, i64 60
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %147, i8 0, i64 16, i1 false)
  store float 1.000000e+00, ptr %148, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %36) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr nonnull %35, i64 16, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %149 unwind label %261

149:                                              ; preds = %131
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %35) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %38) #8
  invoke void @_ZN3sim7DegreesC1ERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %11)
          to label %150 unwind label %263

150:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %39) #8
  invoke void @_ZN3sim7DegreesC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %39, double noundef 9.000000e+01)
          to label %151 unwind label %265

151:                                              ; preds = %150
  invoke void @_ZNK3sim7DegreesmiERKNS_5AngleE(ptr dead_on_unwind nonnull writable sret(%"class.sim::Degrees") align 8 %37, ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %39)
          to label %152 unwind label %267

152:                                              ; preds = %151
  %153 = invoke noundef double @_ZNK3sim5Angle19getRadiansZeroTo2piEv(ptr noundef nonnull align 8 dereferenceable(16) %37)
          to label %154 unwind label %269

154:                                              ; preds = %152
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %39) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %40) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %41) #8
  %155 = call double @cos(double noundef %153) #8
  %156 = fptrunc double %155 to float
  store float %156, ptr %41, align 4, !tbaa !11
  %157 = getelementptr inbounds i8, ptr %41, i64 4
  %158 = call double @sin(double noundef %153) #8
  %159 = fptrunc double %158 to float
  store float %159, ptr %157, align 4, !tbaa !11
  %160 = getelementptr inbounds i8, ptr %41, i64 8
  store <2 x float> zeroinitializer, ptr %160, align 4, !tbaa !11
  %161 = getelementptr inbounds i8, ptr %41, i64 16
  %162 = call double @sin(double noundef %153) #8
  %163 = fptrunc double %162 to float
  %164 = fneg float %163
  store float %164, ptr %161, align 4, !tbaa !11
  %165 = getelementptr inbounds i8, ptr %41, i64 20
  %166 = call double @cos(double noundef %153) #8
  %167 = fptrunc double %166 to float
  store float %167, ptr %165, align 4, !tbaa !11
  %168 = getelementptr inbounds i8, ptr %41, i64 24
  %169 = getelementptr inbounds i8, ptr %41, i64 40
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %168, i8 0, i64 16, i1 false)
  store float 1.000000e+00, ptr %169, align 4, !tbaa !11
  %170 = getelementptr inbounds i8, ptr %41, i64 44
  %171 = getelementptr inbounds i8, ptr %41, i64 60
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %170, i8 0, i64 16, i1 false)
  store float 1.000000e+00, ptr %171, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %42) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr nonnull %41, i64 16, ptr noundef nonnull align 1 dereferenceable(1) %42)
          to label %172 unwind label %274

172:                                              ; preds = %154
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %41) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %43) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %44) #8
  %173 = getelementptr inbounds i8, ptr %44, i64 4
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(64) %173, i8 0, i64 56, i1 false)
  %174 = fdiv double 1.000000e+00, %83
  %175 = fptrunc double %174 to float
  store float %175, ptr %44, align 4, !tbaa !11
  %176 = getelementptr inbounds i8, ptr %44, i64 20
  %177 = fdiv double 1.000000e+00, %84
  %178 = fptrunc double %177 to float
  store float %178, ptr %176, align 4, !tbaa !11
  %179 = getelementptr inbounds i8, ptr %44, i64 40
  store float 1.000000e+00, ptr %179, align 4, !tbaa !11
  %180 = getelementptr inbounds i8, ptr %44, i64 60
  store float 1.000000e+00, ptr %180, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %45) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr nonnull %44, i64 16, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %181 unwind label %276

181:                                              ; preds = %172
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %44) #8
  %182 = invoke { double, double } @_ZSt9make_pairIRdS0_ESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS2_INS3_IT0_E4typeEE6__typeEEOS4_OS9_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25)
          to label %183 unwind label %278

183:                                              ; preds = %181
  %184 = extractvalue { double, double } %182, 0
  %185 = extractvalue { double, double } %182, 1
  %186 = invoke { double, double } @_ZN3sim20TransformationMatrix36mapPixelCoordinateToOpenGlCoordinateESt4pairIddES1_IiiE(double %184, double %185, i64 %5)
          to label %187 unwind label %278

187:                                              ; preds = %183
  %188 = extractvalue { double, double } %186, 0
  %189 = extractvalue { double, double } %186, 1
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %46) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %47) #8
  store <2 x float> <float 1.000000e+00, float 0.000000e+00>, ptr %47, align 8, !tbaa !11
  %190 = getelementptr inbounds i8, ptr %47, i64 8
  store float 0.000000e+00, ptr %190, align 8, !tbaa !11
  %191 = getelementptr inbounds i8, ptr %47, i64 12
  %192 = fptrunc double %188 to float
  store float %192, ptr %191, align 4, !tbaa !11
  %193 = getelementptr inbounds i8, ptr %47, i64 16
  store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr %193, align 8, !tbaa !11
  %194 = getelementptr inbounds i8, ptr %47, i64 24
  store float 0.000000e+00, ptr %194, align 8, !tbaa !11
  %195 = getelementptr inbounds i8, ptr %47, i64 28
  %196 = fptrunc double %189 to float
  store float %196, ptr %195, align 4, !tbaa !11
  %197 = getelementptr inbounds i8, ptr %47, i64 32
  store <2 x float> zeroinitializer, ptr %197, align 8, !tbaa !11
  %198 = getelementptr inbounds i8, ptr %47, i64 40
  store float 1.000000e+00, ptr %198, align 8, !tbaa !11
  %199 = getelementptr inbounds i8, ptr %47, i64 44
  %200 = getelementptr inbounds i8, ptr %47, i64 60
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %199, i8 0, i64 16, i1 false)
  store float 1.000000e+00, ptr %200, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %48) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %46, ptr nonnull %47, i64 16, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %201 unwind label %280

201:                                              ; preds = %187
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %47) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %49) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %50) #8
  store <2 x float> <float 1.000000e+00, float 0.000000e+00>, ptr %50, align 8, !tbaa !11
  %202 = getelementptr inbounds i8, ptr %50, i64 8
  store float 0.000000e+00, ptr %202, align 8, !tbaa !11
  %203 = getelementptr inbounds i8, ptr %50, i64 12
  %204 = fneg float %192
  store float %204, ptr %203, align 4, !tbaa !11
  %205 = getelementptr inbounds i8, ptr %50, i64 16
  store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr %205, align 8, !tbaa !11
  %206 = getelementptr inbounds i8, ptr %50, i64 24
  store float 0.000000e+00, ptr %206, align 8, !tbaa !11
  %207 = getelementptr inbounds i8, ptr %50, i64 28
  %208 = fneg float %196
  store float %208, ptr %207, align 4, !tbaa !11
  %209 = getelementptr inbounds i8, ptr %50, i64 32
  store <2 x float> zeroinitializer, ptr %209, align 8, !tbaa !11
  %210 = getelementptr inbounds i8, ptr %50, i64 40
  store float 1.000000e+00, ptr %210, align 8, !tbaa !11
  %211 = getelementptr inbounds i8, ptr %50, i64 44
  %212 = getelementptr inbounds i8, ptr %50, i64 60
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %211, i8 0, i64 16, i1 false)
  store float 1.000000e+00, ptr %212, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %51) #8
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %51) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ESt16initializer_listIfERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %49, ptr nonnull %50, i64 16, ptr noundef nonnull align 1 dereferenceable(1) %51)
          to label %213 unwind label %282

213:                                              ; preds = %201
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %51) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %50) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %214 unwind label %284

214:                                              ; preds = %213
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %53, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %215 unwind label %286

215:                                              ; preds = %214
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %0, ptr noundef nonnull %52, ptr noundef nonnull %53)
          to label %216 unwind label %288

216:                                              ; preds = %215
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #8
  br i1 %8, label %217, label %323

217:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %54) #8
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(24) %46)
          to label %218 unwind label %291

218:                                              ; preds = %217
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %219 unwind label %293

219:                                              ; preds = %218
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %59, ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %220 unwind label %295

220:                                              ; preds = %219
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %61, ptr noundef nonnull align 8 dereferenceable(24) %43)
          to label %221 unwind label %297

221:                                              ; preds = %220
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %63, ptr noundef nonnull align 8 dereferenceable(24) %49)
          to label %222 unwind label %299

222:                                              ; preds = %221
  invoke void @_ZNSt6vectorIfSaIfEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %64, ptr noundef nonnull align 8 dereferenceable(24) %0)
          to label %223 unwind label %301

223:                                              ; preds = %222
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %62, ptr noundef nonnull %63, ptr noundef nonnull %64)
          to label %224 unwind label %303

224:                                              ; preds = %223
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %60, ptr noundef nonnull %61, ptr noundef nonnull %62)
          to label %225 unwind label %305

225:                                              ; preds = %224
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %58, ptr noundef nonnull %59, ptr noundef nonnull %60)
          to label %226 unwind label %307

226:                                              ; preds = %225
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %56, ptr noundef nonnull %57, ptr noundef nonnull %58)
          to label %227 unwind label %309

227:                                              ; preds = %226
  invoke void @_ZN3sim20TransformationMatrix19multiply4x4MatricesESt6vectorIfSaIfEES3_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %54, ptr noundef nonnull %55, ptr noundef nonnull %56)
          to label %228 unwind label %311

228:                                              ; preds = %227
  %229 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIfSaIfEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %54) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %56) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %63) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %61) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %59) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %57) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %54) #8
  br label %323

230:                                              ; preds = %12
  %231 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #8
  br label %337

232:                                              ; preds = %91
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %236

234:                                              ; preds = %92
  %235 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #8
  br label %236

236:                                              ; preds = %234, %232
  %.pn = phi { ptr, i32 } [ %235, %234 ], [ %233, %232 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #8
  br label %336

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

239:                                              ; preds = %96
  %240 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #8
  br label %241

241:                                              ; preds = %239, %237
  %.pn116 = phi { ptr, i32 } [ %240, %239 ], [ %238, %237 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #8
  br label %336

242:                                              ; preds = %109, %98
  %243 = landingpad { ptr, i32 }
          cleanup
  br label %335

244:                                              ; preds = %113
  %245 = landingpad { ptr, i32 }
          cleanup
  br label %248

246:                                              ; preds = %116
  %247 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %29) #8
  br label %248

248:                                              ; preds = %246, %244
  %.pn118 = phi { ptr, i32 } [ %247, %246 ], [ %245, %244 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %29) #8
  br label %334

249:                                              ; preds = %117
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %253

251:                                              ; preds = %118
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #8
  br label %253

253:                                              ; preds = %251, %249
  %.pn120 = phi { ptr, i32 } [ %252, %251 ], [ %250, %249 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #8
  br label %333

254:                                              ; preds = %120
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %258

256:                                              ; preds = %122
  %257 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #8
  br label %258

258:                                              ; preds = %256, %254
  %.pn122 = phi { ptr, i32 } [ %257, %256 ], [ %255, %254 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #8
  br label %332

259:                                              ; preds = %127, %124
  %260 = landingpad { ptr, i32 }
          cleanup
  br label %332

261:                                              ; preds = %131
  %262 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %35) #8
  br label %331

263:                                              ; preds = %149
  %264 = landingpad { ptr, i32 }
          cleanup
  br label %273

265:                                              ; preds = %150
  %266 = landingpad { ptr, i32 }
          cleanup
  br label %272

267:                                              ; preds = %151
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %271

269:                                              ; preds = %152
  %270 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #8
  br label %271

271:                                              ; preds = %269, %267
  %.pn124 = phi { ptr, i32 } [ %270, %269 ], [ %268, %267 ]
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %39) #8
  br label %272

272:                                              ; preds = %271, %265
  %.pn124.pn = phi { ptr, i32 } [ %.pn124, %271 ], [ %266, %265 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %39) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %38) #8
  br label %273

273:                                              ; preds = %272, %263
  %.pn124.pn.pn = phi { ptr, i32 } [ %.pn124.pn, %272 ], [ %264, %263 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #8
  br label %330

274:                                              ; preds = %154
  %275 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %41) #8
  br label %329

276:                                              ; preds = %172
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %44) #8
  br label %328

278:                                              ; preds = %183, %181
  %279 = landingpad { ptr, i32 }
          cleanup
  br label %327

280:                                              ; preds = %187
  %281 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %47) #8
  br label %326

282:                                              ; preds = %201
  %283 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %51) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %50) #8
  br label %325

284:                                              ; preds = %213
  %285 = landingpad { ptr, i32 }
          cleanup
  br label %324

286:                                              ; preds = %214
  %287 = landingpad { ptr, i32 }
          cleanup
  br label %290

288:                                              ; preds = %215
  %289 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #8
  br label %290

290:                                              ; preds = %288, %286
  %.pn128 = phi { ptr, i32 } [ %289, %288 ], [ %287, %286 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #8
  br label %324

291:                                              ; preds = %217
  %292 = landingpad { ptr, i32 }
          cleanup
  br label %322

293:                                              ; preds = %218
  %294 = landingpad { ptr, i32 }
          cleanup
  br label %321

295:                                              ; preds = %219
  %296 = landingpad { ptr, i32 }
          cleanup
  br label %320

297:                                              ; preds = %220
  %298 = landingpad { ptr, i32 }
          cleanup
  br label %319

299:                                              ; preds = %221
  %300 = landingpad { ptr, i32 }
          cleanup
  br label %318

301:                                              ; preds = %222
  %302 = landingpad { ptr, i32 }
          cleanup
  br label %317

303:                                              ; preds = %223
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %316

305:                                              ; preds = %224
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %315

307:                                              ; preds = %225
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %314

309:                                              ; preds = %226
  %310 = landingpad { ptr, i32 }
          cleanup
  br label %313

311:                                              ; preds = %227
  %312 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %56) #8
  br label %313

313:                                              ; preds = %311, %309
  %.pn130 = phi { ptr, i32 } [ %312, %311 ], [ %310, %309 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #8
  br label %314

314:                                              ; preds = %313, %307
  %.pn130.pn = phi { ptr, i32 } [ %.pn130, %313 ], [ %308, %307 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #8
  br label %315

315:                                              ; preds = %314, %305
  %.pn130.pn.pn = phi { ptr, i32 } [ %.pn130.pn, %314 ], [ %306, %305 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #8
  br label %316

316:                                              ; preds = %315, %303
  %.pn130.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn, %315 ], [ %304, %303 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #8
  br label %317

317:                                              ; preds = %316, %301
  %.pn130.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn, %316 ], [ %302, %301 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %63) #8
  br label %318

318:                                              ; preds = %317, %299
  %.pn130.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn, %317 ], [ %300, %299 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %61) #8
  br label %319

319:                                              ; preds = %318, %297
  %.pn130.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn, %318 ], [ %298, %297 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %59) #8
  br label %320

320:                                              ; preds = %319, %295
  %.pn130.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn, %319 ], [ %296, %295 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %57) #8
  br label %321

321:                                              ; preds = %320, %293
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn, %320 ], [ %294, %293 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #8
  br label %322

322:                                              ; preds = %321, %291
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn, %321 ], [ %292, %291 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %54) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #8
  br label %324

323:                                              ; preds = %216, %228
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %46) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %43) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %40) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %28) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  ret void

324:                                              ; preds = %322, %290, %284
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn, %322 ], [ %.pn128, %290 ], [ %285, %284 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %49) #8
  br label %325

325:                                              ; preds = %324, %282
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %324 ], [ %283, %282 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %49) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #8
  br label %326

326:                                              ; preds = %325, %280
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %325 ], [ %281, %280 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %46) #8
  br label %327

327:                                              ; preds = %326, %278
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %326 ], [ %279, %278 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #8
  br label %328

328:                                              ; preds = %327, %276
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %327 ], [ %277, %276 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %43) #8
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #8
  br label %329

329:                                              ; preds = %328, %274
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %328 ], [ %275, %274 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %40) #8
  br label %330

330:                                              ; preds = %329, %273
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %329 ], [ %.pn124.pn.pn, %273 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #8
  br label %331

331:                                              ; preds = %330, %261
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %330 ], [ %262, %261 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #8
  br label %332

332:                                              ; preds = %259, %331, %258
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn122, %258 ], [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %331 ], [ %260, %259 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  br label %333

333:                                              ; preds = %332, %253
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %332 ], [ %.pn120, %253 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %28) #8
  br label %334

334:                                              ; preds = %333, %248
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %333 ], [ %.pn118, %248 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %28) #8
  br label %335

335:                                              ; preds = %334, %242
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %334 ], [ %243, %242 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  br label %336

336:                                              ; preds = %241, %335, %236
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn, %236 ], [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %335 ], [ %.pn116, %241 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #8
  br label %337

337:                                              ; preds = %336, %230
  %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %336 ], [ %231, %230 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  resume { ptr, i32 } %.pn130.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZNK3sim10Coordinate4getXEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1

; Function Attrs: nounwind
declare void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6

declare void @_ZNK3sim10Coordinate4getYEv(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1

declare void @_ZN3sim9CartesianC1ERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #1

declare void @_ZNK3sim9CartesianmiERKNS_10CoordinateE(ptr dead_on_unwind writable sret(%"class.sim::Cartesian") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1

; Function Attrs: nounwind
declare void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #6

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

declare void @_ZNK3sim7DegreesmiERKNS_5AngleE(ptr dead_on_unwind writable sret(%"class.sim::Degrees") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

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

declare noundef double @_ZNK3sim5Angle19getRadiansZeroTo2piEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

; Function Attrs: nounwind
declare void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIfSaIfEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}


; Effective O3 passes: DSEPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,MemCpyOptPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass