; LLVM IR from chrxh/alien :: source/Gui (LocationHelper)

; 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::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<int, std::pair<const int, int>, std::_Select1st<std::pair<const int, int>>, std::less<int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<int, std::pair<const int, int>, std::_Select1st<std::pair<const int, int>>, std::less<int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::variant" = type { %"struct.std::__detail::__variant::_Variant_base.base", [7 x i8] }
%"struct.std::__detail::__variant::_Variant_base.base" = type { %"struct.std::__detail::__variant::_Move_assign_base.base" }
%"struct.std::__detail::__variant::_Move_assign_base.base" = type { %"struct.std::__detail::__variant::_Copy_assign_base.base" }
%"struct.std::__detail::__variant::_Copy_assign_base.base" = type { %"struct.std::__detail::__variant::_Move_ctor_base.base" }
%"struct.std::__detail::__variant::_Move_ctor_base.base" = type { %"struct.std::__detail::__variant::_Copy_ctor_base.base" }
%"struct.std::__detail::__variant::_Copy_ctor_base.base" = type { %"struct.std::__detail::__variant::_Variant_storage.base" }
%"struct.std::__detail::__variant::_Variant_storage.base" = type <{ %"union.std::__detail::__variant::_Variadic_union", i8 }>
%"union.std::__detail::__variant::_Variadic_union" = type { %"struct.std::__detail::__variant::_Uninitialized" }
%"struct.std::__detail::__variant::_Uninitialized" = type { ptr }
%"struct.std::pair" = type <{ %"struct.std::_Rb_tree_iterator", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator" = type { ptr }
%struct.SimulationParametersZone = type { [64 x i8], i32, i32, float, float, float, float, float, i32, %union.SpotShapeData, i32, %union.FlowData, %struct.SimulationParametersZoneValues, %struct.SimulationParametersZoneActivatedValues }
%union.SpotShapeData = type { %struct.RectangularSpot }
%struct.RectangularSpot = type { float, float }
%union.FlowData = type { %struct.RadialFlow }
%struct.RadialFlow = type { i32, float, float }
%struct.SimulationParametersZoneValues = type { float, float, [7 x float], [7 x float], [7 x float], [7 x float], i8, [7 x float], [7 x float], [7 x float], float, float, [7 x float], [7 x i32], [7 x i32], [7 x float], [7 x [7 x float]], [7 x float], [7 x float], [7 x [7 x float]], [7 x [7 x float]], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float] }
%struct.SimulationParametersZoneActivatedValues = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }
%struct.RadiationSource = type { [64 x i8], i32, float, i8, float, float, float, float, i8, float, i32, %union.RadiationSourceShapeData }
%union.RadiationSourceShapeData = type { %struct.RectangularRadiationSource }
%struct.RectangularRadiationSource = type { float, float }
%struct.SimulationParameters = type <{ [64 x i8], %struct.Features, [2 x i8], i32, [40 x %struct.RadiationSource], i8, [3 x i8], float, [7 x float], [7 x float], [7 x float], i8, [3 x i8], float, i32, [20 x %struct.SimulationParametersZone], i32, i8, i8, i8, i8, i32, i32, float, float, i32, float, i8, i8, [2 x i8], float, i8, [3 x i8], %struct.SimulationParametersZoneValues, float, i32, %union.MotionData, float, float, [7 x float], [7 x float], float, float, i32, [7 x float], [7 x float], [7 x float], [7 x i32], float, float, float, [7 x i32], [7 x float], [7 x float], [7 x float], [7 x float], i32, [7 x i32], i8, i8, [2 x i8], [7 x i32], i8, [3 x i8], i32, i8, i8, i8, i8, i32, [7 x float], [7 x float], [7 x float], i8, [7 x [7 x i8]], i8, i8, float, float, float, float, float, float, i32, [7 x float], [7 x [7 x i32]], float, [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x [7 x float]], [7 x float], float, i8, [3 x i8], [7 x float], [7 x float], i8, [3 x i8], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], [7 x float], float, i8, [3 x i8], [7 x float], [7 x float], float, [7 x float], float, [7 x float], [7 x float], float, i8, [3 x i8] }>
%struct.Features = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }
%union.MotionData = type { %struct.FluidMotion }
%struct.FluidMotion = type { float, float, float }

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZN14LocationHelper12findLocationER20SimulationParametersi(ptr noundef nonnull align 4 dereferenceable(36809), i32 noundef) #0 align 2

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14LocationHelper23onDecreaseLocationIndexER20SimulationParametersi(ptr dead_on_unwind noalias writable sret(%"class.std::map") align 8 %0, ptr noundef nonnull align 4 dereferenceable(36809) %1, i32 noundef %2) #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca %"class.std::variant", align 8
  %8 = alloca { ptr, i8 }, align 8
  %9 = alloca %"class.std::variant", align 8
  %10 = alloca { ptr, i8 }, align 8
  %11 = alloca i1, align 1
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca %"struct.std::pair", align 8
  %17 = alloca i32, align 4
  %18 = alloca %"struct.std::pair", align 8
  %19 = alloca %"struct.std::pair", align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %7) #4
  %20 = load ptr, ptr %5, align 8, !tbaa !5
  %21 = load i32, ptr %6, align 4, !tbaa !9
  %22 = call { ptr, i8 } @_ZN14LocationHelper12findLocationER20SimulationParametersi(ptr noundef nonnull align 4 dereferenceable(36809) %20, i32 noundef %21)
  store { ptr, i8 } %22, ptr %8, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %7, ptr align 8 %8, i64 9, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #4
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = load i32, ptr %6, align 4, !tbaa !9
  %25 = sub nsw i32 %24, 1
  %26 = call { ptr, i8 } @_ZN14LocationHelper12findLocationER20SimulationParametersi(ptr noundef nonnull align 4 dereferenceable(36809) %23, i32 noundef %25)
  store { ptr, i8 } %26, ptr %10, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %10, i64 9, i1 false)
  %27 = call noundef zeroext i1 @_ZSt17holds_alternativeIP24SimulationParametersZoneJS1_P15RadiationSourceEEbRKSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %7) #4
  br i1 %27, label %28, label %34

28:                                               ; preds = %3
  %29 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP24SimulationParametersZoneJS1_P15RadiationSourceEERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %7)
  %30 = load ptr, ptr %29, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.SimulationParametersZone, ptr %30, i32 0, i32 1
  %32 = load i32, ptr %31, align 4, !tbaa !11
  %33 = sub nsw i32 %32, 1
  store i32 %33, ptr %31, align 4, !tbaa !11
  br label %40

34:                                               ; preds = %3
  %35 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP15RadiationSourceJP24SimulationParametersZoneS1_EERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %7)
  %36 = load ptr, ptr %35, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.RadiationSource, ptr %36, i32 0, i32 1
  %38 = load i32, ptr %37, align 4, !tbaa !17
  %39 = sub nsw i32 %38, 1
  store i32 %39, ptr %37, align 4, !tbaa !17
  br label %40

40:                                               ; preds = %34, %28
  %41 = call noundef zeroext i1 @_ZSt17holds_alternativeIP24SimulationParametersZoneJS1_P15RadiationSourceEEbRKSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %9) #4
  br i1 %41, label %42, label %48

42:                                               ; preds = %40
  %43 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP24SimulationParametersZoneJS1_P15RadiationSourceEERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %9)
  %44 = load ptr, ptr %43, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.SimulationParametersZone, ptr %44, i32 0, i32 1
  %46 = load i32, ptr %45, align 4, !tbaa !11
  %47 = add nsw i32 %46, 1
  store i32 %47, ptr %45, align 4, !tbaa !11
  br label %54

48:                                               ; preds = %40
  %49 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP15RadiationSourceJP24SimulationParametersZoneS1_EERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %9)
  %50 = load ptr, ptr %49, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.RadiationSource, ptr %50, i32 0, i32 1
  %52 = load i32, ptr %51, align 4, !tbaa !17
  %53 = add nsw i32 %52, 1
  store i32 %53, ptr %51, align 4, !tbaa !17
  br label %54

54:                                               ; preds = %48, %42
  store i1 false, ptr %11, align 1
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %55

55:                                               ; preds = %115, %54
  %56 = load i32, ptr %12, align 4, !tbaa !9
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.SimulationParameters, ptr %57, i32 0, i32 14
  %59 = load i32, ptr %58, align 4, !tbaa !19
  %60 = load ptr, ptr %5, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.SimulationParameters, ptr %60, i32 0, i32 3
  %62 = load i32, ptr %61, align 4, !tbaa !22
  %63 = add nsw i32 %59, %62
  %64 = add nsw i32 %63, 1
  %65 = icmp slt i32 %56, %64
  br i1 %65, label %67, label %66

66:                                               ; preds = %55
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %119

67:                                               ; preds = %55
  %68 = load i32, ptr %12, align 4, !tbaa !9
  %69 = load i32, ptr %6, align 4, !tbaa !9
  %70 = icmp eq i32 %68, %69
  br i1 %70, label %71, label %84

71:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %72 = load i32, ptr %12, align 4, !tbaa !9
  %73 = sub nsw i32 %72, 1
  store i32 %73, ptr %13, align 4, !tbaa !9
  %74 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %75 unwind label %80

75:                                               ; preds = %71
  %76 = getelementptr inbounds { ptr, i8 }, ptr %16, i32 0, i32 0
  %77 = extractvalue { ptr, i8 } %74, 0
  store ptr %77, ptr %76, align 8
  %78 = getelementptr inbounds { ptr, i8 }, ptr %16, i32 0, i32 1
  %79 = extractvalue { ptr, i8 } %74, 1
  store i8 %79, ptr %78, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %114

80:                                               ; preds = %71
  %81 = landingpad { ptr, i32 }
          cleanup
  %82 = extractvalue { ptr, i32 } %81, 0
  store ptr %82, ptr %14, align 8
  %83 = extractvalue { ptr, i32 } %81, 1
  store i32 %83, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %118

84:                                               ; preds = %67
  %85 = load i32, ptr %12, align 4, !tbaa !9
  %86 = load i32, ptr %6, align 4, !tbaa !9
  %87 = sub nsw i32 %86, 1
  %88 = icmp eq i32 %85, %87
  br i1 %88, label %89, label %102

89:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %90 = load i32, ptr %12, align 4, !tbaa !9
  %91 = add nsw i32 %90, 1
  store i32 %91, ptr %17, align 4, !tbaa !9
  %92 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %93 unwind label %98

93:                                               ; preds = %89
  %94 = getelementptr inbounds { ptr, i8 }, ptr %18, i32 0, i32 0
  %95 = extractvalue { ptr, i8 } %92, 0
  store ptr %95, ptr %94, align 8
  %96 = getelementptr inbounds { ptr, i8 }, ptr %18, i32 0, i32 1
  %97 = extractvalue { ptr, i8 } %92, 1
  store i8 %97, ptr %96, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %113

98:                                               ; preds = %89
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %14, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %118

102:                                              ; preds = %84
  %103 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiS8_EEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %104 unwind label %109

104:                                              ; preds = %102
  %105 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 0
  %106 = extractvalue { ptr, i8 } %103, 0
  store ptr %106, ptr %105, align 8
  %107 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 1
  %108 = extractvalue { ptr, i8 } %103, 1
  store i8 %108, ptr %107, align 8
  br label %113

109:                                              ; preds = %102
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %14, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %15, align 4
  br label %118

113:                                              ; preds = %104, %93
  br label %114

114:                                              ; preds = %113, %75
  br label %115

115:                                              ; preds = %114
  %116 = load i32, ptr %12, align 4, !tbaa !9
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %12, align 4, !tbaa !9
  br label %55, !llvm.loop !23

118:                                              ; preds = %109, %98, %80
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #4
  br label %123

119:                                              ; preds = %66
  store i1 true, ptr %11, align 1
  %120 = load i1, ptr %11, align 1
  br i1 %120, label %122, label %121

121:                                              ; preds = %119
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #4
  br label %122

122:                                              ; preds = %121, %119
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %7) #4
  ret void

123:                                              ; preds = %118
  %124 = load ptr, ptr %14, align 8
  %125 = load i32, ptr %15, align 4
  %126 = insertvalue { ptr, i32 } poison, ptr %124, 0
  %127 = insertvalue { ptr, i32 } %126, i32 %125, 1
  resume { ptr, i32 } %127
}

; 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) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt17holds_alternativeIP24SimulationParametersZoneJS1_P15RadiationSourceEEbRKSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9)) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP24SimulationParametersZoneJS1_P15RadiationSourceEERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9)) #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP15RadiationSourceJP24SimulationParametersZoneS1_EERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9)) #0

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiS8_EEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !10, i64 64}
!12 = !{!"_ZTS24SimulationParametersZone", !7, i64 0, !10, i64 64, !10, i64 68, !13, i64 72, !13, i64 76, !13, i64 80, !13, i64 84, !13, i64 88, !10, i64 92, !7, i64 96, !10, i64 104, !7, i64 108, !14, i64 120, !16, i64 1428}
!13 = !{!"float", !7, i64 0}
!14 = !{!"_ZTS30SimulationParametersZoneValues", !13, i64 0, !13, i64 4, !7, i64 8, !7, i64 36, !7, i64 64, !7, i64 92, !15, i64 120, !7, i64 124, !7, i64 152, !7, i64 180, !13, i64 208, !13, i64 212, !7, i64 216, !7, i64 244, !7, i64 272, !7, i64 300, !7, i64 328, !7, i64 524, !7, i64 552, !7, i64 580, !7, i64 776, !7, i64 972, !7, i64 1000, !7, i64 1028, !7, i64 1056, !7, i64 1084, !7, i64 1112, !7, i64 1140, !7, i64 1168, !7, i64 1196, !7, i64 1224, !7, i64 1252, !7, i64 1280}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTS39SimulationParametersZoneActivatedValues", !15, i64 0, !15, i64 1, !15, i64 2, !15, i64 3, !15, i64 4, !15, i64 5, !15, i64 6, !15, i64 7, !15, i64 8, !15, i64 9, !15, i64 10, !15, i64 11, !15, i64 12, !15, i64 13, !15, i64 14, !15, i64 15, !15, i64 16, !15, i64 17, !15, i64 18, !15, i64 19, !15, i64 20, !15, i64 21, !15, i64 22, !15, i64 23, !15, i64 24, !15, i64 25, !15, i64 26, !15, i64 27, !15, i64 28, !15, i64 29, !15, i64 30, !15, i64 31}
!17 = !{!18, !10, i64 64}
!18 = !{!"_ZTS15RadiationSource", !7, i64 0, !10, i64 64, !13, i64 68, !15, i64 72, !13, i64 76, !13, i64 80, !13, i64 84, !13, i64 88, !15, i64 92, !13, i64 96, !10, i64 100, !7, i64 104}
!19 = !{!20, !10, i64 4660}
!20 = !{!"_ZTS20SimulationParameters", !7, i64 0, !21, i64 64, !10, i64 76, !7, i64 80, !15, i64 4560, !13, i64 4564, !7, i64 4568, !7, i64 4596, !7, i64 4624, !15, i64 4652, !13, i64 4656, !10, i64 4660, !7, i64 4664, !10, i64 33864, !15, i64 33868, !15, i64 33869, !15, i64 33870, !10, i64 33872, !10, i64 33876, !13, i64 33880, !13, i64 33884, !10, i64 33888, !13, i64 33892, !15, i64 33896, !15, i64 33897, !13, i64 33900, !15, i64 33904, !14, i64 33908, !13, i64 35216, !10, i64 35220, !7, i64 35224, !13, i64 35236, !13, i64 35240, !7, i64 35244, !7, i64 35272, !13, i64 35300, !13, i64 35304, !10, i64 35308, !7, i64 35312, !7, i64 35340, !7, i64 35368, !7, i64 35396, !13, i64 35424, !13, i64 35428, !13, i64 35432, !7, i64 35436, !7, i64 35464, !7, i64 35492, !7, i64 35520, !7, i64 35548, !10, i64 35576, !7, i64 35580, !15, i64 35608, !15, i64 35609, !7, i64 35612, !15, i64 35640, !10, i64 35644, !15, i64 35648, !15, i64 35649, !15, i64 35650, !10, i64 35652, !7, i64 35656, !7, i64 35684, !7, i64 35712, !15, i64 35740, !7, i64 35741, !15, i64 35790, !15, i64 35791, !13, i64 35792, !13, i64 35796, !13, i64 35800, !13, i64 35804, !13, i64 35808, !13, i64 35812, !10, i64 35816, !7, i64 35820, !7, i64 35848, !13, i64 36044, !7, i64 36048, !7, i64 36076, !7, i64 36104, !7, i64 36132, !7, i64 36160, !7, i64 36188, !7, i64 36384, !13, i64 36412, !15, i64 36416, !7, i64 36420, !7, i64 36448, !15, i64 36476, !7, i64 36480, !7, i64 36508, !7, i64 36536, !7, i64 36564, !7, i64 36592, !7, i64 36620, !13, i64 36648, !15, i64 36652, !7, i64 36656, !7, i64 36684, !13, i64 36712, !7, i64 36716, !13, i64 36744, !7, i64 36748, !7, i64 36776, !13, i64 36804, !15, i64 36808}
!21 = !{!"_ZTS8Features", !15, i64 0, !15, i64 1, !15, i64 2, !15, i64 3, !15, i64 4, !15, i64 5, !15, i64 6, !15, i64 7, !15, i64 8, !15, i64 9}
!22 = !{!20, !10, i64 76}
!23 = distinct !{!23, !24}
!24 = !{!"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.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<int, std::pair<const int, int>, std::_Select1st<std::pair<const int, int>>, std::less<int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<int, std::pair<const int, int>, std::_Select1st<std::pair<const int, int>>, std::less<int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::variant" = type { %"struct.std::__detail::__variant::_Variant_base.base", [7 x i8] }
%"struct.std::__detail::__variant::_Variant_base.base" = type { %"struct.std::__detail::__variant::_Move_assign_base.base" }
%"struct.std::__detail::__variant::_Move_assign_base.base" = type { %"struct.std::__detail::__variant::_Copy_assign_base.base" }
%"struct.std::__detail::__variant::_Copy_assign_base.base" = type { %"struct.std::__detail::__variant::_Move_ctor_base.base" }
%"struct.std::__detail::__variant::_Move_ctor_base.base" = type { %"struct.std::__detail::__variant::_Copy_ctor_base.base" }
%"struct.std::__detail::__variant::_Copy_ctor_base.base" = type { %"struct.std::__detail::__variant::_Variant_storage.base" }
%"struct.std::__detail::__variant::_Variant_storage.base" = type <{ %"union.std::__detail::__variant::_Variadic_union", i8 }>
%"union.std::__detail::__variant::_Variadic_union" = type { %"struct.std::__detail::__variant::_Uninitialized" }
%"struct.std::__detail::__variant::_Uninitialized" = type { ptr }

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZN14LocationHelper12findLocationER20SimulationParametersi(ptr noundef nonnull align 4 dereferenceable(36809), i32 noundef) local_unnamed_addr #0 align 2

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14LocationHelper23onDecreaseLocationIndexER20SimulationParametersi(ptr dead_on_unwind noalias writable sret(%"class.std::map") align 8 %0, ptr noundef nonnull align 4 dereferenceable(36809) %1, i32 noundef %2) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::variant", align 8
  %5 = alloca %"class.std::variant", align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #3
  %9 = tail call { ptr, i8 } @_ZN14LocationHelper12findLocationER20SimulationParametersi(ptr noundef nonnull align 4 dereferenceable(36809) %1, i32 noundef %2)
  %.fca.0.extract7 = extractvalue { ptr, i8 } %9, 0
  %.fca.1.extract8 = extractvalue { ptr, i8 } %9, 1
  store ptr %.fca.0.extract7, ptr %4, align 8
  %.sroa.210.0..sroa_idx = getelementptr inbounds i8, ptr %4, i64 8
  store i8 %.fca.1.extract8, ptr %.sroa.210.0..sroa_idx, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #3
  %10 = add nsw i32 %2, -1
  %11 = tail call { ptr, i8 } @_ZN14LocationHelper12findLocationER20SimulationParametersi(ptr noundef nonnull align 4 dereferenceable(36809) %1, i32 noundef %10)
  %.fca.0.extract = extractvalue { ptr, i8 } %11, 0
  %.fca.1.extract = extractvalue { ptr, i8 } %11, 1
  store ptr %.fca.0.extract, ptr %5, align 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %5, i64 8
  store i8 %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  %12 = call noundef zeroext i1 @_ZSt17holds_alternativeIP24SimulationParametersZoneJS1_P15RadiationSourceEEbRKSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %4) #3
  br i1 %12, label %13, label %15

13:                                               ; preds = %3
  %14 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP24SimulationParametersZoneJS1_P15RadiationSourceEERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %4)
  br label %17

15:                                               ; preds = %3
  %16 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP15RadiationSourceJP24SimulationParametersZoneS1_EERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %4)
  br label %17

17:                                               ; preds = %15, %13
  %.sink = phi ptr [ %16, %15 ], [ %14, %13 ]
  %18 = load ptr, ptr %.sink, align 8, !tbaa !5
  %19 = getelementptr inbounds i8, ptr %18, i64 64
  %20 = load i32, ptr %19, align 4, !tbaa !9
  %21 = add nsw i32 %20, -1
  store i32 %21, ptr %19, align 4, !tbaa !9
  %22 = call noundef zeroext i1 @_ZSt17holds_alternativeIP24SimulationParametersZoneJS1_P15RadiationSourceEEbRKSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %5) #3
  br i1 %22, label %23, label %25

23:                                               ; preds = %17
  %24 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP24SimulationParametersZoneJS1_P15RadiationSourceEERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %5)
  br label %27

25:                                               ; preds = %17
  %26 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP15RadiationSourceJP24SimulationParametersZoneS1_EERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9) %5)
  br label %27

27:                                               ; preds = %25, %23
  %.sink32 = phi ptr [ %26, %25 ], [ %24, %23 ]
  %28 = load ptr, ptr %.sink32, align 8, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %28, i64 64
  %30 = load i32, ptr %29, align 4, !tbaa !9
  %31 = add nsw i32 %30, 1
  store i32 %31, ptr %29, align 4, !tbaa !9
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #3
  %32 = getelementptr inbounds i8, ptr %1, i64 4660
  %33 = getelementptr inbounds i8, ptr %1, i64 76
  store i32 0, ptr %6, align 4, !tbaa !9
  %34 = load i32, ptr %32, align 4, !tbaa !11
  %35 = load i32, ptr %33, align 4, !tbaa !17
  %36 = add nsw i32 %35, %34
  %.not22 = icmp slt i32 %36, 0
  br i1 %.not22, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %54, %27
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #3
  ret void

.lr.ph:                                           ; preds = %27, %54
  %storemerge23 = phi i32 [ %56, %54 ], [ 0, %27 ]
  %37 = icmp eq i32 %storemerge23, %2
  br i1 %37, label %38, label %43

38:                                               ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #3
  store i32 %10, ptr %7, align 4, !tbaa !9
  %39 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %40 unwind label %41

40:                                               ; preds = %38
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #3
  br label %54

41:                                               ; preds = %38
  %42 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #3
  br label %60

43:                                               ; preds = %.lr.ph
  %44 = icmp eq i32 %storemerge23, %10
  br i1 %44, label %45, label %50

45:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #3
  store i32 %2, ptr %8, align 4, !tbaa !9
  %46 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %47 unwind label %48

47:                                               ; preds = %45
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #3
  br label %54

48:                                               ; preds = %45
  %49 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #3
  br label %60

50:                                               ; preds = %43
  %51 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiS8_EEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %54 unwind label %52

52:                                               ; preds = %50
  %53 = landingpad { ptr, i32 }
          cleanup
  br label %60

54:                                               ; preds = %50, %40, %47
  %55 = load i32, ptr %6, align 4, !tbaa !9
  %56 = add nsw i32 %55, 1
  store i32 %56, ptr %6, align 4, !tbaa !9
  %57 = load i32, ptr %32, align 4, !tbaa !11
  %58 = load i32, ptr %33, align 4, !tbaa !17
  %59 = add nsw i32 %58, %57
  %.not.not = icmp slt i32 %55, %59
  br i1 %.not.not, label %.lr.ph, label %._crit_edge, !llvm.loop !18

60:                                               ; preds = %52, %48, %41
  %.pn = phi { ptr, i32 } [ %42, %41 ], [ %49, %48 ], [ %53, %52 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #3
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #3
  resume { ptr, i32 } %.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt17holds_alternativeIP24SimulationParametersZoneJS1_P15RadiationSourceEEbRKSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP24SimulationParametersZoneJS1_P15RadiationSourceEERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9)) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3getIP15RadiationSourceJP24SimulationParametersZoneS1_EERT_RSt7variantIJDpT0_EE(ptr noundef nonnull align 8 dereferenceable(9)) local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiS8_EEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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, !10, i64 4660}
!12 = !{!"_ZTS20SimulationParameters", !7, i64 0, !13, i64 64, !10, i64 76, !7, i64 80, !14, i64 4560, !15, i64 4564, !7, i64 4568, !7, i64 4596, !7, i64 4624, !14, i64 4652, !15, i64 4656, !10, i64 4660, !7, i64 4664, !10, i64 33864, !14, i64 33868, !14, i64 33869, !14, i64 33870, !10, i64 33872, !10, i64 33876, !15, i64 33880, !15, i64 33884, !10, i64 33888, !15, i64 33892, !14, i64 33896, !14, i64 33897, !15, i64 33900, !14, i64 33904, !16, i64 33908, !15, i64 35216, !10, i64 35220, !7, i64 35224, !15, i64 35236, !15, i64 35240, !7, i64 35244, !7, i64 35272, !15, i64 35300, !15, i64 35304, !10, i64 35308, !7, i64 35312, !7, i64 35340, !7, i64 35368, !7, i64 35396, !15, i64 35424, !15, i64 35428, !15, i64 35432, !7, i64 35436, !7, i64 35464, !7, i64 35492, !7, i64 35520, !7, i64 35548, !10, i64 35576, !7, i64 35580, !14, i64 35608, !14, i64 35609, !7, i64 35612, !14, i64 35640, !10, i64 35644, !14, i64 35648, !14, i64 35649, !14, i64 35650, !10, i64 35652, !7, i64 35656, !7, i64 35684, !7, i64 35712, !14, i64 35740, !7, i64 35741, !14, i64 35790, !14, i64 35791, !15, i64 35792, !15, i64 35796, !15, i64 35800, !15, i64 35804, !15, i64 35808, !15, i64 35812, !10, i64 35816, !7, i64 35820, !7, i64 35848, !15, i64 36044, !7, i64 36048, !7, i64 36076, !7, i64 36104, !7, i64 36132, !7, i64 36160, !7, i64 36188, !7, i64 36384, !15, i64 36412, !14, i64 36416, !7, i64 36420, !7, i64 36448, !14, i64 36476, !7, i64 36480, !7, i64 36508, !7, i64 36536, !7, i64 36564, !7, i64 36592, !7, i64 36620, !15, i64 36648, !14, i64 36652, !7, i64 36656, !7, i64 36684, !15, i64 36712, !7, i64 36716, !15, i64 36744, !7, i64 36748, !7, i64 36776, !15, i64 36804, !14, i64 36808}
!13 = !{!"_ZTS8Features", !14, i64 0, !14, i64 1, !14, i64 2, !14, i64 3, !14, i64 4, !14, i64 5, !14, i64 6, !14, i64 7, !14, i64 8, !14, i64 9}
!14 = !{!"bool", !7, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = !{!"_ZTS30SimulationParametersZoneValues", !15, i64 0, !15, i64 4, !7, i64 8, !7, i64 36, !7, i64 64, !7, i64 92, !14, i64 120, !7, i64 124, !7, i64 152, !7, i64 180, !15, i64 208, !15, i64 212, !7, i64 216, !7, i64 244, !7, i64 272, !7, i64 300, !7, i64 328, !7, i64 524, !7, i64 552, !7, i64 580, !7, i64 776, !7, i64 972, !7, i64 1000, !7, i64 1028, !7, i64 1056, !7, i64 1084, !7, i64 1112, !7, i64 1140, !7, i64 1168, !7, i64 1196, !7, i64 1224, !7, i64 1252, !7, i64 1280}
!17 = !{!12, !10, i64 76}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}


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