; 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 }
%"struct.std::pair" = type <{ %"struct.std::_Rb_tree_iterator", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator" = type { ptr }
%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 }
%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.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.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.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] }
%union.MotionData = type { %struct.FluidMotion }
%struct.FluidMotion = type { float, float, float }

; 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 i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 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)) #2 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)) #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14LocationHelper18adaptLocationIndexER20SimulationParametersii(ptr dead_on_unwind noalias writable sret(%"class.std::map") align 8 %0, ptr noundef nonnull align 4 dereferenceable(36809) %1, i32 noundef %2, i32 noundef %3) #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i1, align 1
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca %"struct.std::pair", align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"struct.std::pair", align 8
  %19 = alloca %"struct.std::pair", align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"struct.std::pair", align 8
  %24 = alloca %"struct.std::pair", align 8
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !9
  store i1 false, ptr %9, align 1
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  store i32 0, ptr %11, align 4, !tbaa !9
  %25 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11)
          to label %26 unwind label %38

26:                                               ; preds = %4
  %27 = getelementptr inbounds { ptr, i8 }, ptr %14, i32 0, i32 0
  %28 = extractvalue { ptr, i8 } %25, 0
  store ptr %28, ptr %27, align 8
  %29 = getelementptr inbounds { ptr, i8 }, ptr %14, i32 0, i32 1
  %30 = extractvalue { ptr, i8 } %25, 1
  store i8 %30, ptr %29, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %31

31:                                               ; preds = %92, %26
  %32 = load i32, ptr %15, align 4, !tbaa !9
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.SimulationParameters, ptr %33, i32 0, i32 14
  %35 = load i32, ptr %34, align 4, !tbaa !11
  %36 = icmp slt i32 %32, %35
  br i1 %36, label %42, label %37

37:                                               ; preds = %31
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  br label %96

38:                                               ; preds = %4
  %39 = landingpad { ptr, i32 }
          cleanup
  %40 = extractvalue { ptr, i32 } %39, 0
  store ptr %40, ptr %12, align 8
  %41 = extractvalue { ptr, i32 } %39, 1
  store i32 %41, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  br label %162

42:                                               ; preds = %31
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %43 = load ptr, ptr %6, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.SimulationParameters, ptr %43, i32 0, i32 15
  %45 = load i32, ptr %15, align 4, !tbaa !9
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds [20 x %struct.SimulationParametersZone], ptr %44, i64 0, i64 %46
  store ptr %47, ptr %16, align 8, !tbaa !5
  %48 = load ptr, ptr %16, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.SimulationParametersZone, ptr %48, i32 0, i32 1
  %50 = load i32, ptr %49, align 4, !tbaa !17
  %51 = load i32, ptr %7, align 4, !tbaa !9
  %52 = icmp sge i32 %50, %51
  br i1 %52, label %53, label %76

53:                                               ; preds = %42
  %54 = load ptr, ptr %16, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.SimulationParametersZone, ptr %54, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %56 = load ptr, ptr %16, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.SimulationParametersZone, ptr %56, i32 0, i32 1
  %58 = load i32, ptr %57, align 4, !tbaa !17
  %59 = load i32, ptr %8, align 4, !tbaa !9
  %60 = add nsw i32 %58, %59
  store i32 %60, ptr %17, align 4, !tbaa !9
  %61 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %55, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %62 unwind label %72

62:                                               ; preds = %53
  %63 = getelementptr inbounds { ptr, i8 }, ptr %18, i32 0, i32 0
  %64 = extractvalue { ptr, i8 } %61, 0
  store ptr %64, ptr %63, align 8
  %65 = getelementptr inbounds { ptr, i8 }, ptr %18, i32 0, i32 1
  %66 = extractvalue { ptr, i8 } %61, 1
  store i8 %66, ptr %65, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  %67 = load i32, ptr %8, align 4, !tbaa !9
  %68 = load ptr, ptr %16, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.SimulationParametersZone, ptr %68, i32 0, i32 1
  %70 = load i32, ptr %69, align 4, !tbaa !17
  %71 = add nsw i32 %70, %67
  store i32 %71, ptr %69, align 4, !tbaa !17
  br label %91

72:                                               ; preds = %53
  %73 = landingpad { ptr, i32 }
          cleanup
  %74 = extractvalue { ptr, i32 } %73, 0
  store ptr %74, ptr %12, align 8
  %75 = extractvalue { ptr, i32 } %73, 1
  store i32 %75, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  br label %95

76:                                               ; preds = %42
  %77 = load ptr, ptr %16, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.SimulationParametersZone, ptr %77, i32 0, i32 1
  %79 = load ptr, ptr %16, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.SimulationParametersZone, ptr %79, i32 0, i32 1
  %81 = 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) %78, ptr noundef nonnull align 4 dereferenceable(4) %80)
          to label %82 unwind label %87

82:                                               ; preds = %76
  %83 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 0
  %84 = extractvalue { ptr, i8 } %81, 0
  store ptr %84, ptr %83, align 8
  %85 = getelementptr inbounds { ptr, i8 }, ptr %19, i32 0, i32 1
  %86 = extractvalue { ptr, i8 } %81, 1
  store i8 %86, ptr %85, align 8
  br label %91

87:                                               ; preds = %76
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %12, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %13, align 4
  br label %95

91:                                               ; preds = %82, %62
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  br label %92

92:                                               ; preds = %91
  %93 = load i32, ptr %15, align 4, !tbaa !9
  %94 = add nsw i32 %93, 1
  store i32 %94, ptr %15, align 4, !tbaa !9
  br label %31, !llvm.loop !20

95:                                               ; preds = %87, %72
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  br label %162

96:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %154, %96
  %98 = load i32, ptr %20, align 4, !tbaa !9
  %99 = load ptr, ptr %6, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.SimulationParameters, ptr %99, i32 0, i32 3
  %101 = load i32, ptr %100, align 4, !tbaa !22
  %102 = icmp slt i32 %98, %101
  br i1 %102, label %104, label %103

103:                                              ; preds = %97
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %158

104:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.SimulationParameters, ptr %105, i32 0, i32 4
  %107 = load i32, ptr %20, align 4, !tbaa !9
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [40 x %struct.RadiationSource], ptr %106, i64 0, i64 %108
  store ptr %109, ptr %21, align 8, !tbaa !5
  %110 = load ptr, ptr %21, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.RadiationSource, ptr %110, i32 0, i32 1
  %112 = load i32, ptr %111, align 4, !tbaa !23
  %113 = load i32, ptr %7, align 4, !tbaa !9
  %114 = icmp sge i32 %112, %113
  br i1 %114, label %115, label %138

115:                                              ; preds = %104
  %116 = load ptr, ptr %21, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.RadiationSource, ptr %116, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %118 = load ptr, ptr %21, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.RadiationSource, ptr %118, i32 0, i32 1
  %120 = load i32, ptr %119, align 4, !tbaa !23
  %121 = load i32, ptr %8, align 4, !tbaa !9
  %122 = add nsw i32 %120, %121
  store i32 %122, ptr %22, align 4, !tbaa !9
  %123 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %117, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %124 unwind label %134

124:                                              ; preds = %115
  %125 = getelementptr inbounds { ptr, i8 }, ptr %23, i32 0, i32 0
  %126 = extractvalue { ptr, i8 } %123, 0
  store ptr %126, ptr %125, align 8
  %127 = getelementptr inbounds { ptr, i8 }, ptr %23, i32 0, i32 1
  %128 = extractvalue { ptr, i8 } %123, 1
  store i8 %128, ptr %127, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  %129 = load i32, ptr %8, align 4, !tbaa !9
  %130 = load ptr, ptr %21, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.RadiationSource, ptr %130, i32 0, i32 1
  %132 = load i32, ptr %131, align 4, !tbaa !23
  %133 = add nsw i32 %132, %129
  store i32 %133, ptr %131, align 4, !tbaa !23
  br label %153

134:                                              ; preds = %115
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %12, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  br label %157

138:                                              ; preds = %104
  %139 = load ptr, ptr %21, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.RadiationSource, ptr %139, i32 0, i32 1
  %141 = load ptr, ptr %21, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.RadiationSource, ptr %141, i32 0, i32 1
  %143 = 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) %140, ptr noundef nonnull align 4 dereferenceable(4) %142)
          to label %144 unwind label %149

144:                                              ; preds = %138
  %145 = getelementptr inbounds { ptr, i8 }, ptr %24, i32 0, i32 0
  %146 = extractvalue { ptr, i8 } %143, 0
  store ptr %146, ptr %145, align 8
  %147 = getelementptr inbounds { ptr, i8 }, ptr %24, i32 0, i32 1
  %148 = extractvalue { ptr, i8 } %143, 1
  store i8 %148, ptr %147, align 8
  br label %153

149:                                              ; preds = %138
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %12, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %13, align 4
  br label %157

153:                                              ; preds = %144, %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  br label %154

154:                                              ; preds = %153
  %155 = load i32, ptr %20, align 4, !tbaa !9
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %20, align 4, !tbaa !9
  br label %97, !llvm.loop !25

157:                                              ; preds = %149, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %162

158:                                              ; preds = %103
  store i1 true, ptr %9, align 1
  %159 = load i1, ptr %9, align 1
  br i1 %159, label %161, label %160

160:                                              ; preds = %158
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #3
  br label %161

161:                                              ; preds = %160, %158
  ret void

162:                                              ; preds = %157, %95, %38
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #3
  br label %163

163:                                              ; preds = %162
  %164 = load ptr, ptr %12, align 8
  %165 = load i32, ptr %13, align 4
  %166 = insertvalue { ptr, i32 } poison, ptr %164, 0
  %167 = insertvalue { ptr, i32 } %166, i32 %165, 1
  resume { ptr, i32 } %167
}

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJiiEEES2_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)) #2 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = !{!"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 = !{!18, !10, i64 64}
!18 = !{!"_ZTS24SimulationParametersZone", !7, i64 0, !10, i64 64, !10, i64 68, !15, i64 72, !15, i64 76, !15, i64 80, !15, i64 84, !15, i64 88, !10, i64 92, !7, i64 96, !10, i64 104, !7, i64 108, !16, i64 120, !19, i64 1428}
!19 = !{!"_ZTS39SimulationParametersZoneActivatedValues", !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, i64 10, !14, i64 11, !14, i64 12, !14, i64 13, !14, i64 14, !14, i64 15, !14, i64 16, !14, i64 17, !14, i64 18, !14, i64 19, !14, i64 20, !14, i64 21, !14, i64 22, !14, i64 23, !14, i64 24, !14, i64 25, !14, i64 26, !14, i64 27, !14, i64 28, !14, i64 29, !14, i64 30, !14, i64 31}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!12, !10, i64 76}
!23 = !{!24, !10, i64 64}
!24 = !{!"_ZTS15RadiationSource", !7, i64 0, !10, i64 64, !15, i64 68, !14, i64 72, !15, i64 76, !15, i64 80, !15, i64 84, !15, i64 88, !14, i64 92, !15, i64 96, !10, i64 100, !7, i64 104}
!25 = distinct !{!25, !21}


; 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 }
%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 }

; 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 i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #1 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 #2 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 #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14LocationHelper18adaptLocationIndexER20SimulationParametersii(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::map") align 8 %0, ptr noundef nonnull align 4 dereferenceable(36809) %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  tail call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #3
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #3
  store i32 0, ptr %6, align 4, !tbaa !5
  %9 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %10 unwind label %19

10:                                               ; preds = %4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #3
  %11 = getelementptr inbounds i8, ptr %1, i64 4660
  %12 = load i32, ptr %11, align 4, !tbaa !9
  %13 = icmp sgt i32 %12, 0
  br i1 %13, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %10
  %14 = getelementptr inbounds i8, ptr %1, i64 4664
  br label %21

.preheader:                                       ; preds = %36, %10
  %15 = getelementptr inbounds i8, ptr %1, i64 76
  %16 = load i32, ptr %15, align 4, !tbaa !15
  %17 = icmp sgt i32 %16, 0
  br i1 %17, label %.lr.ph50, label %._crit_edge

.lr.ph50:                                         ; preds = %.preheader
  %18 = getelementptr inbounds i8, ptr %1, i64 80
  br label %40

19:                                               ; preds = %4
  %20 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #3
  br label %59

21:                                               ; preds = %.lr.ph, %36
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %36 ]
  %22 = getelementptr inbounds [20 x %struct.SimulationParametersZone], ptr %14, i64 0, i64 %indvars.iv, i32 1
  %23 = load i32, ptr %22, align 4, !tbaa !16
  %.not44 = icmp slt i32 %23, %2
  br i1 %.not44, label %32, label %24

24:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #3
  %25 = add nsw i32 %23, %3
  store i32 %25, ptr %7, align 4, !tbaa !5
  %26 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %27 unwind label %30

27:                                               ; preds = %24
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #3
  %28 = load i32, ptr %22, align 4, !tbaa !16
  %29 = add nsw i32 %28, %3
  store i32 %29, ptr %22, align 4, !tbaa !16
  br label %36

30:                                               ; preds = %24
  %31 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #3
  br label %59

32:                                               ; preds = %21
  %33 = 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) %22, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %36 unwind label %34

34:                                               ; preds = %32
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %59

36:                                               ; preds = %32, %27
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %37 = load i32, ptr %11, align 4, !tbaa !9
  %38 = sext i32 %37 to i64
  %39 = icmp slt i64 %indvars.iv.next, %38
  br i1 %39, label %21, label %.preheader, !llvm.loop !19

40:                                               ; preds = %.lr.ph50, %55
  %indvars.iv52 = phi i64 [ 0, %.lr.ph50 ], [ %indvars.iv.next53, %55 ]
  %41 = getelementptr inbounds [40 x %struct.RadiationSource], ptr %18, i64 0, i64 %indvars.iv52, i32 1
  %42 = load i32, ptr %41, align 4, !tbaa !21
  %.not = icmp slt i32 %42, %2
  br i1 %.not, label %51, label %43

43:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #3
  %44 = add nsw i32 %42, %3
  store i32 %44, ptr %8, align 4, !tbaa !5
  %45 = invoke { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJRiiEEES2_ISt17_Rb_tree_iteratorIS4_EbEDpOT_(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 4 dereferenceable(4) %8)
          to label %46 unwind label %49

46:                                               ; preds = %43
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #3
  %47 = load i32, ptr %41, align 4, !tbaa !21
  %48 = add nsw i32 %47, %3
  store i32 %48, ptr %41, align 4, !tbaa !21
  br label %55

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

51:                                               ; preds = %40
  %52 = 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) %41, ptr noundef nonnull align 4 dereferenceable(4) %41)
          to label %55 unwind label %53

53:                                               ; preds = %51
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %59

55:                                               ; preds = %51, %46
  %indvars.iv.next53 = add nuw nsw i64 %indvars.iv52, 1
  %56 = load i32, ptr %15, align 4, !tbaa !15
  %57 = sext i32 %56 to i64
  %58 = icmp slt i64 %indvars.iv.next53, %57
  br i1 %58, label %40, label %._crit_edge, !llvm.loop !23

._crit_edge:                                      ; preds = %55, %.preheader
  ret void

59:                                               ; preds = %49, %53, %30, %34, %19
  %.pn45.pn = phi { ptr, i32 } [ %20, %19 ], [ %31, %30 ], [ %35, %34 ], [ %50, %49 ], [ %54, %53 ]
  call void @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %0) #3
  resume { ptr, i32 } %.pn45.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIiiSt4lessIiESaISt4pairIKiiEEE7emplaceIJiiEEES2_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 #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 4660}
!10 = !{!"_ZTS20SimulationParameters", !7, i64 0, !11, i64 64, !6, i64 76, !7, i64 80, !12, i64 4560, !13, i64 4564, !7, i64 4568, !7, i64 4596, !7, i64 4624, !12, i64 4652, !13, i64 4656, !6, i64 4660, !7, i64 4664, !6, i64 33864, !12, i64 33868, !12, i64 33869, !12, i64 33870, !6, i64 33872, !6, i64 33876, !13, i64 33880, !13, i64 33884, !6, i64 33888, !13, i64 33892, !12, i64 33896, !12, i64 33897, !13, i64 33900, !12, i64 33904, !14, i64 33908, !13, i64 35216, !6, i64 35220, !7, i64 35224, !13, i64 35236, !13, i64 35240, !7, i64 35244, !7, i64 35272, !13, i64 35300, !13, i64 35304, !6, 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, !6, i64 35576, !7, i64 35580, !12, i64 35608, !12, i64 35609, !7, i64 35612, !12, i64 35640, !6, i64 35644, !12, i64 35648, !12, i64 35649, !12, i64 35650, !6, i64 35652, !7, i64 35656, !7, i64 35684, !7, i64 35712, !12, i64 35740, !7, i64 35741, !12, i64 35790, !12, i64 35791, !13, i64 35792, !13, i64 35796, !13, i64 35800, !13, i64 35804, !13, i64 35808, !13, i64 35812, !6, 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, !12, i64 36416, !7, i64 36420, !7, i64 36448, !12, i64 36476, !7, i64 36480, !7, i64 36508, !7, i64 36536, !7, i64 36564, !7, i64 36592, !7, i64 36620, !13, i64 36648, !12, 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, !12, i64 36808}
!11 = !{!"_ZTS8Features", !12, i64 0, !12, i64 1, !12, i64 2, !12, i64 3, !12, i64 4, !12, i64 5, !12, i64 6, !12, i64 7, !12, i64 8, !12, i64 9}
!12 = !{!"bool", !7, i64 0}
!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, !12, 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 = !{!10, !6, i64 76}
!16 = !{!17, !6, i64 64}
!17 = !{!"_ZTS24SimulationParametersZone", !7, i64 0, !6, i64 64, !6, i64 68, !13, i64 72, !13, i64 76, !13, i64 80, !13, i64 84, !13, i64 88, !6, i64 92, !7, i64 96, !6, i64 104, !7, i64 108, !14, i64 120, !18, i64 1428}
!18 = !{!"_ZTS39SimulationParametersZoneActivatedValues", !12, i64 0, !12, i64 1, !12, i64 2, !12, i64 3, !12, i64 4, !12, i64 5, !12, i64 6, !12, i64 7, !12, i64 8, !12, i64 9, !12, i64 10, !12, i64 11, !12, i64 12, !12, i64 13, !12, i64 14, !12, i64 15, !12, i64 16, !12, i64 17, !12, i64 18, !12, i64 19, !12, i64 20, !12, i64 21, !12, i64 22, !12, i64 23, !12, i64 24, !12, i64 25, !12, i64 26, !12, i64 27, !12, i64 28, !12, i64 29, !12, i64 30, !12, i64 31}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !6, i64 64}
!22 = !{!"_ZTS15RadiationSource", !7, i64 0, !6, i64 64, !13, i64 68, !12, i64 72, !13, i64 76, !13, i64 80, !13, i64 84, !13, i64 88, !12, i64 92, !13, i64 96, !6, i64 100, !7, i64 104}
!23 = distinct !{!23, !20}


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