; LLVM IR from ERGO-Code/HiGHS :: src/util/HighsLinearSumBounds.ll (ZN20HighsLinearSumBounds15updatedVarLowerEiidd)

; 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.HighsLinearSumBounds = type { %"class.std::vector", %"class.std::vector", %"class.std::vector.3", %"class.std::vector.3", %"class.std::vector", %"class.std::vector", %"class.std::vector.3", %"class.std::vector.3", ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HighsCDouble, std::allocator<HighsCDouble>>::_Vector_impl" }
%"struct.std::_Vector_base<HighsCDouble, std::allocator<HighsCDouble>>::_Vector_impl" = type { %"struct.std::_Vector_base<HighsCDouble, std::allocator<HighsCDouble>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HighsCDouble, std::allocator<HighsCDouble>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN20HighsLinearSumBounds15updatedVarLowerEiidd(ptr noundef nonnull align 8 dereferenceable(240) %0, i32 noundef %1, i32 noundef %2, double noundef %3, double noundef %4) #3 align 2 {
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store i32 %2, ptr %8, align 4, !tbaa !9
  store double %3, ptr %9, align 8, !tbaa !11
  store double %4, ptr %10, align 8, !tbaa !11
  %13 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %14 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 12
  %15 = load ptr, ptr %14, align 8, !tbaa !13
  %16 = load i32, ptr %8, align 4, !tbaa !9
  %17 = sext i32 %16 to i64
  %18 = getelementptr inbounds i32, ptr %15, i64 %17
  %19 = load i32, ptr %18, align 4, !tbaa !9
  %20 = load i32, ptr %7, align 4, !tbaa !9
  %21 = icmp eq i32 %19, %20
  br i1 %21, label %22, label %24

22:                                               ; preds = %5
  %23 = load double, ptr %10, align 8, !tbaa !11
  br label %32

24:                                               ; preds = %5
  %25 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 10
  %26 = load ptr, ptr %25, align 8, !tbaa !23
  %27 = load i32, ptr %8, align 4, !tbaa !9
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds double, ptr %26, i64 %28
  %30 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %10)
  %31 = load double, ptr %30, align 8, !tbaa !11
  br label %32

32:                                               ; preds = %24, %22
  %33 = phi double [ %23, %22 ], [ %31, %24 ]
  store double %33, ptr %11, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %34 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 12
  %35 = load ptr, ptr %34, align 8, !tbaa !13
  %36 = load i32, ptr %8, align 4, !tbaa !9
  %37 = sext i32 %36 to i64
  %38 = getelementptr inbounds i32, ptr %35, i64 %37
  %39 = load i32, ptr %38, align 4, !tbaa !9
  %40 = load i32, ptr %7, align 4, !tbaa !9
  %41 = icmp eq i32 %39, %40
  br i1 %41, label %42, label %49

42:                                               ; preds = %32
  %43 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 8
  %44 = load ptr, ptr %43, align 8, !tbaa !24
  %45 = load i32, ptr %8, align 4, !tbaa !9
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds double, ptr %44, i64 %46
  %48 = load double, ptr %47, align 8, !tbaa !11
  br label %62

49:                                               ; preds = %32
  %50 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 10
  %51 = load ptr, ptr %50, align 8, !tbaa !23
  %52 = load i32, ptr %8, align 4, !tbaa !9
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds double, ptr %51, i64 %53
  %55 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 8
  %56 = load ptr, ptr %55, align 8, !tbaa !24
  %57 = load i32, ptr %8, align 4, !tbaa !9
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds double, ptr %56, i64 %58
  %60 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %59)
  %61 = load double, ptr %60, align 8, !tbaa !11
  br label %62

62:                                               ; preds = %49, %42
  %63 = phi double [ %48, %42 ], [ %61, %49 ]
  store double %63, ptr %12, align 8, !tbaa !11
  %64 = load double, ptr %9, align 8, !tbaa !11
  %65 = fcmp ogt double %64, 0.000000e+00
  br i1 %65, label %66, label %158

66:                                               ; preds = %62
  %67 = load double, ptr %12, align 8, !tbaa !11
  %68 = load double, ptr %11, align 8, !tbaa !11
  %69 = fcmp une double %67, %68
  br i1 %69, label %70, label %109

70:                                               ; preds = %66
  %71 = load double, ptr %11, align 8, !tbaa !11
  %72 = fcmp oeq double %71, 0xFFF0000000000000
  br i1 %72, label %73, label %80

73:                                               ; preds = %70
  %74 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 6
  %75 = load i32, ptr %7, align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  %77 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %74, i64 noundef %76) #4
  %78 = load i32, ptr %77, align 4, !tbaa !9
  %79 = sub nsw i32 %78, 1
  store i32 %79, ptr %77, align 4, !tbaa !9
  br label %89

80:                                               ; preds = %70
  %81 = load double, ptr %11, align 8, !tbaa !11
  %82 = load double, ptr %9, align 8, !tbaa !11
  %83 = fmul double %81, %82
  %84 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 4
  %85 = load i32, ptr %7, align 4, !tbaa !9
  %86 = sext i32 %85 to i64
  %87 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %86) #4
  %88 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %87, double noundef %83)
  br label %89

89:                                               ; preds = %80, %73
  %90 = load double, ptr %12, align 8, !tbaa !11
  %91 = fcmp oeq double %90, 0xFFF0000000000000
  br i1 %91, label %92, label %99

92:                                               ; preds = %89
  %93 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 6
  %94 = load i32, ptr %7, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %93, i64 noundef %95) #4
  %97 = load i32, ptr %96, align 4, !tbaa !9
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %96, align 4, !tbaa !9
  br label %108

99:                                               ; preds = %89
  %100 = load double, ptr %12, align 8, !tbaa !11
  %101 = load double, ptr %9, align 8, !tbaa !11
  %102 = fmul double %100, %101
  %103 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 4
  %104 = load i32, ptr %7, align 4, !tbaa !9
  %105 = sext i32 %104 to i64
  %106 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %103, i64 noundef %105) #4
  %107 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %106, double noundef %102)
  br label %108

108:                                              ; preds = %99, %92
  br label %109

109:                                              ; preds = %108, %66
  %110 = load double, ptr %10, align 8, !tbaa !11
  %111 = fcmp oeq double %110, 0xFFF0000000000000
  br i1 %111, label %112, label %119

112:                                              ; preds = %109
  %113 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 2
  %114 = load i32, ptr %7, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef %115) #4
  %117 = load i32, ptr %116, align 4, !tbaa !9
  %118 = sub nsw i32 %117, 1
  store i32 %118, ptr %116, align 4, !tbaa !9
  br label %128

119:                                              ; preds = %109
  %120 = load double, ptr %10, align 8, !tbaa !11
  %121 = load double, ptr %9, align 8, !tbaa !11
  %122 = fmul double %120, %121
  %123 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 0
  %124 = load i32, ptr %7, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %123, i64 noundef %125) #4
  %127 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %126, double noundef %122)
  br label %128

128:                                              ; preds = %119, %112
  %129 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 8
  %130 = load ptr, ptr %129, align 8, !tbaa !24
  %131 = load i32, ptr %8, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds double, ptr %130, i64 %132
  %134 = load double, ptr %133, align 8, !tbaa !11
  %135 = fcmp oeq double %134, 0xFFF0000000000000
  br i1 %135, label %136, label %143

136:                                              ; preds = %128
  %137 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 2
  %138 = load i32, ptr %7, align 4, !tbaa !9
  %139 = sext i32 %138 to i64
  %140 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %137, i64 noundef %139) #4
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %140, align 4, !tbaa !9
  br label %157

143:                                              ; preds = %128
  %144 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 8
  %145 = load ptr, ptr %144, align 8, !tbaa !24
  %146 = load i32, ptr %8, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds double, ptr %145, i64 %147
  %149 = load double, ptr %148, align 8, !tbaa !11
  %150 = load double, ptr %9, align 8, !tbaa !11
  %151 = fmul double %149, %150
  %152 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 0
  %153 = load i32, ptr %7, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %154) #4
  %156 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %155, double noundef %151)
  br label %157

157:                                              ; preds = %143, %136
  br label %250

158:                                              ; preds = %62
  %159 = load double, ptr %12, align 8, !tbaa !11
  %160 = load double, ptr %11, align 8, !tbaa !11
  %161 = fcmp une double %159, %160
  br i1 %161, label %162, label %201

162:                                              ; preds = %158
  %163 = load double, ptr %11, align 8, !tbaa !11
  %164 = fcmp oeq double %163, 0xFFF0000000000000
  br i1 %164, label %165, label %172

165:                                              ; preds = %162
  %166 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 7
  %167 = load i32, ptr %7, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  %169 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %166, i64 noundef %168) #4
  %170 = load i32, ptr %169, align 4, !tbaa !9
  %171 = sub nsw i32 %170, 1
  store i32 %171, ptr %169, align 4, !tbaa !9
  br label %181

172:                                              ; preds = %162
  %173 = load double, ptr %11, align 8, !tbaa !11
  %174 = load double, ptr %9, align 8, !tbaa !11
  %175 = fmul double %173, %174
  %176 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 5
  %177 = load i32, ptr %7, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %176, i64 noundef %178) #4
  %180 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %179, double noundef %175)
  br label %181

181:                                              ; preds = %172, %165
  %182 = load double, ptr %12, align 8, !tbaa !11
  %183 = fcmp oeq double %182, 0xFFF0000000000000
  br i1 %183, label %184, label %191

184:                                              ; preds = %181
  %185 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 7
  %186 = load i32, ptr %7, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  %188 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %185, i64 noundef %187) #4
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %188, align 4, !tbaa !9
  br label %200

191:                                              ; preds = %181
  %192 = load double, ptr %12, align 8, !tbaa !11
  %193 = load double, ptr %9, align 8, !tbaa !11
  %194 = fmul double %192, %193
  %195 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 5
  %196 = load i32, ptr %7, align 4, !tbaa !9
  %197 = sext i32 %196 to i64
  %198 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %195, i64 noundef %197) #4
  %199 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %198, double noundef %194)
  br label %200

200:                                              ; preds = %191, %184
  br label %201

201:                                              ; preds = %200, %158
  %202 = load double, ptr %10, align 8, !tbaa !11
  %203 = fcmp oeq double %202, 0xFFF0000000000000
  br i1 %203, label %204, label %211

204:                                              ; preds = %201
  %205 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 3
  %206 = load i32, ptr %7, align 4, !tbaa !9
  %207 = sext i32 %206 to i64
  %208 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %205, i64 noundef %207) #4
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = sub nsw i32 %209, 1
  store i32 %210, ptr %208, align 4, !tbaa !9
  br label %220

211:                                              ; preds = %201
  %212 = load double, ptr %10, align 8, !tbaa !11
  %213 = load double, ptr %9, align 8, !tbaa !11
  %214 = fmul double %212, %213
  %215 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 1
  %216 = load i32, ptr %7, align 4, !tbaa !9
  %217 = sext i32 %216 to i64
  %218 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %215, i64 noundef %217) #4
  %219 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %218, double noundef %214)
  br label %220

220:                                              ; preds = %211, %204
  %221 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 8
  %222 = load ptr, ptr %221, align 8, !tbaa !24
  %223 = load i32, ptr %8, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %222, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !11
  %227 = fcmp oeq double %226, 0xFFF0000000000000
  br i1 %227, label %228, label %235

228:                                              ; preds = %220
  %229 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 3
  %230 = load i32, ptr %7, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %229, i64 noundef %231) #4
  %233 = load i32, ptr %232, align 4, !tbaa !9
  %234 = add nsw i32 %233, 1
  store i32 %234, ptr %232, align 4, !tbaa !9
  br label %249

235:                                              ; preds = %220
  %236 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 8
  %237 = load ptr, ptr %236, align 8, !tbaa !24
  %238 = load i32, ptr %8, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds double, ptr %237, i64 %239
  %241 = load double, ptr %240, align 8, !tbaa !11
  %242 = load double, ptr %9, align 8, !tbaa !11
  %243 = fmul double %241, %242
  %244 = getelementptr inbounds %class.HighsLinearSumBounds, ptr %13, i32 0, i32 1
  %245 = load i32, ptr %7, align 4, !tbaa !9
  %246 = sext i32 %245 to i64
  %247 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %244, i64 noundef %246) #4
  %248 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %247, double noundef %243)
  br label %249

249:                                              ; preds = %235, %228
  br label %250

250:                                              ; preds = %249, %157
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !6, i64 224}
!14 = !{!"_ZTS20HighsLinearSumBounds", !15, i64 0, !15, i64 24, !19, i64 48, !19, i64 72, !15, i64 96, !15, i64 120, !19, i64 144, !19, i64 168, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232}
!15 = !{!"_ZTSSt6vectorI12HighsCDoubleSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI12HighsCDoubleSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI12HighsCDoubleSaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI12HighsCDoubleSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTSSt6vectorIiSaIiEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!14, !6, i64 208}
!24 = !{!14, !6, i64 192}


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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN20HighsLinearSumBounds15updatedVarLowerEiidd(ptr noundef nonnull align 8 dereferenceable(240) %0, i32 noundef %1, i32 noundef %2, double noundef %3, double noundef %4) local_unnamed_addr #2 align 2 {
  %6 = alloca double, align 8
  store double %4, ptr %6, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 224
  %8 = load ptr, ptr %7, align 8, !tbaa !9
  %9 = sext i32 %2 to i64
  %10 = getelementptr inbounds i32, ptr %8, i64 %9
  %11 = load i32, ptr %10, align 4, !tbaa !20
  %12 = icmp eq i32 %11, %1
  br i1 %12, label %.thread, label %13

13:                                               ; preds = %5
  %14 = getelementptr inbounds i8, ptr %0, i64 208
  %15 = load ptr, ptr %14, align 8, !tbaa !22
  %16 = getelementptr inbounds double, ptr %15, i64 %9
  %17 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %6)
  %18 = load double, ptr %17, align 8, !tbaa !5
  %.pre = load ptr, ptr %7, align 8, !tbaa !9
  %.phi.trans.insert = getelementptr inbounds i32, ptr %.pre, i64 %9
  %.pre56 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !20
  %19 = icmp eq i32 %.pre56, %1
  br i1 %19, label %.thread, label %24

.thread:                                          ; preds = %5, %13
  %20 = phi double [ %18, %13 ], [ %4, %5 ]
  %21 = getelementptr inbounds i8, ptr %0, i64 192
  %22 = load ptr, ptr %21, align 8, !tbaa !23
  %23 = getelementptr inbounds double, ptr %22, i64 %9
  br label %32

24:                                               ; preds = %13
  %25 = getelementptr inbounds i8, ptr %0, i64 208
  %26 = load ptr, ptr %25, align 8, !tbaa !22
  %27 = getelementptr inbounds double, ptr %26, i64 %9
  %28 = getelementptr inbounds i8, ptr %0, i64 192
  %29 = load ptr, ptr %28, align 8, !tbaa !23
  %30 = getelementptr inbounds double, ptr %29, i64 %9
  %31 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %30)
  br label %32

32:                                               ; preds = %24, %.thread
  %33 = phi double [ %20, %.thread ], [ %18, %24 ]
  %.in = phi ptr [ %23, %.thread ], [ %31, %24 ]
  %34 = load double, ptr %.in, align 8, !tbaa !5
  %35 = fcmp ogt double %3, 0.000000e+00
  %36 = fcmp une double %34, %33
  br i1 %35, label %37, label %95

37:                                               ; preds = %32
  br i1 %36, label %38, label %66

38:                                               ; preds = %37
  %39 = fcmp oeq double %33, 0xFFF0000000000000
  br i1 %39, label %40, label %46

40:                                               ; preds = %38
  %41 = getelementptr inbounds i8, ptr %0, i64 144
  %42 = sext i32 %1 to i64
  %43 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %41, i64 noundef %42) #3
  %44 = load i32, ptr %43, align 4, !tbaa !20
  %45 = add nsw i32 %44, -1
  store i32 %45, ptr %43, align 4, !tbaa !20
  br label %52

46:                                               ; preds = %38
  %47 = fmul double %33, %3
  %48 = getelementptr inbounds i8, ptr %0, i64 96
  %49 = sext i32 %1 to i64
  %50 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %48, i64 noundef %49) #3
  %51 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %50, double noundef %47)
  br label %52

52:                                               ; preds = %46, %40
  %53 = fcmp oeq double %34, 0xFFF0000000000000
  br i1 %53, label %54, label %60

54:                                               ; preds = %52
  %55 = getelementptr inbounds i8, ptr %0, i64 144
  %56 = sext i32 %1 to i64
  %57 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %55, i64 noundef %56) #3
  %58 = load i32, ptr %57, align 4, !tbaa !20
  %59 = add nsw i32 %58, 1
  store i32 %59, ptr %57, align 4, !tbaa !20
  br label %66

60:                                               ; preds = %52
  %61 = fmul double %34, %3
  %62 = getelementptr inbounds i8, ptr %0, i64 96
  %63 = sext i32 %1 to i64
  %64 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %62, i64 noundef %63) #3
  %65 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %64, double noundef %61)
  br label %66

66:                                               ; preds = %54, %60, %37
  %67 = load double, ptr %6, align 8, !tbaa !5
  %68 = fcmp oeq double %67, 0xFFF0000000000000
  %69 = sext i32 %1 to i64
  br i1 %68, label %70, label %75

70:                                               ; preds = %66
  %71 = getelementptr inbounds i8, ptr %0, i64 48
  %72 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %71, i64 noundef %69) #3
  %73 = load i32, ptr %72, align 4, !tbaa !20
  %74 = add nsw i32 %73, -1
  store i32 %74, ptr %72, align 4, !tbaa !20
  br label %79

75:                                               ; preds = %66
  %76 = fmul double %67, %3
  %77 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %69) #3
  %78 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %77, double noundef %76)
  br label %79

79:                                               ; preds = %75, %70
  %80 = getelementptr inbounds i8, ptr %0, i64 192
  %81 = load ptr, ptr %80, align 8, !tbaa !23
  %82 = getelementptr inbounds double, ptr %81, i64 %9
  %83 = load double, ptr %82, align 8, !tbaa !5
  %84 = fcmp oeq double %83, 0xFFF0000000000000
  %85 = sext i32 %1 to i64
  br i1 %84, label %86, label %91

86:                                               ; preds = %79
  %87 = getelementptr inbounds i8, ptr %0, i64 48
  %88 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %87, i64 noundef %85) #3
  %89 = load i32, ptr %88, align 4, !tbaa !20
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr %88, align 4, !tbaa !20
  br label %157

91:                                               ; preds = %79
  %92 = fmul double %83, %3
  %93 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %85) #3
  %94 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %93, double noundef %92)
  br label %157

95:                                               ; preds = %32
  br i1 %36, label %96, label %124

96:                                               ; preds = %95
  %97 = fcmp oeq double %33, 0xFFF0000000000000
  br i1 %97, label %98, label %104

98:                                               ; preds = %96
  %99 = getelementptr inbounds i8, ptr %0, i64 168
  %100 = sext i32 %1 to i64
  %101 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %99, i64 noundef %100) #3
  %102 = load i32, ptr %101, align 4, !tbaa !20
  %103 = add nsw i32 %102, -1
  store i32 %103, ptr %101, align 4, !tbaa !20
  br label %110

104:                                              ; preds = %96
  %105 = fmul double %33, %3
  %106 = getelementptr inbounds i8, ptr %0, i64 120
  %107 = sext i32 %1 to i64
  %108 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %106, i64 noundef %107) #3
  %109 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %108, double noundef %105)
  br label %110

110:                                              ; preds = %104, %98
  %111 = fcmp oeq double %34, 0xFFF0000000000000
  br i1 %111, label %112, label %118

112:                                              ; preds = %110
  %113 = getelementptr inbounds i8, ptr %0, i64 168
  %114 = sext i32 %1 to i64
  %115 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef %114) #3
  %116 = load i32, ptr %115, align 4, !tbaa !20
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %115, align 4, !tbaa !20
  br label %124

118:                                              ; preds = %110
  %119 = fmul double %34, %3
  %120 = getelementptr inbounds i8, ptr %0, i64 120
  %121 = sext i32 %1 to i64
  %122 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %120, i64 noundef %121) #3
  %123 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %122, double noundef %119)
  br label %124

124:                                              ; preds = %112, %118, %95
  %125 = load double, ptr %6, align 8, !tbaa !5
  %126 = fcmp oeq double %125, 0xFFF0000000000000
  br i1 %126, label %127, label %133

127:                                              ; preds = %124
  %128 = getelementptr inbounds i8, ptr %0, i64 72
  %129 = sext i32 %1 to i64
  %130 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %128, i64 noundef %129) #3
  %131 = load i32, ptr %130, align 4, !tbaa !20
  %132 = add nsw i32 %131, -1
  store i32 %132, ptr %130, align 4, !tbaa !20
  br label %139

133:                                              ; preds = %124
  %134 = fmul double %125, %3
  %135 = getelementptr inbounds i8, ptr %0, i64 24
  %136 = sext i32 %1 to i64
  %137 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %135, i64 noundef %136) #3
  %138 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublemIEd(ptr noundef nonnull align 8 dereferenceable(16) %137, double noundef %134)
  br label %139

139:                                              ; preds = %133, %127
  %140 = getelementptr inbounds i8, ptr %0, i64 192
  %141 = load ptr, ptr %140, align 8, !tbaa !23
  %142 = getelementptr inbounds double, ptr %141, i64 %9
  %143 = load double, ptr %142, align 8, !tbaa !5
  %144 = fcmp oeq double %143, 0xFFF0000000000000
  br i1 %144, label %145, label %151

145:                                              ; preds = %139
  %146 = getelementptr inbounds i8, ptr %0, i64 72
  %147 = sext i32 %1 to i64
  %148 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %146, i64 noundef %147) #3
  %149 = load i32, ptr %148, align 4, !tbaa !20
  %150 = add nsw i32 %149, 1
  store i32 %150, ptr %148, align 4, !tbaa !20
  br label %157

151:                                              ; preds = %139
  %152 = fmul double %143, %3
  %153 = getelementptr inbounds i8, ptr %0, i64 24
  %154 = sext i32 %1 to i64
  %155 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI12HighsCDoubleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %153, i64 noundef %154) #3
  %156 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN12HighsCDoublepLEd(ptr noundef nonnull align 8 dereferenceable(16) %155, double noundef %152)
  br label %157

157:                                              ; preds = %145, %151, %86, %91
  ret void
}

attributes #0 = { 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 #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress 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 }

!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, !15, i64 224}
!10 = !{!"_ZTS20HighsLinearSumBounds", !11, i64 0, !11, i64 24, !16, i64 48, !16, i64 72, !11, i64 96, !11, i64 120, !16, i64 144, !16, i64 168, !15, i64 192, !15, i64 200, !15, i64 208, !15, i64 216, !15, i64 224, !15, i64 232}
!11 = !{!"_ZTSSt6vectorI12HighsCDoubleSaIS0_EE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseI12HighsCDoubleSaIS0_EE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseI12HighsCDoubleSaIS0_EE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseI12HighsCDoubleSaIS0_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!20 = !{!21, !21, i64 0}
!21 = !{!"int", !7, i64 0}
!22 = !{!10, !15, i64 208}
!23 = !{!10, !15, i64 192}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass