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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%class.Matrix = type { ptr, ptr, i32, i32 }
%class.Corner = type { i32, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, i32, i32, float, i32, i32 }
%class.CornerDescriptor = type <{ %class.Corner, ptr, i32, float, i64, i32, [4 x i8] }>

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8), float noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16CornerDescriptor13writeCommonWAERSt14basic_ofstreamIcSt11char_traitsIcEE(ptr noundef nonnull align 8 dereferenceable(116) %0, ptr noundef nonnull align 8 dereferenceable(248) %1) #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %class.Matrix, align 8
  %6 = alloca %class.Matrix, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %class.Matrix, align 8
  %10 = alloca %class.Matrix, align 8
  %11 = alloca %class.Matrix, align 8
  %12 = alloca %class.Matrix, align 8
  %13 = alloca %class.Matrix, align 8
  %14 = alloca %class.Matrix, align 8
  %15 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %16 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %5) #6
  call void @_ZN6MatrixC1Eiid(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 2, i32 noundef 2, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 24, ptr %6) #6
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %17 unwind label %120

17:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #6
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9)
          to label %18 unwind label %124

18:                                               ; preds = %17
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #6
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %19 unwind label %128

19:                                               ; preds = %18
  %20 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 9
  %21 = load float, ptr %20, align 4, !tbaa !9
  %22 = fpext float %21 to double
  %23 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1, i32 noundef 1)
          to label %24 unwind label %132

24:                                               ; preds = %19
  store double %22, ptr %23, align 8, !tbaa !13
  %25 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 10
  %26 = load float, ptr %25, align 8, !tbaa !15
  %27 = fpext float %26 to double
  %28 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1, i32 noundef 2)
          to label %29 unwind label %132

29:                                               ; preds = %24
  store double %27, ptr %28, align 8, !tbaa !13
  %30 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 11
  %31 = load float, ptr %30, align 4, !tbaa !16
  %32 = fpext float %31 to double
  %33 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 2, i32 noundef 1)
          to label %34 unwind label %132

34:                                               ; preds = %29
  store double %32, ptr %33, align 8, !tbaa !13
  %35 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 12
  %36 = load float, ptr %35, align 8, !tbaa !17
  %37 = fpext float %36 to double
  %38 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 2, i32 noundef 2)
          to label %39 unwind label %132

39:                                               ; preds = %34
  store double %37, ptr %38, align 8, !tbaa !13
  invoke void @_ZNK6Matrix3svdERS_S0_S0_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %40 unwind label %132

40:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #6
  %41 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 14
  %42 = load float, ptr %41, align 8, !tbaa !18
  %43 = fpext float %42 to double
  invoke void @_ZNK6MatrixmlEd(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %11, ptr noundef nonnull align 8 dereferenceable(24) %6, double noundef %43)
          to label %44 unwind label %136

44:                                               ; preds = %40
  %45 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %46 unwind label %140

46:                                               ; preds = %44
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #6
  %47 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %6, i32 noundef 1, i32 noundef 1)
          to label %48 unwind label %132

48:                                               ; preds = %46
  %49 = load double, ptr %47, align 8, !tbaa !13
  %50 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %6, i32 noundef 1, i32 noundef 1)
          to label %51 unwind label %132

51:                                               ; preds = %48
  %52 = load double, ptr %50, align 8, !tbaa !13
  %53 = fmul double %49, %52
  %54 = fdiv double 1.000000e+00, %53
  %55 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %6, i32 noundef 1, i32 noundef 1)
          to label %56 unwind label %132

56:                                               ; preds = %51
  store double %54, ptr %55, align 8, !tbaa !13
  %57 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %6, i32 noundef 2, i32 noundef 2)
          to label %58 unwind label %132

58:                                               ; preds = %56
  %59 = load double, ptr %57, align 8, !tbaa !13
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %6, i32 noundef 2, i32 noundef 2)
          to label %61 unwind label %132

61:                                               ; preds = %58
  %62 = load double, ptr %60, align 8, !tbaa !13
  %63 = fmul double %59, %62
  %64 = fdiv double 1.000000e+00, %63
  %65 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %6, i32 noundef 2, i32 noundef 2)
          to label %66 unwind label %132

66:                                               ; preds = %61
  store double %64, ptr %65, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #6
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %13, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %67 unwind label %145

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

68:                                               ; preds = %67
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind writable sret(%class.Matrix) align 8 %12, ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %69 unwind label %153

69:                                               ; preds = %68
  %70 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %71 unwind label %157

71:                                               ; preds = %69
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #6
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 1
  %74 = load float, ptr %73, align 4, !tbaa !19
  %75 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %72, float noundef %74)
          to label %76 unwind label %132

76:                                               ; preds = %71
  %77 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef @.str)
          to label %78 unwind label %132

78:                                               ; preds = %76
  %79 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 2
  %80 = load float, ptr %79, align 8, !tbaa !20
  %81 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %77, float noundef %80)
          to label %82 unwind label %132

82:                                               ; preds = %78
  %83 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %81, ptr noundef @.str)
          to label %84 unwind label %132

84:                                               ; preds = %82
  %85 = getelementptr inbounds %class.Corner, ptr %16, i32 0, i32 19
  %86 = load float, ptr %85, align 4, !tbaa !21
  %87 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %83, float noundef %86)
          to label %88 unwind label %132

88:                                               ; preds = %84
  %89 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef @.str)
          to label %90 unwind label %132

90:                                               ; preds = %88
  %91 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1, i32 noundef 1)
          to label %92 unwind label %132

92:                                               ; preds = %90
  %93 = load double, ptr %91, align 8, !tbaa !13
  %94 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %89, double noundef %93)
          to label %95 unwind label %132

95:                                               ; preds = %92
  %96 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef @.str)
          to label %97 unwind label %132

97:                                               ; preds = %95
  %98 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1, i32 noundef 2)
          to label %99 unwind label %132

99:                                               ; preds = %97
  %100 = load double, ptr %98, align 8, !tbaa !13
  %101 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %96, double noundef %100)
          to label %102 unwind label %132

102:                                              ; preds = %99
  %103 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef @.str)
          to label %104 unwind label %132

104:                                              ; preds = %102
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 2, i32 noundef 2)
          to label %106 unwind label %132

106:                                              ; preds = %104
  %107 = load double, ptr %105, align 8, !tbaa !13
  %108 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %103, double noundef %107)
          to label %109 unwind label %132

109:                                              ; preds = %106
  %110 = getelementptr inbounds %class.CornerDescriptor, ptr %16, i32 0, i32 2
  %111 = load i32, ptr %110, align 8, !tbaa !22
  %112 = icmp sgt i32 %111, 0
  br i1 %112, label %113, label %184

113:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 0, ptr %15, align 4, !tbaa !25
  br label %114

114:                                              ; preds = %176, %113
  %115 = load i32, ptr %15, align 4, !tbaa !25
  %116 = getelementptr inbounds %class.CornerDescriptor, ptr %16, i32 0, i32 2
  %117 = load i32, ptr %116, align 8, !tbaa !22
  %118 = icmp slt i32 %115, %117
  br i1 %118, label %164, label %119

119:                                              ; preds = %114
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %183

120:                                              ; preds = %2
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %7, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %8, align 4
  br label %191

124:                                              ; preds = %17
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %7, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %8, align 4
  br label %190

128:                                              ; preds = %18
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %7, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %8, align 4
  br label %189

132:                                              ; preds = %184, %106, %104, %102, %99, %97, %95, %92, %90, %88, %84, %82, %78, %76, %71, %61, %58, %56, %51, %48, %46, %39, %34, %29, %24, %19
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %7, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %8, align 4
  br label %188

136:                                              ; preds = %40
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %7, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %8, align 4
  br label %144

140:                                              ; preds = %44
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %7, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %8, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  br label %144

144:                                              ; preds = %140, %136
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #6
  br label %188

145:                                              ; preds = %66
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %7, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %8, align 4
  br label %163

149:                                              ; preds = %67
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %7, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %8, align 4
  br label %162

153:                                              ; preds = %68
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %7, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %8, align 4
  br label %161

157:                                              ; preds = %69
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %7, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %8, align 4
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #6
  br label %161

161:                                              ; preds = %157, %153
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  br label %162

162:                                              ; preds = %161, %149
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  br label %163

163:                                              ; preds = %162, %145
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #6
  br label %188

164:                                              ; preds = %114
  %165 = load ptr, ptr %4, align 8, !tbaa !5
  %166 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %165, ptr noundef @.str)
          to label %167 unwind label %179

167:                                              ; preds = %164
  %168 = getelementptr inbounds %class.CornerDescriptor, ptr %16, i32 0, i32 1
  %169 = load ptr, ptr %168, align 8, !tbaa !26
  %170 = load i32, ptr %15, align 4, !tbaa !25
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds float, ptr %169, i64 %171
  %173 = load float, ptr %172, align 4, !tbaa !27
  %174 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %166, float noundef %173)
          to label %175 unwind label %179

175:                                              ; preds = %167
  br label %176

176:                                              ; preds = %175
  %177 = load i32, ptr %15, align 4, !tbaa !25
  %178 = add nsw i32 %177, 1
  store i32 %178, ptr %15, align 4, !tbaa !25
  br label %114, !llvm.loop !28

179:                                              ; preds = %167, %164
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %7, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %188

183:                                              ; preds = %119
  br label %184

184:                                              ; preds = %183, %109
  %185 = load ptr, ptr %4, align 8, !tbaa !5
  %186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %185, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %187 unwind label %132

187:                                              ; preds = %184
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #6
  ret void

188:                                              ; preds = %179, %163, %144, %132
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  br label %189

189:                                              ; preds = %188, %128
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  br label %190

190:                                              ; preds = %189, %124
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  br label %191

191:                                              ; preds = %190, %120
  call void @llvm.lifetime.end.p0(i64 24, ptr %6) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %5) #6
  br label %192

192:                                              ; preds = %191
  %193 = load ptr, ptr %7, align 8
  %194 = load i32, ptr %8, align 4
  %195 = insertvalue { ptr, i32 } poison, ptr %193, 0
  %196 = insertvalue { ptr, i32 } %195, i32 %194, 1
  resume { ptr, i32 } %196
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 36}
!10 = !{!"_ZTS6Corner", !11, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !11, i64 68, !11, i64 72, !12, i64 76, !11, i64 80, !11, i64 84}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!10, !12, i64 40}
!16 = !{!10, !12, i64 44}
!17 = !{!10, !12, i64 48}
!18 = !{!10, !12, i64 56}
!19 = !{!10, !12, i64 4}
!20 = !{!10, !12, i64 8}
!21 = !{!10, !12, i64 76}
!22 = !{!23, !11, i64 96}
!23 = !{!"_ZTS16CornerDescriptor", !10, i64 0, !6, i64 88, !11, i64 96, !12, i64 100, !24, i64 104, !11, i64 112}
!24 = !{!"long", !7, i64 0}
!25 = !{!11, !11, i64 0}
!26 = !{!23, !6, i64 88}
!27 = !{!12, !12, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}


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

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

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8), float noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16CornerDescriptor13writeCommonWAERSt14basic_ofstreamIcSt11char_traitsIcEE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(116) %0, ptr noundef nonnull align 8 dereferenceable(248) %1) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %class.Matrix, align 8
  %4 = alloca %class.Matrix, align 8
  %5 = alloca %class.Matrix, align 8
  %6 = alloca %class.Matrix, align 8
  %7 = alloca %class.Matrix, align 8
  %8 = alloca %class.Matrix, align 8
  %9 = alloca %class.Matrix, align 8
  %10 = alloca %class.Matrix, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #6
  call void @_ZN6MatrixC1Eiid(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 2, i32 noundef 2, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #6
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %11 unwind label %94

11:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #6
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %12 unwind label %96

12:                                               ; preds = %11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #6
  invoke void @_ZN6MatrixC1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %13 unwind label %98

13:                                               ; preds = %12
  %14 = getelementptr inbounds i8, ptr %0, i64 36
  %15 = load float, ptr %14, align 4, !tbaa !5
  %16 = fpext float %15 to double
  %17 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1, i32 noundef 1)
  store double %16, ptr %17, align 8, !tbaa !11
  %18 = getelementptr inbounds i8, ptr %0, i64 40
  %19 = load float, ptr %18, align 8, !tbaa !13
  %20 = fpext float %19 to double
  %21 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1, i32 noundef 2)
  store double %20, ptr %21, align 8, !tbaa !11
  %22 = getelementptr inbounds i8, ptr %0, i64 44
  %23 = load float, ptr %22, align 4, !tbaa !14
  %24 = fpext float %23 to double
  %25 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 2, i32 noundef 1)
  store double %24, ptr %25, align 8, !tbaa !11
  %26 = getelementptr inbounds i8, ptr %0, i64 48
  %27 = load float, ptr %26, align 8, !tbaa !15
  %28 = fpext float %27 to double
  %29 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 2, i32 noundef 2)
  store double %28, ptr %29, align 8, !tbaa !11
  invoke void @_ZNK6Matrix3svdERS_S0_S0_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %30 unwind label %100

30:                                               ; preds = %13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #6
  %31 = getelementptr inbounds i8, ptr %0, i64 56
  %32 = load float, ptr %31, align 8, !tbaa !16
  %33 = fpext float %32 to double
  invoke void @_ZNK6MatrixmlEd(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %7, ptr noundef nonnull align 8 dereferenceable(24) %4, double noundef %33)
          to label %34 unwind label %102

34:                                               ; preds = %30
  %35 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %36 unwind label %104

36:                                               ; preds = %34
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #6
  %37 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 1, i32 noundef 1)
  %38 = load double, ptr %37, align 8, !tbaa !11
  %39 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 1, i32 noundef 1)
  %40 = load double, ptr %39, align 8, !tbaa !11
  %41 = fmul double %38, %40
  %42 = fdiv double 1.000000e+00, %41
  %43 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 1, i32 noundef 1)
  store double %42, ptr %43, align 8, !tbaa !11
  %44 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 2, i32 noundef 2)
  %45 = load double, ptr %44, align 8, !tbaa !11
  %46 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 2, i32 noundef 2)
  %47 = load double, ptr %46, align 8, !tbaa !11
  %48 = fmul double %45, %47
  %49 = fdiv double 1.000000e+00, %48
  %50 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %4, i32 noundef 2, i32 noundef 2)
  store double %49, ptr %50, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #6
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %9, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %51 unwind label %107

51:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #6
  invoke void @_ZNK6Matrix9transposeEv(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %10, ptr noundef nonnull align 8 dereferenceable(24) %6)
          to label %52 unwind label %109

52:                                               ; preds = %51
  invoke void @_ZNK6MatrixmlERKS_(ptr dead_on_unwind nonnull writable sret(%class.Matrix) align 8 %8, ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %10)
          to label %53 unwind label %111

53:                                               ; preds = %52
  %54 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN6MatrixaSERKS_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %55 unwind label %113

55:                                               ; preds = %53
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  %56 = getelementptr inbounds i8, ptr %0, i64 4
  %57 = load float, ptr %56, align 4, !tbaa !17
  %58 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %1, float noundef %57)
          to label %59 unwind label %100

59:                                               ; preds = %55
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull @.str)
          to label %61 unwind label %100

61:                                               ; preds = %59
  %62 = getelementptr inbounds i8, ptr %0, i64 8
  %63 = load float, ptr %62, align 8, !tbaa !18
  %64 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %60, float noundef %63)
          to label %65 unwind label %100

65:                                               ; preds = %61
  %66 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull @.str)
          to label %67 unwind label %100

67:                                               ; preds = %65
  %68 = getelementptr inbounds i8, ptr %0, i64 76
  %69 = load float, ptr %68, align 4, !tbaa !19
  %70 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %66, float noundef %69)
          to label %71 unwind label %100

71:                                               ; preds = %67
  %72 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull @.str)
          to label %73 unwind label %100

73:                                               ; preds = %71
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1, i32 noundef 1)
  %75 = load double, ptr %74, align 8, !tbaa !11
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %72, double noundef %75)
          to label %77 unwind label %100

77:                                               ; preds = %73
  %78 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull @.str)
          to label %79 unwind label %100

79:                                               ; preds = %77
  %80 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 1, i32 noundef 2)
  %81 = load double, ptr %80, align 8, !tbaa !11
  %82 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %78, double noundef %81)
          to label %83 unwind label %100

83:                                               ; preds = %79
  %84 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %82, ptr noundef nonnull @.str)
          to label %85 unwind label %100

85:                                               ; preds = %83
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6MatrixclEii(ptr noundef nonnull align 8 dereferenceable(24) %3, i32 noundef 2, i32 noundef 2)
  %87 = load double, ptr %86, align 8, !tbaa !11
  %88 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %84, double noundef %87)
          to label %89 unwind label %100

89:                                               ; preds = %85
  %90 = getelementptr inbounds i8, ptr %0, i64 96
  %91 = load i32, ptr %90, align 8
  %92 = icmp sgt i32 %91, 0
  br i1 %92, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %89
  %93 = getelementptr inbounds i8, ptr %0, i64 88
  br label %118

94:                                               ; preds = %2
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %136

96:                                               ; preds = %11
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %135

98:                                               ; preds = %12
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %134

100:                                              ; preds = %.loopexit, %85, %83, %79, %77, %73, %71, %67, %65, %61, %59, %55, %13
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %133

102:                                              ; preds = %30
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %106

104:                                              ; preds = %34
  %105 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #6
  br label %106

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

107:                                              ; preds = %36
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %117

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

111:                                              ; preds = %52
  %112 = landingpad { ptr, i32 }
          cleanup
  br label %115

113:                                              ; preds = %53
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  br label %115

115:                                              ; preds = %113, %111
  %.pn18 = phi { ptr, i32 } [ %114, %113 ], [ %112, %111 ]
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  br label %116

116:                                              ; preds = %115, %109
  %.pn18.pn = phi { ptr, i32 } [ %.pn18, %115 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #6
  br label %117

117:                                              ; preds = %116, %107
  %.pn18.pn.pn = phi { ptr, i32 } [ %.pn18.pn, %116 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  br label %133

118:                                              ; preds = %.lr.ph, %125
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %125 ]
  %119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @.str)
          to label %120 unwind label %129

120:                                              ; preds = %118
  %121 = load ptr, ptr %93, align 8, !tbaa !20
  %122 = getelementptr inbounds float, ptr %121, i64 %indvars.iv
  %123 = load float, ptr %122, align 4, !tbaa !24
  %124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %119, float noundef %123)
          to label %125 unwind label %129

125:                                              ; preds = %120
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %126 = load i32, ptr %90, align 8, !tbaa !25
  %127 = sext i32 %126 to i64
  %128 = icmp slt i64 %indvars.iv.next, %127
  br i1 %128, label %118, label %.loopexit, !llvm.loop !26

129:                                              ; preds = %120, %118
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %133

.loopexit:                                        ; preds = %125, %89
  %131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %132 unwind label %100

132:                                              ; preds = %.loopexit
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  ret void

133:                                              ; preds = %129, %117, %106, %100
  %.pn22 = phi { ptr, i32 } [ %130, %129 ], [ %101, %100 ], [ %.pn18.pn.pn, %117 ], [ %.pn, %106 ]
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #6
  br label %134

134:                                              ; preds = %133, %98
  %.pn22.pn = phi { ptr, i32 } [ %.pn22, %133 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #6
  br label %135

135:                                              ; preds = %134, %96
  %.pn22.pn.pn = phi { ptr, i32 } [ %.pn22.pn, %134 ], [ %97, %96 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #6
  br label %136

136:                                              ; preds = %135, %94
  %.pn22.pn.pn.pn = phi { ptr, i32 } [ %.pn22.pn.pn, %135 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #6
  call void @_ZN6MatrixD1Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn22.pn.pn.pn
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 36}
!6 = !{!"_ZTS6Corner", !7, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !7, i64 68, !7, i64 72, !10, i64 76, !7, i64 80, !7, i64 84}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !8, i64 0}
!13 = !{!6, !10, i64 40}
!14 = !{!6, !10, i64 44}
!15 = !{!6, !10, i64 48}
!16 = !{!6, !10, i64 56}
!17 = !{!6, !10, i64 4}
!18 = !{!6, !10, i64 8}
!19 = !{!6, !10, i64 76}
!20 = !{!21, !22, i64 88}
!21 = !{!"_ZTS16CornerDescriptor", !6, i64 0, !22, i64 88, !7, i64 96, !10, i64 100, !23, i64 104, !7, i64 112}
!22 = !{!"any pointer", !8, i64 0}
!23 = !{!"long", !8, i64 0}
!24 = !{!10, !10, i64 0}
!25 = !{!21, !7, i64 96}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}


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