; LLVM IR from gem5/gem5 :: ext/dsent/model/electrical/RepeatedLink.ll (ZN5DSENT12RepeatedLink8useModelEv)

; 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.LibUtil::String" = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.DSENT::TransitionInfo" = type { double, double, double, double, double, double }
%"class.DSENT::RepeatedLink" = type { %"class.DSENT::ElectricalModel", ptr, ptr, ptr }
%"class.DSENT::ElectricalModel" = type { %"class.DSENT::Model.base", %"class.std::vector", i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.DSENT::Model.base" = type <{ ptr, %"class.LibUtil::String", i8, [7 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8 }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [8 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #1

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

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

declare void @_ZNK5DSENT5Model12getParameterERKN7LibUtil6StringE(ptr dead_on_unwind writable sret(%"class.LibUtil::String") align 8, ptr noundef nonnull align 8 dereferenceable(131), ptr noundef nonnull align 8 dereferenceable(32)) #1

declare noundef i32 @_ZNK7LibUtil6String6toUIntEv(ptr noundef nonnull align 8 dereferenceable(32)) #1

declare noundef ptr @_ZN5DSENT5Model16getGenPropertiesEv(ptr noundef nonnull align 8 dereferenceable(131)) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK7LibUtil3MapINS_6StringEE3getERKS1_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5DSENT12RepeatedLink8useModelEv(ptr noundef nonnull align 8 dereferenceable(264) %0) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca %"class.LibUtil::String", align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca double, align 8
  %8 = alloca %"class.DSENT::TransitionInfo", align 8
  %9 = alloca %"class.LibUtil::String", align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.LibUtil::String", align 8
  %12 = alloca %"class.LibUtil::String", align 8
  %13 = alloca i32, align 4
  %14 = alloca %"class.LibUtil::String", align 8
  %15 = alloca double, align 8
  %16 = alloca %"class.LibUtil::String", align 8
  %17 = alloca %"class.LibUtil::String", align 8
  %18 = alloca double, align 8
  %19 = alloca %"class.LibUtil::String", align 8
  %20 = alloca %"class.LibUtil::String", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %21 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %4) #6
  call void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef @.str.22)
  %22 = invoke noundef ptr @_ZN5DSENT15ElectricalModel12getInputPortERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(240) %21, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %23 unwind label %110

23:                                               ; preds = %1
  %24 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK5DSENT8PortInfo17getTransitionInfoEv(ptr noundef nonnull align 8 dereferenceable(88) %22)
          to label %25 unwind label %110

25:                                               ; preds = %23
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %4) #6
  store ptr %24, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = call noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions00Ev(ptr noundef nonnull align 8 dereferenceable(48) %26)
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = call noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions11Ev(ptr noundef nonnull align 8 dereferenceable(48) %28)
  %30 = fadd double %27, %29
  %31 = fdiv double %30, 2.000000e+00
  store double %31, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %8) #6
  %32 = load double, ptr %7, align 8, !tbaa !9
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = call noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions01Ev(ptr noundef nonnull align 8 dereferenceable(48) %33)
  %35 = load double, ptr %7, align 8, !tbaa !9
  call void @_ZN5DSENT14TransitionInfoC1Eddd(ptr noundef nonnull align 8 dereferenceable(48) %8, double noundef %32, double noundef %34, double noundef %35)
  %36 = getelementptr inbounds %"class.DSENT::RepeatedLink", ptr %21, i32 0, i32 1
  %37 = load ptr, ptr %36, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef @.str.35)
          to label %38 unwind label %114

38:                                               ; preds = %25
  %39 = invoke noundef ptr @_ZN5DSENT15ElectricalModel12getInputPortERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(240) %37, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %40 unwind label %118

40:                                               ; preds = %38
  invoke void @_ZN5DSENT8PortInfo17setTransitionInfoERKNS_14TransitionInfoE(ptr noundef nonnull align 8 dereferenceable(88) %39, ptr noundef nonnull align 8 dereferenceable(48) %8)
          to label %41 unwind label %118

41:                                               ; preds = %40
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #6
  %42 = getelementptr inbounds %"class.DSENT::RepeatedLink", ptr %21, i32 0, i32 1
  %43 = load ptr, ptr %42, align 8, !tbaa !11
  invoke void @_ZN5DSENT5Model3useEv(ptr noundef nonnull align 8 dereferenceable(131) %43)
          to label %44 unwind label %123

44:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef @.str)
          to label %45 unwind label %127

45:                                               ; preds = %44
  invoke void @_ZNK5DSENT5Model12getParameterERKN7LibUtil6StringE(ptr dead_on_unwind writable sret(%"class.LibUtil::String") align 8 %11, ptr noundef nonnull align 8 dereferenceable(131) %21, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %46 unwind label %131

46:                                               ; preds = %45
  %47 = invoke noundef i32 @_ZNK7LibUtil6String6toUIntEv(ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %48 unwind label %135

48:                                               ; preds = %46
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #6
  store i32 %47, ptr %10, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %49 = invoke noundef ptr @_ZN5DSENT5Model16getGenPropertiesEv(ptr noundef nonnull align 8 dereferenceable(131) %21)
          to label %50 unwind label %141

50:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef @.str.49)
          to label %51 unwind label %145

51:                                               ; preds = %50
  %52 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK7LibUtil3MapINS_6StringEE3getERKS1_(ptr noundef nonnull align 8 dereferenceable(56) %49, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %53 unwind label %149

53:                                               ; preds = %51
  %54 = invoke noundef i32 @_ZNK7LibUtil6String6toUIntEv(ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %55 unwind label %149

55:                                               ; preds = %53
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #6
  store i32 %54, ptr %13, align 4, !tbaa !25
  %56 = load ptr, ptr %21, align 8, !tbaa !26
  %57 = getelementptr inbounds ptr, ptr %56, i64 10
  %58 = load ptr, ptr %57, align 8
  invoke void %58(ptr noundef nonnull align 8 dereferenceable(264) %21)
          to label %59 unwind label %141

59:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  store double 0.000000e+00, ptr %15, align 8, !tbaa !9
  %60 = getelementptr inbounds %"class.DSENT::RepeatedLink", ptr %21, i32 0, i32 1
  %61 = load ptr, ptr %60, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef @.str.50)
          to label %62 unwind label %154

62:                                               ; preds = %59
  %63 = invoke noundef ptr @_ZN5DSENT5Model17getNddPowerResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %61, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %64 unwind label %158

64:                                               ; preds = %62
  %65 = load ptr, ptr %63, align 8, !tbaa !26
  %66 = getelementptr inbounds ptr, ptr %65, i64 5
  %67 = load ptr, ptr %66, align 8
  %68 = invoke noundef double %67(ptr noundef nonnull align 8 dereferenceable(64) %63)
          to label %69 unwind label %158

69:                                               ; preds = %64
  %70 = load i32, ptr %13, align 4, !tbaa !25
  %71 = uitofp i32 %70 to double
  %72 = fmul double %68, %71
  %73 = load i32, ptr %10, align 4, !tbaa !25
  %74 = uitofp i32 %73 to double
  %75 = load double, ptr %15, align 8, !tbaa !9
  %76 = call double @llvm.fmuladd.f64(double %72, double %74, double %75)
  store double %76, ptr %15, align 8, !tbaa !9
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.50)
          to label %77 unwind label %163

77:                                               ; preds = %69
  %78 = invoke noundef ptr @_ZN5DSENT5Model17getNddPowerResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %21, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %79 unwind label %167

79:                                               ; preds = %77
  %80 = load double, ptr %15, align 8, !tbaa !9
  %81 = load ptr, ptr %78, align 8, !tbaa !26
  %82 = getelementptr inbounds ptr, ptr %81, i64 2
  %83 = load ptr, ptr %82, align 8
  invoke void %83(ptr noundef nonnull align 8 dereferenceable(64) %78, double noundef %80)
          to label %84 unwind label %167

84:                                               ; preds = %79
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  store double 0.000000e+00, ptr %18, align 8, !tbaa !9
  %85 = getelementptr inbounds %"class.DSENT::RepeatedLink", ptr %21, i32 0, i32 1
  %86 = load ptr, ptr %85, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef @.str.30)
          to label %87 unwind label %172

87:                                               ; preds = %84
  %88 = invoke noundef ptr @_ZN5DSENT5Model14getEventResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %86, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %89 unwind label %176

89:                                               ; preds = %87
  %90 = load ptr, ptr %88, align 8, !tbaa !26
  %91 = getelementptr inbounds ptr, ptr %90, i64 5
  %92 = load ptr, ptr %91, align 8
  %93 = invoke noundef double %92(ptr noundef nonnull align 8 dereferenceable(64) %88)
          to label %94 unwind label %176

94:                                               ; preds = %89
  %95 = load i32, ptr %13, align 4, !tbaa !25
  %96 = uitofp i32 %95 to double
  %97 = fmul double %93, %96
  %98 = load i32, ptr %10, align 4, !tbaa !25
  %99 = uitofp i32 %98 to double
  %100 = load double, ptr %18, align 8, !tbaa !9
  %101 = call double @llvm.fmuladd.f64(double %97, double %99, double %100)
  store double %101, ptr %18, align 8, !tbaa !9
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.24)
          to label %102 unwind label %181

102:                                              ; preds = %94
  %103 = invoke noundef ptr @_ZN5DSENT5Model14getEventResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %21, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %104 unwind label %185

104:                                              ; preds = %102
  %105 = load double, ptr %18, align 8, !tbaa !9
  %106 = load ptr, ptr %103, align 8, !tbaa !26
  %107 = getelementptr inbounds ptr, ptr %106, i64 2
  %108 = load ptr, ptr %107, align 8
  invoke void %108(ptr noundef nonnull align 8 dereferenceable(64) %103, double noundef %105)
          to label %109 unwind label %185

109:                                              ; preds = %104
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @_ZN5DSENT14TransitionInfoD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #6
  ret void

110:                                              ; preds = %23, %1
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %5, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %4) #6
  br label %195

114:                                              ; preds = %25
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %5, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %6, align 4
  br label %122

118:                                              ; preds = %40, %38
  %119 = landingpad { ptr, i32 }
          cleanup
  %120 = extractvalue { ptr, i32 } %119, 0
  store ptr %120, ptr %5, align 8
  %121 = extractvalue { ptr, i32 } %119, 1
  store i32 %121, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  br label %122

122:                                              ; preds = %118, %114
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #6
  br label %194

123:                                              ; preds = %41
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %5, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %6, align 4
  br label %194

127:                                              ; preds = %44
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %5, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %6, align 4
  br label %140

131:                                              ; preds = %45
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %5, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %6, align 4
  br label %139

135:                                              ; preds = %46
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %5, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  br label %139

139:                                              ; preds = %135, %131
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  br label %140

140:                                              ; preds = %139, %127
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #6
  br label %193

141:                                              ; preds = %55, %48
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %5, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %6, align 4
  br label %192

145:                                              ; preds = %50
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %5, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %6, align 4
  br label %153

149:                                              ; preds = %53, %51
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %5, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  br label %153

153:                                              ; preds = %149, %145
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #6
  br label %192

154:                                              ; preds = %59
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %5, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %6, align 4
  br label %162

158:                                              ; preds = %64, %62
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %5, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  br label %162

162:                                              ; preds = %158, %154
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #6
  br label %191

163:                                              ; preds = %69
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %5, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %6, align 4
  br label %171

167:                                              ; preds = %79, %77
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %5, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %171

171:                                              ; preds = %167, %163
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #6
  br label %191

172:                                              ; preds = %84
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %5, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %6, align 4
  br label %180

176:                                              ; preds = %89, %87
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %5, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %180

180:                                              ; preds = %176, %172
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  br label %190

181:                                              ; preds = %94
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %5, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %6, align 4
  br label %189

185:                                              ; preds = %104, %102
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %5, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %6, align 4
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  br label %189

189:                                              ; preds = %185, %181
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #6
  br label %190

190:                                              ; preds = %189, %180
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %191

191:                                              ; preds = %190, %171, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %192

192:                                              ; preds = %191, %153, %141
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %193

193:                                              ; preds = %192, %140
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %194

194:                                              ; preds = %193, %123, %122
  call void @_ZN5DSENT14TransitionInfoD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %8) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  br label %195

195:                                              ; preds = %194, %110
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #6
  br label %196

196:                                              ; preds = %195
  %197 = load ptr, ptr %5, align 8
  %198 = load i32, ptr %6, align 4
  %199 = insertvalue { ptr, i32 } poison, ptr %197, 0
  %200 = insertvalue { ptr, i32 } %199, i32 %198, 1
  resume { ptr, i32 } %200
}

declare noundef ptr @_ZN5DSENT15ElectricalModel12getInputPortERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(240), ptr noundef nonnull align 8 dereferenceable(32)) #1

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK5DSENT8PortInfo17getTransitionInfoEv(ptr noundef nonnull align 8 dereferenceable(88)) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions00Ev(ptr noundef nonnull align 8 dereferenceable(48)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions11Ev(ptr noundef nonnull align 8 dereferenceable(48)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions01Ev(ptr noundef nonnull align 8 dereferenceable(48)) #4 align 2

declare void @_ZN5DSENT14TransitionInfoC1Eddd(ptr noundef nonnull align 8 dereferenceable(48), double noundef, double noundef, double noundef) unnamed_addr #1

declare void @_ZN5DSENT8PortInfo17setTransitionInfoERKNS_14TransitionInfoE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(48)) #1

declare void @_ZN5DSENT5Model3useEv(ptr noundef nonnull align 8 dereferenceable(131)) #1

declare noundef ptr @_ZN5DSENT5Model17getNddPowerResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131), ptr noundef nonnull align 8 dereferenceable(32)) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #5

declare noundef ptr @_ZN5DSENT5Model14getEventResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131), ptr noundef nonnull align 8 dereferenceable(32)) #1

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !6, i64 240}
!12 = !{!"_ZTSN5DSENT12RepeatedLinkE", !13, i64 0, !6, i64 240, !6, i64 248, !6, i64 256}
!13 = !{!"_ZTSN5DSENT15ElectricalModelE", !14, i64 0, !20, i64 136, !24, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232}
!14 = !{!"_ZTSN5DSENT5ModelE", !15, i64 8, !19, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !19, i64 128, !19, i64 129, !19, i64 130}
!15 = !{!"_ZTSN7LibUtil6StringE", !16, i64 0}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !17, i64 0, !18, i64 8, !7, i64 16}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"_ZTSSt6vectorIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"int", !7, i64 0}
!25 = !{!24, !24, i64 0}
!26 = !{!27, !27, i64 0}
!27 = !{!"vtable pointer", !8, i64 0}


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

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [8 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #1

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

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

declare void @_ZNK5DSENT5Model12getParameterERKN7LibUtil6StringE(ptr dead_on_unwind writable sret(%"class.LibUtil::String") align 8, ptr noundef nonnull align 8 dereferenceable(131), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

declare noundef i32 @_ZNK7LibUtil6String6toUIntEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

declare noundef ptr @_ZN5DSENT5Model16getGenPropertiesEv(ptr noundef nonnull align 8 dereferenceable(131)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK7LibUtil3MapINS_6StringEE3getERKS1_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5DSENT12RepeatedLink8useModelEv(ptr noundef nonnull align 8 dereferenceable(264) %0) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.LibUtil::String", align 8
  %3 = alloca %"class.DSENT::TransitionInfo", align 8
  %4 = alloca %"class.LibUtil::String", align 8
  %5 = alloca %"class.LibUtil::String", align 8
  %6 = alloca %"class.LibUtil::String", align 8
  %7 = alloca %"class.LibUtil::String", align 8
  %8 = alloca %"class.LibUtil::String", align 8
  %9 = alloca %"class.LibUtil::String", align 8
  %10 = alloca %"class.LibUtil::String", align 8
  %11 = alloca %"class.LibUtil::String", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #6
  call void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str.22)
  %12 = invoke noundef ptr @_ZN5DSENT15ElectricalModel12getInputPortERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(240) %0, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %13 unwind label %82

13:                                               ; preds = %1
  %14 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK5DSENT8PortInfo17getTransitionInfoEv(ptr noundef nonnull align 8 dereferenceable(88) %12)
          to label %15 unwind label %82

15:                                               ; preds = %13
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #6
  %16 = call noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions00Ev(ptr noundef nonnull align 8 dereferenceable(48) %14)
  %17 = call noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions11Ev(ptr noundef nonnull align 8 dereferenceable(48) %14)
  %18 = fadd double %16, %17
  %19 = fmul double %18, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %3) #6
  %20 = call noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions01Ev(ptr noundef nonnull align 8 dereferenceable(48) %14)
  call void @_ZN5DSENT14TransitionInfoC1Eddd(ptr noundef nonnull align 8 dereferenceable(48) %3, double noundef %19, double noundef %20, double noundef %19)
  %21 = getelementptr inbounds i8, ptr %0, i64 240
  %22 = load ptr, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.35)
          to label %23 unwind label %84

23:                                               ; preds = %15
  %24 = invoke noundef ptr @_ZN5DSENT15ElectricalModel12getInputPortERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(240) %22, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %25 unwind label %86

25:                                               ; preds = %23
  invoke void @_ZN5DSENT8PortInfo17setTransitionInfoERKNS_14TransitionInfoE(ptr noundef nonnull align 8 dereferenceable(88) %24, ptr noundef nonnull align 8 dereferenceable(48) %3)
          to label %26 unwind label %86

26:                                               ; preds = %25
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  %27 = load ptr, ptr %21, align 8, !tbaa !5
  invoke void @_ZN5DSENT5Model3useEv(ptr noundef nonnull align 8 dereferenceable(131) %27)
          to label %28 unwind label %89

28:                                               ; preds = %26
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str)
          to label %29 unwind label %91

29:                                               ; preds = %28
  invoke void @_ZNK5DSENT5Model12getParameterERKN7LibUtil6StringE(ptr dead_on_unwind nonnull writable sret(%"class.LibUtil::String") align 8 %5, ptr noundef nonnull align 8 dereferenceable(131) %0, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %30 unwind label %93

30:                                               ; preds = %29
  %31 = invoke noundef i32 @_ZNK7LibUtil6String6toUIntEv(ptr noundef nonnull align 8 dereferenceable(32) %5)
          to label %32 unwind label %95

32:                                               ; preds = %30
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  %33 = invoke noundef ptr @_ZN5DSENT5Model16getGenPropertiesEv(ptr noundef nonnull align 8 dereferenceable(131) %0)
          to label %34 unwind label %99

34:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.49)
          to label %35 unwind label %101

35:                                               ; preds = %34
  %36 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK7LibUtil3MapINS_6StringEE3getERKS1_(ptr noundef nonnull align 8 dereferenceable(56) %33, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %37 unwind label %103

37:                                               ; preds = %35
  %38 = invoke noundef i32 @_ZNK7LibUtil6String6toUIntEv(ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %39 unwind label %103

39:                                               ; preds = %37
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  %40 = load ptr, ptr %0, align 8, !tbaa !22
  %41 = getelementptr inbounds i8, ptr %40, i64 80
  %42 = load ptr, ptr %41, align 8
  invoke void %42(ptr noundef nonnull align 8 dereferenceable(264) %0)
          to label %43 unwind label %99

43:                                               ; preds = %39
  %44 = load ptr, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.50)
          to label %45 unwind label %106

45:                                               ; preds = %43
  %46 = invoke noundef ptr @_ZN5DSENT5Model17getNddPowerResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %44, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %47 unwind label %108

47:                                               ; preds = %45
  %48 = load ptr, ptr %46, align 8, !tbaa !22
  %49 = getelementptr inbounds i8, ptr %48, i64 40
  %50 = load ptr, ptr %49, align 8
  %51 = invoke noundef double %50(ptr noundef nonnull align 8 dereferenceable(64) %46)
          to label %52 unwind label %108

52:                                               ; preds = %47
  %53 = uitofp i32 %38 to double
  %54 = fmul double %51, %53
  %55 = uitofp i32 %31 to double
  %56 = call double @llvm.fmuladd.f64(double %54, double %55, double 0.000000e+00)
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull @.str.50)
          to label %57 unwind label %111

57:                                               ; preds = %52
  %58 = invoke noundef ptr @_ZN5DSENT5Model17getNddPowerResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %0, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %59 unwind label %113

59:                                               ; preds = %57
  %60 = load ptr, ptr %58, align 8, !tbaa !22
  %61 = getelementptr inbounds i8, ptr %60, i64 16
  %62 = load ptr, ptr %61, align 8
  invoke void %62(ptr noundef nonnull align 8 dereferenceable(64) %58, double noundef %56)
          to label %63 unwind label %113

63:                                               ; preds = %59
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  %64 = load ptr, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.30)
          to label %65 unwind label %116

65:                                               ; preds = %63
  %66 = invoke noundef ptr @_ZN5DSENT5Model14getEventResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %64, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %67 unwind label %118

67:                                               ; preds = %65
  %68 = load ptr, ptr %66, align 8, !tbaa !22
  %69 = getelementptr inbounds i8, ptr %68, i64 40
  %70 = load ptr, ptr %69, align 8
  %71 = invoke noundef double %70(ptr noundef nonnull align 8 dereferenceable(64) %66)
          to label %72 unwind label %118

72:                                               ; preds = %67
  %73 = fmul double %71, %53
  %74 = call double @llvm.fmuladd.f64(double %73, double %55, double 0.000000e+00)
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  invoke void @_ZN7LibUtil6StringC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.24)
          to label %75 unwind label %121

75:                                               ; preds = %72
  %76 = invoke noundef ptr @_ZN5DSENT5Model14getEventResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131) %0, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %77 unwind label %123

77:                                               ; preds = %75
  %78 = load ptr, ptr %76, align 8, !tbaa !22
  %79 = getelementptr inbounds i8, ptr %78, i64 16
  %80 = load ptr, ptr %79, align 8
  invoke void %80(ptr noundef nonnull align 8 dereferenceable(64) %76, double noundef %74)
          to label %81 unwind label %123

81:                                               ; preds = %77
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  call void @_ZN5DSENT14TransitionInfoD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %3) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %3) #6
  ret void

82:                                               ; preds = %13, %1
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #6
  br label %127

84:                                               ; preds = %15
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %88

86:                                               ; preds = %25, %23
  %87 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  br label %88

88:                                               ; preds = %86, %84
  %.pn = phi { ptr, i32 } [ %87, %86 ], [ %85, %84 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  br label %126

89:                                               ; preds = %26
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %126

91:                                               ; preds = %28
  %92 = landingpad { ptr, i32 }
          cleanup
  br label %98

93:                                               ; preds = %29
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %97

95:                                               ; preds = %30
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  br label %97

97:                                               ; preds = %95, %93
  %.pn30 = phi { ptr, i32 } [ %96, %95 ], [ %94, %93 ]
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br label %98

98:                                               ; preds = %97, %91
  %.pn30.pn = phi { ptr, i32 } [ %.pn30, %97 ], [ %92, %91 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  br label %126

99:                                               ; preds = %39, %32
  %100 = landingpad { ptr, i32 }
          cleanup
  br label %126

101:                                              ; preds = %34
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %105

103:                                              ; preds = %37, %35
  %104 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  br label %105

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

106:                                              ; preds = %43
  %107 = landingpad { ptr, i32 }
          cleanup
  br label %110

108:                                              ; preds = %47, %45
  %109 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  br label %110

110:                                              ; preds = %108, %106
  %.pn35 = phi { ptr, i32 } [ %109, %108 ], [ %107, %106 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  br label %126

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

113:                                              ; preds = %59, %57
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  br label %115

115:                                              ; preds = %113, %111
  %.pn37 = phi { ptr, i32 } [ %114, %113 ], [ %112, %111 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  br label %126

116:                                              ; preds = %63
  %117 = landingpad { ptr, i32 }
          cleanup
  br label %120

118:                                              ; preds = %67, %65
  %119 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  br label %120

120:                                              ; preds = %118, %116
  %.pn39 = phi { ptr, i32 } [ %119, %118 ], [ %117, %116 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %126

121:                                              ; preds = %72
  %122 = landingpad { ptr, i32 }
          cleanup
  br label %125

123:                                              ; preds = %77, %75
  %124 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7LibUtil6StringD1Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  br label %125

125:                                              ; preds = %123, %121
  %.pn41 = phi { ptr, i32 } [ %124, %123 ], [ %122, %121 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  br label %126

126:                                              ; preds = %98, %110, %115, %125, %120, %105, %99, %89, %88
  %.pn41.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %90, %89 ], [ %.pn, %88 ], [ %.pn30.pn, %98 ], [ %100, %99 ], [ %.pn33, %105 ], [ %.pn37, %115 ], [ %.pn35, %110 ], [ %.pn41, %125 ], [ %.pn39, %120 ]
  call void @_ZN5DSENT14TransitionInfoD1Ev(ptr noundef nonnull align 8 dereferenceable(48) %3) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %3) #6
  br label %127

127:                                              ; preds = %126, %82
  %.pn41.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn41.pn.pn.pn.pn.pn, %126 ], [ %83, %82 ]
  resume { ptr, i32 } %.pn41.pn.pn.pn.pn.pn.pn
}

declare noundef ptr @_ZN5DSENT15ElectricalModel12getInputPortERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(240), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK5DSENT8PortInfo17getTransitionInfoEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions00Ev(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions11Ev(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK5DSENT14TransitionInfo22getNumberTransitions01Ev(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #4 align 2

declare void @_ZN5DSENT14TransitionInfoC1Eddd(ptr noundef nonnull align 8 dereferenceable(48), double noundef, double noundef, double noundef) unnamed_addr #1

declare void @_ZN5DSENT8PortInfo17setTransitionInfoERKNS_14TransitionInfoE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #1

declare void @_ZN5DSENT5Model3useEv(ptr noundef nonnull align 8 dereferenceable(131)) local_unnamed_addr #1

declare noundef ptr @_ZN5DSENT5Model17getNddPowerResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #5

declare noundef ptr @_ZN5DSENT5Model14getEventResultERKN7LibUtil6StringE(ptr noundef nonnull align 8 dereferenceable(131), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !12, i64 240}
!6 = !{!"_ZTSN5DSENT12RepeatedLinkE", !7, i64 0, !12, i64 240, !12, i64 248, !12, i64 256}
!7 = !{!"_ZTSN5DSENT15ElectricalModelE", !8, i64 0, !17, i64 136, !21, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !12, i64 224, !12, i64 232}
!8 = !{!"_ZTSN5DSENT5ModelE", !9, i64 8, !16, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !16, i64 128, !16, i64 129, !16, i64 130}
!9 = !{!"_ZTSN7LibUtil6StringE", !10, i64 0}
!10 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !11, i64 0, !15, i64 8, !13, i64 16}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !12, i64 0}
!12 = !{!"any pointer", !13, i64 0}
!13 = !{!"omnipotent char", !14, i64 0}
!14 = !{!"Simple C++ TBAA"}
!15 = !{!"long", !13, i64 0}
!16 = !{!"bool", !13, i64 0}
!17 = !{!"_ZTSSt6vectorIdSaIdEE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!21 = !{!"int", !13, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"vtable pointer", !14, i64 0}


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