; 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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.6 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.6 = type { i64, [8 x i8] }
%"class.std::allocator.3" = type { i8 }
%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 }

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

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14LocationHelper16generateZoneNameB5cxx11ER20SimulationParameters(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 4 dereferenceable(36809) %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i8, align 1
  %7 = alloca i1, align 1
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator.3", align 1
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  store i32 0, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #5
  store i1 false, ptr %7, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #5
  br label %16

16:                                               ; preds = %56, %2
  store i8 0, ptr %6, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #5
  %17 = load i32, ptr %5, align 4, !tbaa !9
  %18 = add nsw i32 %17, 1
  store i32 %18, ptr %5, align 4, !tbaa !9
  call void @_ZNSt7__cxx119to_stringEi(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %9, i32 noundef %18) #5
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef @.str.1, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %19 unwind label %28

19:                                               ; preds = %16
  %20 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %21

21:                                               ; preds = %51, %19
  %22 = load i32, ptr %12, align 4, !tbaa !9
  %23 = load ptr, ptr %4, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.SimulationParameters, ptr %23, i32 0, i32 14
  %25 = load i32, ptr %24, align 4, !tbaa !13
  %26 = icmp slt i32 %22, %25
  br i1 %26, label %32, label %27

27:                                               ; preds = %21
  store i32 4, ptr %13, align 4
  br label %54

28:                                               ; preds = %16
  %29 = landingpad { ptr, i32 }
          cleanup
  %30 = extractvalue { ptr, i32 } %29, 0
  store ptr %30, ptr %10, align 8
  %31 = extractvalue { ptr, i32 } %29, 1
  store i32 %31, ptr %11, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #5
  br label %63

32:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #5
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.SimulationParameters, ptr %33, i32 0, i32 15
  %35 = load i32, ptr %12, align 4, !tbaa !9
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [20 x %struct.SimulationParametersZone], ptr %34, i64 0, i64 %36
  %38 = getelementptr inbounds %struct.SimulationParametersZone, ptr %37, i32 0, i32 0
  %39 = getelementptr inbounds [64 x i8], ptr %38, i64 0, i64 0
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef %39, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %40 unwind label %43

40:                                               ; preds = %32
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  %41 = call noundef zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %14) #5
  br i1 %41, label %42, label %47

42:                                               ; preds = %40
  store i8 1, ptr %6, align 1, !tbaa !11
  store i32 4, ptr %13, align 4
  br label %48

43:                                               ; preds = %32
  %44 = landingpad { ptr, i32 }
          cleanup
  %45 = extractvalue { ptr, i32 } %44, 0
  store ptr %45, ptr %10, align 8
  %46 = extractvalue { ptr, i32 } %44, 1
  store i32 %46, ptr %11, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %63

47:                                               ; preds = %40
  store i32 0, ptr %13, align 4
  br label %48

48:                                               ; preds = %47, %42
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #5
  %49 = load i32, ptr %13, align 4
  switch i32 %49, label %54 [
    i32 0, label %50
  ]

50:                                               ; preds = %48
  br label %51

51:                                               ; preds = %50
  %52 = load i32, ptr %12, align 4, !tbaa !9
  %53 = add nsw i32 %52, 1
  store i32 %53, ptr %12, align 4, !tbaa !9
  br label %21, !llvm.loop !18

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

55:                                               ; preds = %54
  br label %56

56:                                               ; preds = %55
  %57 = load i8, ptr %6, align 1, !tbaa !11, !range !20, !noundef !21
  %58 = trunc i8 %57 to i1
  br i1 %58, label %16, label %59, !llvm.loop !22

59:                                               ; preds = %56
  store i1 true, ptr %7, align 1
  store i32 1, ptr %13, align 4
  %60 = load i1, ptr %7, align 1
  br i1 %60, label %62, label %61

61:                                               ; preds = %59
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #5
  br label %62

62:                                               ; preds = %61, %59
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  ret void

63:                                               ; preds = %43, %28
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  br label %64

64:                                               ; preds = %63
  %65 = load ptr, ptr %10, align 8
  %66 = load i32, ptr %11, align 4
  %67 = insertvalue { ptr, i32 } poison, ptr %65, 0
  %68 = insertvalue { ptr, i32 } %67, i32 %66, 1
  resume { ptr, i32 } %68
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx119to_stringEi(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { 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 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 4660}
!14 = !{!"_ZTS20SimulationParameters", !7, i64 0, !15, i64 64, !10, i64 76, !7, i64 80, !12, i64 4560, !16, i64 4564, !7, i64 4568, !7, i64 4596, !7, i64 4624, !12, i64 4652, !16, i64 4656, !10, i64 4660, !7, i64 4664, !10, i64 33864, !12, i64 33868, !12, i64 33869, !12, i64 33870, !10, i64 33872, !10, i64 33876, !16, i64 33880, !16, i64 33884, !10, i64 33888, !16, i64 33892, !12, i64 33896, !12, i64 33897, !16, i64 33900, !12, i64 33904, !17, i64 33908, !16, i64 35216, !10, i64 35220, !7, i64 35224, !16, i64 35236, !16, i64 35240, !7, i64 35244, !7, i64 35272, !16, i64 35300, !16, i64 35304, !10, i64 35308, !7, i64 35312, !7, i64 35340, !7, i64 35368, !7, i64 35396, !16, i64 35424, !16, i64 35428, !16, i64 35432, !7, i64 35436, !7, i64 35464, !7, i64 35492, !7, i64 35520, !7, i64 35548, !10, i64 35576, !7, i64 35580, !12, i64 35608, !12, i64 35609, !7, i64 35612, !12, i64 35640, !10, i64 35644, !12, i64 35648, !12, i64 35649, !12, i64 35650, !10, i64 35652, !7, i64 35656, !7, i64 35684, !7, i64 35712, !12, i64 35740, !7, i64 35741, !12, i64 35790, !12, i64 35791, !16, i64 35792, !16, i64 35796, !16, i64 35800, !16, i64 35804, !16, i64 35808, !16, i64 35812, !10, i64 35816, !7, i64 35820, !7, i64 35848, !16, i64 36044, !7, i64 36048, !7, i64 36076, !7, i64 36104, !7, i64 36132, !7, i64 36160, !7, i64 36188, !7, i64 36384, !16, 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, !16, i64 36648, !12, i64 36652, !7, i64 36656, !7, i64 36684, !16, i64 36712, !7, i64 36716, !16, i64 36744, !7, i64 36748, !7, i64 36776, !16, i64 36804, !12, i64 36808}
!15 = !{!"_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}
!16 = !{!"float", !7, i64 0}
!17 = !{!"_ZTS30SimulationParametersZoneValues", !16, i64 0, !16, 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, !16, i64 208, !16, 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}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = distinct !{!22, !19}


; 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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.6 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.6 = type { i64, [8 x i8] }
%"class.std::allocator.3" = type { i8 }
%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 }

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

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14LocationHelper16generateZoneNameB5cxx11ER20SimulationParameters(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 4 dereferenceable(36809) %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::__cxx11::basic_string", align 8
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::allocator.3", align 1
  tail call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #5
  %7 = getelementptr inbounds i8, ptr %1, i64 4660
  %8 = getelementptr inbounds i8, ptr %1, i64 4664
  br label %.loopexit

.loopexit:                                        ; preds = %21, %2
  %.014 = phi i32 [ 0, %2 ], [ %9, %21 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #5
  %9 = add nuw nsw i32 %.014, 1
  call void @_ZNSt7__cxx119to_stringEi(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %4, i32 noundef %9) #5
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %3, ptr noundef nonnull @.str.1, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %10 unwind label %18

10:                                               ; preds = %.loopexit
  %11 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %3) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  %12 = load i32, ptr %7, align 4, !tbaa !5
  %13 = icmp sgt i32 %12, 0
  br i1 %13, label %.lr.ph, label %.critedge

14:                                               ; preds = %21
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %15 = load i32, ptr %7, align 4, !tbaa !5
  %16 = sext i32 %15 to i64
  %17 = icmp slt i64 %indvars.iv.next, %16
  br i1 %17, label %.lr.ph, label %.critedge, !llvm.loop !14

18:                                               ; preds = %.loopexit
  %19 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  br label %25

.lr.ph:                                           ; preds = %10, %14
  %indvars.iv = phi i64 [ %indvars.iv.next, %14 ], [ 0, %10 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #5
  %20 = getelementptr inbounds [20 x %struct.SimulationParametersZone], ptr %8, i64 0, i64 %indvars.iv
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull %20, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %21 unwind label %23

21:                                               ; preds = %.lr.ph
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #5
  %22 = call noundef zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %5) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #5
  br i1 %22, label %.loopexit, label %14, !llvm.loop !16

23:                                               ; preds = %.lr.ph
  %24 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %6) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #5
  br label %25

.critedge:                                        ; preds = %10, %14
  ret void

25:                                               ; preds = %23, %18
  %.pn = phi { ptr, i32 } [ %24, %23 ], [ %19, %18 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #5
  resume { ptr, i32 } %.pn
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt7__cxx119to_stringEi(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i32 noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKNSt7__cxx1112basic_stringIS2_St11char_traitsIS2_ESaIS2_EEESC_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { 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, !11, i64 4660}
!6 = !{!"_ZTS20SimulationParameters", !7, i64 0, !9, i64 64, !11, i64 76, !7, i64 80, !10, i64 4560, !12, i64 4564, !7, i64 4568, !7, i64 4596, !7, i64 4624, !10, i64 4652, !12, i64 4656, !11, i64 4660, !7, i64 4664, !11, i64 33864, !10, i64 33868, !10, i64 33869, !10, i64 33870, !11, i64 33872, !11, i64 33876, !12, i64 33880, !12, i64 33884, !11, i64 33888, !12, i64 33892, !10, i64 33896, !10, i64 33897, !12, i64 33900, !10, i64 33904, !13, i64 33908, !12, i64 35216, !11, i64 35220, !7, i64 35224, !12, i64 35236, !12, i64 35240, !7, i64 35244, !7, i64 35272, !12, i64 35300, !12, i64 35304, !11, i64 35308, !7, i64 35312, !7, i64 35340, !7, i64 35368, !7, i64 35396, !12, i64 35424, !12, i64 35428, !12, i64 35432, !7, i64 35436, !7, i64 35464, !7, i64 35492, !7, i64 35520, !7, i64 35548, !11, i64 35576, !7, i64 35580, !10, i64 35608, !10, i64 35609, !7, i64 35612, !10, i64 35640, !11, i64 35644, !10, i64 35648, !10, i64 35649, !10, i64 35650, !11, i64 35652, !7, i64 35656, !7, i64 35684, !7, i64 35712, !10, i64 35740, !7, i64 35741, !10, i64 35790, !10, i64 35791, !12, i64 35792, !12, i64 35796, !12, i64 35800, !12, i64 35804, !12, i64 35808, !12, i64 35812, !11, i64 35816, !7, i64 35820, !7, i64 35848, !12, i64 36044, !7, i64 36048, !7, i64 36076, !7, i64 36104, !7, i64 36132, !7, i64 36160, !7, i64 36188, !7, i64 36384, !12, i64 36412, !10, i64 36416, !7, i64 36420, !7, i64 36448, !10, i64 36476, !7, i64 36480, !7, i64 36508, !7, i64 36536, !7, i64 36564, !7, i64 36592, !7, i64 36620, !12, i64 36648, !10, i64 36652, !7, i64 36656, !7, i64 36684, !12, i64 36712, !7, i64 36716, !12, i64 36744, !7, i64 36748, !7, i64 36776, !12, i64 36804, !10, i64 36808}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!"_ZTS8Features", !10, i64 0, !10, i64 1, !10, i64 2, !10, i64 3, !10, i64 4, !10, i64 5, !10, i64 6, !10, i64 7, !10, i64 8, !10, i64 9}
!10 = !{!"bool", !7, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!"_ZTS30SimulationParametersZoneValues", !12, i64 0, !12, i64 4, !7, i64 8, !7, i64 36, !7, i64 64, !7, i64 92, !10, i64 120, !7, i64 124, !7, i64 152, !7, i64 180, !12, i64 208, !12, 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}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}


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