; LLVM IR from gem5/gem5 :: ext/mcpat/cacti/htree2.ll (ZN6Htree213output_bufferEddd)

; 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.TechnologyParameter = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i64, %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::ScalingFactor", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType" }
%"class.TechnologyParameter::DeviceType" = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::InterconnectType" = type { double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::ScalingFactor" = type { double, double, double }
%"class.TechnologyParameter::MemoryType" = type { double, double, double, double, double, double }
%class.Wire = type { %class.Component, i32, double, double, i32, double, double, double, double, double, i32, double, double, double, %"class.std::__cxx11::list", %class.Component, %class.Component, %class.Component, double, ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<Component, std::allocator<Component>>::_List_impl" }
%"struct.std::__cxx11::_List_base<Component, std::allocator<Component>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%class.Component = type { %class.Area, %class.powerDef, %class.powerDef, double, double }
%class.Area = type { double, double, double }
%class.powerDef = type { %class.powerComponents, %class.powerComponents, %class.powerComponents }
%class.powerComponents = type { double, double, double, double, double }
%class.Htree2 = type { %class.Component, double, double, double, %class.powerDef, double, double, i32, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i8, i8, i32, double, double, ptr }

@g_tp = external global %class.TechnologyParameter, align 8

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 @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264), i32 noundef, double noundef, i32 noundef, double noundef, double noundef, i32 noundef, double noundef, ptr noundef) unnamed_addr #1

declare noundef double @_Z7tr_R_ondiibbb(double noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) #1

declare noundef double @_Z8drain_C_diiidbbb(double noundef, i32 noundef, i32 noundef, i32 noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) #1

declare noundef double @_Z6gate_Cddbbb(double noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) #1

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

declare noundef double @_Z8horowitzddddi(double noundef, double noundef, double noundef, double noundef, i32 noundef) #1

declare noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef, double noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext, i32 noundef) #1

declare noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef, double noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext, i32 noundef) #1

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

; Function Attrs: nounwind
declare void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Htree213output_bufferEddd(ptr noundef nonnull align 8 dereferenceable(544) %0, double noundef %1, double noundef %2, double noundef %3) #4 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca %class.Wire, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store double %1, ptr %6, align 8, !tbaa !9
  store double %2, ptr %7, align 8, !tbaa !9
  store double %3, ptr %8, align 8, !tbaa !9
  %21 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 1264, ptr %9) #5
  %22 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %23 = load i32, ptr %22, align 8, !tbaa !11
  %24 = load double, ptr %8, align 8, !tbaa !9
  call void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %9, i32 noundef %23, double noundef %24, i32 noundef 1, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef 0, double noundef 2.200000e-02, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %25 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %26 = load ptr, ptr %25, align 8, !tbaa !21
  %27 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %26, i32 0, i32 19
  %28 = load double, ptr %27, align 8, !tbaa !22
  store double %28, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %29 = load double, ptr %6, align 8, !tbaa !9
  %30 = load double, ptr %10, align 8, !tbaa !9
  %31 = fadd double 1.000000e+00, %30
  %32 = fmul double %29, %31
  %33 = load double, ptr %10, align 8, !tbaa !9
  %34 = fadd double 2.000000e+00, %33
  %35 = fadd double %34, 1.000000e+00
  %36 = load double, ptr %10, align 8, !tbaa !9
  %37 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %36, double %35)
  %38 = fdiv double %32, %37
  store double %38, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %39 = load double, ptr %7, align 8, !tbaa !9
  %40 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %41 = load double, ptr %40, align 8, !tbaa !24
  %42 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %43 = load double, ptr %42, align 8, !tbaa !25
  %44 = fadd double %41, %43
  %45 = fmul double %39, %44
  %46 = invoke noundef double @_Z6gate_Cddbbb(double noundef %45, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %47 unwind label %656

47:                                               ; preds = %4
  %48 = load double, ptr %8, align 8, !tbaa !9
  %49 = fmul double %48, 0x3EB0C6F7A0B5ED8D
  %50 = invoke noundef double @_ZN4Wire8wire_capEdb(ptr noundef nonnull align 8 dereferenceable(1264) %9, double noundef %49, i1 noundef zeroext true)
          to label %51 unwind label %656

51:                                               ; preds = %47
  %52 = fadd double %46, %50
  %53 = load double, ptr %7, align 8, !tbaa !9
  %54 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %55 = load double, ptr %54, align 8, !tbaa !24
  %56 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %57 = load double, ptr %56, align 8, !tbaa !25
  %58 = fadd double %55, %57
  %59 = fmul double %53, %58
  %60 = invoke noundef double @_Z6gate_Cddbbb(double noundef %59, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %61 unwind label %656

61:                                               ; preds = %51
  %62 = fdiv double %52, %60
  store double %62, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %63 = load double, ptr %6, align 8, !tbaa !9
  %64 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %65 = load double, ptr %64, align 8, !tbaa !24
  %66 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %67 = load double, ptr %66, align 8, !tbaa !25
  %68 = fadd double %65, %67
  %69 = fmul double %63, %68
  %70 = invoke noundef double @_Z6gate_Cddbbb(double noundef %69, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %71 unwind label %660

71:                                               ; preds = %61
  %72 = fmul double %70, 1.000000e+00
  %73 = fdiv double %72, 2.000000e+00
  %74 = load double, ptr %12, align 8, !tbaa !9
  %75 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %76 = load double, ptr %75, align 8, !tbaa !25
  %77 = invoke noundef double @_Z6gate_Cddbbb(double noundef %76, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %78 unwind label %660

78:                                               ; preds = %71
  %79 = fmul double %74, %77
  %80 = fdiv double %73, %79
  store double %80, ptr %15, align 8, !tbaa !9
  %81 = load double, ptr %11, align 8, !tbaa !9
  %82 = fcmp olt double %81, 1.000000e+00
  br i1 %82, label %83, label %84

83:                                               ; preds = %78
  br label %86

84:                                               ; preds = %78
  %85 = load double, ptr %11, align 8, !tbaa !9
  br label %86

86:                                               ; preds = %84, %83
  %87 = phi double [ 1.000000e+00, %83 ], [ %85, %84 ]
  store double %87, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %88 = load double, ptr %11, align 8, !tbaa !9
  %89 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %90 = load double, ptr %89, align 8, !tbaa !25
  %91 = fmul double %88, %90
  %92 = invoke noundef double @_Z7tr_R_ondiibbb(double noundef %91, i32 noundef 0, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %93 unwind label %664

93:                                               ; preds = %86
  %94 = fmul double 2.000000e+00, %92
  store double %94, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %95 = load double, ptr %15, align 8, !tbaa !9
  %96 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %97 = load double, ptr %96, align 8, !tbaa !24
  %98 = fmul double %95, %97
  %99 = invoke noundef double @_Z7tr_R_ondiibbb(double noundef %98, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %100 unwind label %668

100:                                              ; preds = %93
  store double %99, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %101 = load double, ptr %11, align 8, !tbaa !9
  %102 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %103 = load double, ptr %102, align 8, !tbaa !24
  %104 = fmul double %101, %103
  %105 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %106 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %104, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %105, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %107 unwind label %672

107:                                              ; preds = %100
  %108 = load double, ptr %11, align 8, !tbaa !9
  %109 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %110 = load double, ptr %109, align 8, !tbaa !25
  %111 = fmul double %108, %110
  %112 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %113 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %111, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %112, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %114 unwind label %672

114:                                              ; preds = %107
  %115 = call double @llvm.fmuladd.f64(double %113, double 2.000000e+00, double %106)
  %116 = load double, ptr %15, align 8, !tbaa !9
  %117 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %118 = load double, ptr %117, align 8, !tbaa !25
  %119 = fmul double %116, %118
  %120 = invoke noundef double @_Z6gate_Cddbbb(double noundef %119, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %121 unwind label %672

121:                                              ; preds = %114
  %122 = fadd double %115, %120
  store double %122, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %123 = load double, ptr %15, align 8, !tbaa !9
  %124 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %125 = load double, ptr %124, align 8, !tbaa !25
  %126 = fmul double %123, %125
  %127 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %128 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %126, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %127, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %129 unwind label %676

129:                                              ; preds = %121
  %130 = load double, ptr %15, align 8, !tbaa !9
  %131 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %132 = load double, ptr %131, align 8, !tbaa !24
  %133 = fmul double %130, %132
  %134 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %135 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %133, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %134, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %136 unwind label %676

136:                                              ; preds = %129
  %137 = fadd double %128, %135
  %138 = load double, ptr %6, align 8, !tbaa !9
  %139 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %140 = load double, ptr %139, align 8, !tbaa !24
  %141 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %142 = load double, ptr %141, align 8, !tbaa !25
  %143 = fadd double %140, %142
  %144 = fmul double %138, %143
  %145 = invoke noundef double @_Z6gate_Cddbbb(double noundef %144, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %146 unwind label %676

146:                                              ; preds = %136
  %147 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %137, double %145)
  store double %147, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %148 = load double, ptr %16, align 8, !tbaa !9
  %149 = load double, ptr %18, align 8, !tbaa !9
  %150 = load double, ptr %16, align 8, !tbaa !9
  %151 = load double, ptr %17, align 8, !tbaa !9
  %152 = fadd double %150, %151
  %153 = load double, ptr %19, align 8, !tbaa !9
  %154 = fmul double %152, %153
  %155 = call double @llvm.fmuladd.f64(double %148, double %149, double %154)
  store double %155, ptr %20, align 8, !tbaa !9
  %156 = getelementptr inbounds %class.Wire, ptr %9, i32 0, i32 9
  %157 = load double, ptr %156, align 8, !tbaa !32
  %158 = load double, ptr %20, align 8, !tbaa !9
  %159 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %160 = load ptr, ptr %159, align 8, !tbaa !21
  %161 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %160, i32 0, i32 10
  %162 = load double, ptr %161, align 8, !tbaa !40
  %163 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %164 = load ptr, ptr %163, align 8, !tbaa !21
  %165 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %164, i32 0, i32 9
  %166 = load double, ptr %165, align 8, !tbaa !41
  %167 = fdiv double %162, %166
  %168 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %169 = load ptr, ptr %168, align 8, !tbaa !21
  %170 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %169, i32 0, i32 10
  %171 = load double, ptr %170, align 8, !tbaa !40
  %172 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %173 = load ptr, ptr %172, align 8, !tbaa !21
  %174 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %173, i32 0, i32 9
  %175 = load double, ptr %174, align 8, !tbaa !41
  %176 = fdiv double %171, %175
  %177 = invoke noundef double @_Z8horowitzddddi(double noundef %157, double noundef %158, double noundef %167, double noundef %176, i32 noundef 1)
          to label %178 unwind label %680

178:                                              ; preds = %146
  %179 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 3
  %180 = load double, ptr %179, align 8, !tbaa !42
  %181 = fadd double %180, %177
  store double %181, ptr %179, align 8, !tbaa !42
  %182 = load double, ptr %11, align 8, !tbaa !9
  %183 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %184 = load double, ptr %183, align 8, !tbaa !25
  %185 = fmul double %182, %184
  %186 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %187 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %185, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %186, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %188 unwind label %680

188:                                              ; preds = %178
  %189 = load double, ptr %11, align 8, !tbaa !9
  %190 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %191 = load double, ptr %190, align 8, !tbaa !24
  %192 = fmul double %189, %191
  %193 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %194 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %192, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %193, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %195 unwind label %680

195:                                              ; preds = %188
  %196 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %187, double %194)
  %197 = load double, ptr %15, align 8, !tbaa !9
  %198 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %199 = load double, ptr %198, align 8, !tbaa !25
  %200 = fmul double %197, %199
  %201 = invoke noundef double @_Z6gate_Cddbbb(double noundef %200, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %202 unwind label %680

202:                                              ; preds = %195
  %203 = fadd double %196, %201
  %204 = fmul double 5.000000e-01, %203
  %205 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %206 = load ptr, ptr %205, align 8, !tbaa !21
  %207 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %206, i32 0, i32 9
  %208 = load double, ptr %207, align 8, !tbaa !41
  %209 = fmul double %204, %208
  %210 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %211 = load ptr, ptr %210, align 8, !tbaa !21
  %212 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %211, i32 0, i32 9
  %213 = load double, ptr %212, align 8, !tbaa !41
  %214 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %215 = getelementptr inbounds %class.powerDef, ptr %214, i32 0, i32 0
  %216 = getelementptr inbounds %class.powerComponents, ptr %215, i32 0, i32 0
  %217 = load double, ptr %216, align 8, !tbaa !43
  %218 = call double @llvm.fmuladd.f64(double %209, double %213, double %217)
  store double %218, ptr %216, align 8, !tbaa !43
  %219 = load double, ptr %11, align 8, !tbaa !9
  %220 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %221 = load double, ptr %220, align 8, !tbaa !25
  %222 = fmul double %219, %221
  %223 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %224 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %222, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %223, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %225 unwind label %680

225:                                              ; preds = %202
  %226 = load double, ptr %11, align 8, !tbaa !9
  %227 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %228 = load double, ptr %227, align 8, !tbaa !24
  %229 = fmul double %226, %228
  %230 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %231 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %229, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %230, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %232 unwind label %680

232:                                              ; preds = %225
  %233 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %224, double %231)
  %234 = load double, ptr %15, align 8, !tbaa !9
  %235 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %236 = load double, ptr %235, align 8, !tbaa !25
  %237 = fmul double %234, %236
  %238 = invoke noundef double @_Z6gate_Cddbbb(double noundef %237, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %239 unwind label %680

239:                                              ; preds = %232
  %240 = fadd double %233, %238
  %241 = fmul double 5.000000e-01, %240
  %242 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %243 = load ptr, ptr %242, align 8, !tbaa !21
  %244 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %243, i32 0, i32 9
  %245 = load double, ptr %244, align 8, !tbaa !41
  %246 = fmul double %241, %245
  %247 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %248 = load ptr, ptr %247, align 8, !tbaa !21
  %249 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %248, i32 0, i32 9
  %250 = load double, ptr %249, align 8, !tbaa !41
  %251 = fmul double %246, %250
  %252 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 6
  %253 = load double, ptr %252, align 8, !tbaa !44
  %254 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %255 = getelementptr inbounds %class.powerDef, ptr %254, i32 0, i32 2
  %256 = getelementptr inbounds %class.powerComponents, ptr %255, i32 0, i32 0
  %257 = load double, ptr %256, align 8, !tbaa !45
  %258 = call double @llvm.fmuladd.f64(double %251, double %253, double %257)
  store double %258, ptr %256, align 8, !tbaa !45
  %259 = load double, ptr %11, align 8, !tbaa !9
  %260 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %261 = load double, ptr %260, align 8, !tbaa !25
  %262 = fmul double %259, %261
  %263 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %264 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %262, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %263, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %265 unwind label %680

265:                                              ; preds = %239
  %266 = load double, ptr %11, align 8, !tbaa !9
  %267 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %268 = load double, ptr %267, align 8, !tbaa !24
  %269 = fmul double %266, %268
  %270 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %271 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %269, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %270, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %272 unwind label %680

272:                                              ; preds = %265
  %273 = fadd double %264, %271
  %274 = load double, ptr %11, align 8, !tbaa !9
  %275 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %276 = load double, ptr %275, align 8, !tbaa !24
  %277 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %278 = load double, ptr %277, align 8, !tbaa !25
  %279 = fadd double %276, %278
  %280 = fmul double %274, %279
  %281 = invoke noundef double @_Z6gate_Cddbbb(double noundef %280, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %282 unwind label %680

282:                                              ; preds = %272
  %283 = fadd double %273, %281
  %284 = fmul double 5.000000e-01, %283
  %285 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %286 = load ptr, ptr %285, align 8, !tbaa !21
  %287 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %286, i32 0, i32 9
  %288 = load double, ptr %287, align 8, !tbaa !41
  %289 = fmul double %284, %288
  %290 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %291 = load ptr, ptr %290, align 8, !tbaa !21
  %292 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %291, i32 0, i32 9
  %293 = load double, ptr %292, align 8, !tbaa !41
  %294 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %295 = getelementptr inbounds %class.powerDef, ptr %294, i32 0, i32 0
  %296 = getelementptr inbounds %class.powerComponents, ptr %295, i32 0, i32 0
  %297 = load double, ptr %296, align 8, !tbaa !43
  %298 = call double @llvm.fmuladd.f64(double %289, double %293, double %297)
  store double %298, ptr %296, align 8, !tbaa !43
  %299 = load double, ptr %11, align 8, !tbaa !9
  %300 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %301 = load double, ptr %300, align 8, !tbaa !25
  %302 = fmul double %299, %301
  %303 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %304 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %302, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %303, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %305 unwind label %680

305:                                              ; preds = %282
  %306 = load double, ptr %11, align 8, !tbaa !9
  %307 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %308 = load double, ptr %307, align 8, !tbaa !24
  %309 = fmul double %306, %308
  %310 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %311 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %309, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %310, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %312 unwind label %680

312:                                              ; preds = %305
  %313 = fadd double %304, %311
  %314 = load double, ptr %11, align 8, !tbaa !9
  %315 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %316 = load double, ptr %315, align 8, !tbaa !24
  %317 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %318 = load double, ptr %317, align 8, !tbaa !25
  %319 = fadd double %316, %318
  %320 = fmul double %314, %319
  %321 = invoke noundef double @_Z6gate_Cddbbb(double noundef %320, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %322 unwind label %680

322:                                              ; preds = %312
  %323 = fadd double %313, %321
  %324 = fmul double 5.000000e-01, %323
  %325 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %326 = load ptr, ptr %325, align 8, !tbaa !21
  %327 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %326, i32 0, i32 9
  %328 = load double, ptr %327, align 8, !tbaa !41
  %329 = fmul double %324, %328
  %330 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %331 = load ptr, ptr %330, align 8, !tbaa !21
  %332 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %331, i32 0, i32 9
  %333 = load double, ptr %332, align 8, !tbaa !41
  %334 = fmul double %329, %333
  %335 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 6
  %336 = load double, ptr %335, align 8, !tbaa !44
  %337 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %338 = getelementptr inbounds %class.powerDef, ptr %337, i32 0, i32 2
  %339 = getelementptr inbounds %class.powerComponents, ptr %338, i32 0, i32 0
  %340 = load double, ptr %339, align 8, !tbaa !45
  %341 = call double @llvm.fmuladd.f64(double %334, double %336, double %340)
  store double %341, ptr %339, align 8, !tbaa !45
  %342 = load double, ptr %11, align 8, !tbaa !9
  %343 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %344 = load double, ptr %343, align 8, !tbaa !25
  %345 = fmul double %342, %344
  %346 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %347 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %345, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %346, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %348 unwind label %680

348:                                              ; preds = %322
  %349 = load double, ptr %11, align 8, !tbaa !9
  %350 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %351 = load double, ptr %350, align 8, !tbaa !24
  %352 = fmul double %349, %351
  %353 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %354 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %352, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %353, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %355 unwind label %680

355:                                              ; preds = %348
  %356 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %354, double %347)
  %357 = load double, ptr %15, align 8, !tbaa !9
  %358 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %359 = load double, ptr %358, align 8, !tbaa !24
  %360 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %361 = load double, ptr %360, align 8, !tbaa !25
  %362 = fadd double %359, %361
  %363 = fmul double %357, %362
  %364 = invoke noundef double @_Z6gate_Cddbbb(double noundef %363, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %365 unwind label %680

365:                                              ; preds = %355
  %366 = fadd double %356, %364
  %367 = fmul double 5.000000e-01, %366
  %368 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %369 = load ptr, ptr %368, align 8, !tbaa !21
  %370 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %369, i32 0, i32 9
  %371 = load double, ptr %370, align 8, !tbaa !41
  %372 = fmul double %367, %371
  %373 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %374 = load ptr, ptr %373, align 8, !tbaa !21
  %375 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %374, i32 0, i32 9
  %376 = load double, ptr %375, align 8, !tbaa !41
  %377 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %378 = getelementptr inbounds %class.powerDef, ptr %377, i32 0, i32 0
  %379 = getelementptr inbounds %class.powerComponents, ptr %378, i32 0, i32 0
  %380 = load double, ptr %379, align 8, !tbaa !43
  %381 = call double @llvm.fmuladd.f64(double %372, double %376, double %380)
  store double %381, ptr %379, align 8, !tbaa !43
  %382 = load double, ptr %11, align 8, !tbaa !9
  %383 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %384 = load double, ptr %383, align 8, !tbaa !25
  %385 = fmul double %382, %384
  %386 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %387 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %385, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %386, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %388 unwind label %680

388:                                              ; preds = %365
  %389 = load double, ptr %11, align 8, !tbaa !9
  %390 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %391 = load double, ptr %390, align 8, !tbaa !24
  %392 = fmul double %389, %391
  %393 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %394 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %392, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %393, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %395 unwind label %680

395:                                              ; preds = %388
  %396 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %394, double %387)
  %397 = load double, ptr %15, align 8, !tbaa !9
  %398 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %399 = load double, ptr %398, align 8, !tbaa !24
  %400 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %401 = load double, ptr %400, align 8, !tbaa !25
  %402 = fadd double %399, %401
  %403 = fmul double %397, %402
  %404 = invoke noundef double @_Z6gate_Cddbbb(double noundef %403, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %405 unwind label %680

405:                                              ; preds = %395
  %406 = fadd double %396, %404
  %407 = fmul double 5.000000e-01, %406
  %408 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %409 = load ptr, ptr %408, align 8, !tbaa !21
  %410 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %409, i32 0, i32 9
  %411 = load double, ptr %410, align 8, !tbaa !41
  %412 = fmul double %407, %411
  %413 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %414 = load ptr, ptr %413, align 8, !tbaa !21
  %415 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %414, i32 0, i32 9
  %416 = load double, ptr %415, align 8, !tbaa !41
  %417 = fmul double %412, %416
  %418 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 6
  %419 = load double, ptr %418, align 8, !tbaa !44
  %420 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %421 = getelementptr inbounds %class.powerDef, ptr %420, i32 0, i32 2
  %422 = getelementptr inbounds %class.powerComponents, ptr %421, i32 0, i32 0
  %423 = load double, ptr %422, align 8, !tbaa !45
  %424 = call double @llvm.fmuladd.f64(double %417, double %419, double %423)
  store double %424, ptr %422, align 8, !tbaa !45
  %425 = load double, ptr %15, align 8, !tbaa !9
  %426 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %427 = load double, ptr %426, align 8, !tbaa !25
  %428 = fmul double %425, %427
  %429 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %430 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %428, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %429, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %431 unwind label %680

431:                                              ; preds = %405
  %432 = load double, ptr %15, align 8, !tbaa !9
  %433 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %434 = load double, ptr %433, align 8, !tbaa !24
  %435 = fmul double %432, %434
  %436 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %437 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %435, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %436, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %438 unwind label %680

438:                                              ; preds = %431
  %439 = fadd double %430, %437
  %440 = load double, ptr %6, align 8, !tbaa !9
  %441 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %442 = load double, ptr %441, align 8, !tbaa !24
  %443 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %444 = load double, ptr %443, align 8, !tbaa !25
  %445 = fadd double %442, %444
  %446 = fmul double %440, %445
  %447 = invoke noundef double @_Z6gate_Cddbbb(double noundef %446, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %448 unwind label %680

448:                                              ; preds = %438
  %449 = call double @llvm.fmuladd.f64(double %439, double 2.000000e+00, double %447)
  %450 = fmul double 5.000000e-01, %449
  %451 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %452 = load ptr, ptr %451, align 8, !tbaa !21
  %453 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %452, i32 0, i32 9
  %454 = load double, ptr %453, align 8, !tbaa !41
  %455 = fmul double %450, %454
  %456 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %457 = load ptr, ptr %456, align 8, !tbaa !21
  %458 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %457, i32 0, i32 9
  %459 = load double, ptr %458, align 8, !tbaa !41
  %460 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %461 = getelementptr inbounds %class.powerDef, ptr %460, i32 0, i32 0
  %462 = getelementptr inbounds %class.powerComponents, ptr %461, i32 0, i32 0
  %463 = load double, ptr %462, align 8, !tbaa !43
  %464 = call double @llvm.fmuladd.f64(double %455, double %459, double %463)
  store double %464, ptr %462, align 8, !tbaa !43
  %465 = load double, ptr %15, align 8, !tbaa !9
  %466 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %467 = load double, ptr %466, align 8, !tbaa !25
  %468 = fmul double %465, %467
  %469 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %470 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %468, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %469, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %471 unwind label %680

471:                                              ; preds = %448
  %472 = load double, ptr %15, align 8, !tbaa !9
  %473 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %474 = load double, ptr %473, align 8, !tbaa !24
  %475 = fmul double %472, %474
  %476 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !26
  %477 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %475, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %476, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %478 unwind label %680

478:                                              ; preds = %471
  %479 = fadd double %470, %477
  %480 = load double, ptr %6, align 8, !tbaa !9
  %481 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %482 = load double, ptr %481, align 8, !tbaa !24
  %483 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %484 = load double, ptr %483, align 8, !tbaa !25
  %485 = fadd double %482, %484
  %486 = fmul double %480, %485
  %487 = invoke noundef double @_Z6gate_Cddbbb(double noundef %486, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %488 unwind label %680

488:                                              ; preds = %478
  %489 = call double @llvm.fmuladd.f64(double %479, double 2.000000e+00, double %487)
  %490 = fmul double 5.000000e-01, %489
  %491 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %492 = load ptr, ptr %491, align 8, !tbaa !21
  %493 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %492, i32 0, i32 9
  %494 = load double, ptr %493, align 8, !tbaa !41
  %495 = fmul double %490, %494
  %496 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %497 = load ptr, ptr %496, align 8, !tbaa !21
  %498 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %497, i32 0, i32 9
  %499 = load double, ptr %498, align 8, !tbaa !41
  %500 = fmul double %495, %499
  %501 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 6
  %502 = load double, ptr %501, align 8, !tbaa !44
  %503 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %504 = getelementptr inbounds %class.powerDef, ptr %503, i32 0, i32 2
  %505 = getelementptr inbounds %class.powerComponents, ptr %504, i32 0, i32 0
  %506 = load double, ptr %505, align 8, !tbaa !45
  %507 = call double @llvm.fmuladd.f64(double %500, double %502, double %506)
  store double %507, ptr %505, align 8, !tbaa !45
  %508 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 19
  %509 = load i8, ptr %508, align 4, !tbaa !46, !range !47, !noundef !48
  %510 = trunc i8 %509 to i1
  br i1 %510, label %511, label %684

511:                                              ; preds = %488
  %512 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %513 = load double, ptr %512, align 8, !tbaa !24
  %514 = load double, ptr %15, align 8, !tbaa !9
  %515 = fmul double %513, %514
  %516 = fmul double %515, 2.000000e+00
  %517 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %518 = load double, ptr %517, align 8, !tbaa !25
  %519 = load double, ptr %15, align 8, !tbaa !9
  %520 = fmul double %518, %519
  %521 = fmul double %520, 2.000000e+00
  %522 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %516, double noundef %521, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %523 unwind label %680

523:                                              ; preds = %511
  %524 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %525 = load ptr, ptr %524, align 8, !tbaa !21
  %526 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %525, i32 0, i32 9
  %527 = load double, ptr %526, align 8, !tbaa !41
  %528 = fmul double %522, %527
  %529 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %530 = load double, ptr %529, align 8, !tbaa !49
  %531 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %532 = getelementptr inbounds %class.powerDef, ptr %531, i32 0, i32 0
  %533 = getelementptr inbounds %class.powerComponents, ptr %532, i32 0, i32 1
  %534 = load double, ptr %533, align 8, !tbaa !50
  %535 = call double @llvm.fmuladd.f64(double %528, double %530, double %534)
  store double %535, ptr %533, align 8, !tbaa !50
  %536 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %537 = load double, ptr %536, align 8, !tbaa !24
  %538 = load double, ptr %11, align 8, !tbaa !9
  %539 = fmul double %537, %538
  %540 = fmul double %539, 3.000000e+00
  %541 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %542 = load double, ptr %541, align 8, !tbaa !25
  %543 = load double, ptr %11, align 8, !tbaa !9
  %544 = fmul double %542, %543
  %545 = fmul double %544, 3.000000e+00
  %546 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %540, double noundef %545, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %547 unwind label %680

547:                                              ; preds = %523
  %548 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %549 = load ptr, ptr %548, align 8, !tbaa !21
  %550 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %549, i32 0, i32 9
  %551 = load double, ptr %550, align 8, !tbaa !41
  %552 = fmul double %546, %551
  %553 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %554 = load double, ptr %553, align 8, !tbaa !49
  %555 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %556 = getelementptr inbounds %class.powerDef, ptr %555, i32 0, i32 0
  %557 = getelementptr inbounds %class.powerComponents, ptr %556, i32 0, i32 1
  %558 = load double, ptr %557, align 8, !tbaa !50
  %559 = call double @llvm.fmuladd.f64(double %552, double %554, double %558)
  store double %559, ptr %557, align 8, !tbaa !50
  %560 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %561 = load double, ptr %560, align 8, !tbaa !24
  %562 = load double, ptr %11, align 8, !tbaa !9
  %563 = fmul double %561, %562
  %564 = fmul double %563, 3.000000e+00
  %565 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %566 = load double, ptr %565, align 8, !tbaa !25
  %567 = load double, ptr %11, align 8, !tbaa !9
  %568 = fmul double %566, %567
  %569 = fmul double %568, 3.000000e+00
  %570 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %564, double noundef %569, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %571 unwind label %680

571:                                              ; preds = %547
  %572 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %573 = load ptr, ptr %572, align 8, !tbaa !21
  %574 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %573, i32 0, i32 9
  %575 = load double, ptr %574, align 8, !tbaa !41
  %576 = fmul double %570, %575
  %577 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %578 = load double, ptr %577, align 8, !tbaa !49
  %579 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %580 = getelementptr inbounds %class.powerDef, ptr %579, i32 0, i32 0
  %581 = getelementptr inbounds %class.powerComponents, ptr %580, i32 0, i32 1
  %582 = load double, ptr %581, align 8, !tbaa !50
  %583 = call double @llvm.fmuladd.f64(double %576, double %578, double %582)
  store double %583, ptr %581, align 8, !tbaa !50
  %584 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %585 = load double, ptr %584, align 8, !tbaa !24
  %586 = load double, ptr %15, align 8, !tbaa !9
  %587 = fmul double %585, %586
  %588 = fmul double %587, 2.000000e+00
  %589 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %590 = load double, ptr %589, align 8, !tbaa !25
  %591 = load double, ptr %15, align 8, !tbaa !9
  %592 = fmul double %590, %591
  %593 = fmul double %592, 2.000000e+00
  %594 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %588, double noundef %593, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %595 unwind label %680

595:                                              ; preds = %571
  %596 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %597 = load ptr, ptr %596, align 8, !tbaa !21
  %598 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %597, i32 0, i32 9
  %599 = load double, ptr %598, align 8, !tbaa !41
  %600 = fmul double %594, %599
  %601 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %602 = load double, ptr %601, align 8, !tbaa !49
  %603 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %604 = getelementptr inbounds %class.powerDef, ptr %603, i32 0, i32 0
  %605 = getelementptr inbounds %class.powerComponents, ptr %604, i32 0, i32 2
  %606 = load double, ptr %605, align 8, !tbaa !51
  %607 = call double @llvm.fmuladd.f64(double %600, double %602, double %606)
  store double %607, ptr %605, align 8, !tbaa !51
  %608 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %609 = load double, ptr %608, align 8, !tbaa !24
  %610 = load double, ptr %11, align 8, !tbaa !9
  %611 = fmul double %609, %610
  %612 = fmul double %611, 3.000000e+00
  %613 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %614 = load double, ptr %613, align 8, !tbaa !25
  %615 = load double, ptr %11, align 8, !tbaa !9
  %616 = fmul double %614, %615
  %617 = fmul double %616, 3.000000e+00
  %618 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %612, double noundef %617, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %619 unwind label %680

619:                                              ; preds = %595
  %620 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %621 = load ptr, ptr %620, align 8, !tbaa !21
  %622 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %621, i32 0, i32 9
  %623 = load double, ptr %622, align 8, !tbaa !41
  %624 = fmul double %618, %623
  %625 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %626 = load double, ptr %625, align 8, !tbaa !49
  %627 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %628 = getelementptr inbounds %class.powerDef, ptr %627, i32 0, i32 0
  %629 = getelementptr inbounds %class.powerComponents, ptr %628, i32 0, i32 2
  %630 = load double, ptr %629, align 8, !tbaa !51
  %631 = call double @llvm.fmuladd.f64(double %624, double %626, double %630)
  store double %631, ptr %629, align 8, !tbaa !51
  %632 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %633 = load double, ptr %632, align 8, !tbaa !24
  %634 = load double, ptr %11, align 8, !tbaa !9
  %635 = fmul double %633, %634
  %636 = fmul double %635, 3.000000e+00
  %637 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %638 = load double, ptr %637, align 8, !tbaa !25
  %639 = load double, ptr %11, align 8, !tbaa !9
  %640 = fmul double %638, %639
  %641 = fmul double %640, 3.000000e+00
  %642 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %636, double noundef %641, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %643 unwind label %680

643:                                              ; preds = %619
  %644 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %645 = load ptr, ptr %644, align 8, !tbaa !21
  %646 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %645, i32 0, i32 9
  %647 = load double, ptr %646, align 8, !tbaa !41
  %648 = fmul double %642, %647
  %649 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %650 = load double, ptr %649, align 8, !tbaa !49
  %651 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %652 = getelementptr inbounds %class.powerDef, ptr %651, i32 0, i32 0
  %653 = getelementptr inbounds %class.powerComponents, ptr %652, i32 0, i32 2
  %654 = load double, ptr %653, align 8, !tbaa !51
  %655 = call double @llvm.fmuladd.f64(double %648, double %650, double %654)
  store double %655, ptr %653, align 8, !tbaa !51
  br label %829

656:                                              ; preds = %51, %47, %4
  %657 = landingpad { ptr, i32 }
          cleanup
  %658 = extractvalue { ptr, i32 } %657, 0
  store ptr %658, ptr %13, align 8
  %659 = extractvalue { ptr, i32 } %657, 1
  store i32 %659, ptr %14, align 4
  br label %835

660:                                              ; preds = %71, %61
  %661 = landingpad { ptr, i32 }
          cleanup
  %662 = extractvalue { ptr, i32 } %661, 0
  store ptr %662, ptr %13, align 8
  %663 = extractvalue { ptr, i32 } %661, 1
  store i32 %663, ptr %14, align 4
  br label %834

664:                                              ; preds = %86
  %665 = landingpad { ptr, i32 }
          cleanup
  %666 = extractvalue { ptr, i32 } %665, 0
  store ptr %666, ptr %13, align 8
  %667 = extractvalue { ptr, i32 } %665, 1
  store i32 %667, ptr %14, align 4
  br label %833

668:                                              ; preds = %93
  %669 = landingpad { ptr, i32 }
          cleanup
  %670 = extractvalue { ptr, i32 } %669, 0
  store ptr %670, ptr %13, align 8
  %671 = extractvalue { ptr, i32 } %669, 1
  store i32 %671, ptr %14, align 4
  br label %832

672:                                              ; preds = %114, %107, %100
  %673 = landingpad { ptr, i32 }
          cleanup
  %674 = extractvalue { ptr, i32 } %673, 0
  store ptr %674, ptr %13, align 8
  %675 = extractvalue { ptr, i32 } %673, 1
  store i32 %675, ptr %14, align 4
  br label %831

676:                                              ; preds = %136, %129, %121
  %677 = landingpad { ptr, i32 }
          cleanup
  %678 = extractvalue { ptr, i32 } %677, 0
  store ptr %678, ptr %13, align 8
  %679 = extractvalue { ptr, i32 } %677, 1
  store i32 %679, ptr %14, align 4
  br label %830

680:                                              ; preds = %792, %768, %744, %720, %696, %684, %619, %595, %571, %547, %523, %511, %478, %471, %448, %438, %431, %405, %395, %388, %365, %355, %348, %322, %312, %305, %282, %272, %265, %239, %232, %225, %202, %195, %188, %178, %146
  %681 = landingpad { ptr, i32 }
          cleanup
  %682 = extractvalue { ptr, i32 } %681, 0
  store ptr %682, ptr %13, align 8
  %683 = extractvalue { ptr, i32 } %681, 1
  store i32 %683, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  br label %830

684:                                              ; preds = %488
  %685 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %686 = load double, ptr %685, align 8, !tbaa !24
  %687 = load double, ptr %15, align 8, !tbaa !9
  %688 = fmul double %686, %687
  %689 = fmul double %688, 2.000000e+00
  %690 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %691 = load double, ptr %690, align 8, !tbaa !25
  %692 = load double, ptr %15, align 8, !tbaa !9
  %693 = fmul double %691, %692
  %694 = fmul double %693, 2.000000e+00
  %695 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %689, double noundef %694, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %696 unwind label %680

696:                                              ; preds = %684
  %697 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %698 = load ptr, ptr %697, align 8, !tbaa !21
  %699 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %698, i32 0, i32 9
  %700 = load double, ptr %699, align 8, !tbaa !41
  %701 = fmul double %695, %700
  %702 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %703 = load double, ptr %702, align 8, !tbaa !49
  %704 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %705 = getelementptr inbounds %class.powerDef, ptr %704, i32 0, i32 0
  %706 = getelementptr inbounds %class.powerComponents, ptr %705, i32 0, i32 1
  %707 = load double, ptr %706, align 8, !tbaa !50
  %708 = call double @llvm.fmuladd.f64(double %701, double %703, double %707)
  store double %708, ptr %706, align 8, !tbaa !50
  %709 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %710 = load double, ptr %709, align 8, !tbaa !24
  %711 = load double, ptr %11, align 8, !tbaa !9
  %712 = fmul double %710, %711
  %713 = fmul double %712, 3.000000e+00
  %714 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %715 = load double, ptr %714, align 8, !tbaa !25
  %716 = load double, ptr %11, align 8, !tbaa !9
  %717 = fmul double %715, %716
  %718 = fmul double %717, 3.000000e+00
  %719 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %713, double noundef %718, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %720 unwind label %680

720:                                              ; preds = %696
  %721 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %722 = load ptr, ptr %721, align 8, !tbaa !21
  %723 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %722, i32 0, i32 9
  %724 = load double, ptr %723, align 8, !tbaa !41
  %725 = fmul double %719, %724
  %726 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %727 = load double, ptr %726, align 8, !tbaa !49
  %728 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %729 = getelementptr inbounds %class.powerDef, ptr %728, i32 0, i32 0
  %730 = getelementptr inbounds %class.powerComponents, ptr %729, i32 0, i32 1
  %731 = load double, ptr %730, align 8, !tbaa !50
  %732 = call double @llvm.fmuladd.f64(double %725, double %727, double %731)
  store double %732, ptr %730, align 8, !tbaa !50
  %733 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %734 = load double, ptr %733, align 8, !tbaa !24
  %735 = load double, ptr %11, align 8, !tbaa !9
  %736 = fmul double %734, %735
  %737 = fmul double %736, 3.000000e+00
  %738 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %739 = load double, ptr %738, align 8, !tbaa !25
  %740 = load double, ptr %11, align 8, !tbaa !9
  %741 = fmul double %739, %740
  %742 = fmul double %741, 3.000000e+00
  %743 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %737, double noundef %742, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %744 unwind label %680

744:                                              ; preds = %720
  %745 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %746 = load ptr, ptr %745, align 8, !tbaa !21
  %747 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %746, i32 0, i32 9
  %748 = load double, ptr %747, align 8, !tbaa !41
  %749 = fmul double %743, %748
  %750 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %751 = load double, ptr %750, align 8, !tbaa !49
  %752 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %753 = getelementptr inbounds %class.powerDef, ptr %752, i32 0, i32 0
  %754 = getelementptr inbounds %class.powerComponents, ptr %753, i32 0, i32 1
  %755 = load double, ptr %754, align 8, !tbaa !50
  %756 = call double @llvm.fmuladd.f64(double %749, double %751, double %755)
  store double %756, ptr %754, align 8, !tbaa !50
  %757 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %758 = load double, ptr %757, align 8, !tbaa !24
  %759 = load double, ptr %15, align 8, !tbaa !9
  %760 = fmul double %758, %759
  %761 = fmul double %760, 2.000000e+00
  %762 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %763 = load double, ptr %762, align 8, !tbaa !25
  %764 = load double, ptr %15, align 8, !tbaa !9
  %765 = fmul double %763, %764
  %766 = fmul double %765, 2.000000e+00
  %767 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %761, double noundef %766, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %768 unwind label %680

768:                                              ; preds = %744
  %769 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %770 = load ptr, ptr %769, align 8, !tbaa !21
  %771 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %770, i32 0, i32 9
  %772 = load double, ptr %771, align 8, !tbaa !41
  %773 = fmul double %767, %772
  %774 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %775 = load double, ptr %774, align 8, !tbaa !49
  %776 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %777 = getelementptr inbounds %class.powerDef, ptr %776, i32 0, i32 0
  %778 = getelementptr inbounds %class.powerComponents, ptr %777, i32 0, i32 2
  %779 = load double, ptr %778, align 8, !tbaa !51
  %780 = call double @llvm.fmuladd.f64(double %773, double %775, double %779)
  store double %780, ptr %778, align 8, !tbaa !51
  %781 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %782 = load double, ptr %781, align 8, !tbaa !24
  %783 = load double, ptr %11, align 8, !tbaa !9
  %784 = fmul double %782, %783
  %785 = fmul double %784, 3.000000e+00
  %786 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %787 = load double, ptr %786, align 8, !tbaa !25
  %788 = load double, ptr %11, align 8, !tbaa !9
  %789 = fmul double %787, %788
  %790 = fmul double %789, 3.000000e+00
  %791 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %785, double noundef %790, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %792 unwind label %680

792:                                              ; preds = %768
  %793 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %794 = load ptr, ptr %793, align 8, !tbaa !21
  %795 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %794, i32 0, i32 9
  %796 = load double, ptr %795, align 8, !tbaa !41
  %797 = fmul double %791, %796
  %798 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %799 = load double, ptr %798, align 8, !tbaa !49
  %800 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %801 = getelementptr inbounds %class.powerDef, ptr %800, i32 0, i32 0
  %802 = getelementptr inbounds %class.powerComponents, ptr %801, i32 0, i32 2
  %803 = load double, ptr %802, align 8, !tbaa !51
  %804 = call double @llvm.fmuladd.f64(double %797, double %799, double %803)
  store double %804, ptr %802, align 8, !tbaa !51
  %805 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 22
  %806 = load double, ptr %805, align 8, !tbaa !24
  %807 = load double, ptr %11, align 8, !tbaa !9
  %808 = fmul double %806, %807
  %809 = fmul double %808, 3.000000e+00
  %810 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 23
  %811 = load double, ptr %810, align 8, !tbaa !25
  %812 = load double, ptr %11, align 8, !tbaa !9
  %813 = fmul double %811, %812
  %814 = fmul double %813, 3.000000e+00
  %815 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %809, double noundef %814, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %816 unwind label %680

816:                                              ; preds = %792
  %817 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 24
  %818 = load ptr, ptr %817, align 8, !tbaa !21
  %819 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %818, i32 0, i32 9
  %820 = load double, ptr %819, align 8, !tbaa !41
  %821 = fmul double %815, %820
  %822 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %823 = load double, ptr %822, align 8, !tbaa !49
  %824 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %825 = getelementptr inbounds %class.powerDef, ptr %824, i32 0, i32 0
  %826 = getelementptr inbounds %class.powerComponents, ptr %825, i32 0, i32 2
  %827 = load double, ptr %826, align 8, !tbaa !51
  %828 = call double @llvm.fmuladd.f64(double %821, double %823, double %827)
  store double %828, ptr %826, align 8, !tbaa !51
  br label %829

829:                                              ; preds = %816, %643
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %9) #5
  call void @llvm.lifetime.end.p0(i64 1264, ptr %9) #5
  ret void

830:                                              ; preds = %680, %676
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %831

831:                                              ; preds = %830, %672
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %832

832:                                              ; preds = %831, %668
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %833

833:                                              ; preds = %832, %664
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %834

834:                                              ; preds = %833, %660
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %835

835:                                              ; preds = %834, %656
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %9) #5
  call void @llvm.lifetime.end.p0(i64 1264, ptr %9) #5
  br label %836

836:                                              ; preds = %835
  %837 = load ptr, ptr %13, align 8
  %838 = load i32, ptr %14, align 4
  %839 = insertvalue { ptr, i32 } poison, ptr %837, 0
  %840 = insertvalue { ptr, i32 } %839, i32 %838, 1
  resume { ptr, i32 } %840
}

declare noundef double @_ZN4Wire8wire_capEdb(ptr noundef nonnull align 8 dereferenceable(1264), double noundef, i1 noundef zeroext) #1

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { 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 #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 = !{!"double", !7, i64 0}
!11 = !{!12, !20, i64 512}
!12 = !{!"_ZTS6Htree2", !13, i64 0, !10, i64 280, !10, i64 288, !10, i64 296, !15, i64 304, !10, i64 424, !10, i64 432, !17, i64 440, !10, i64 448, !10, i64 456, !10, i64 464, !10, i64 472, !18, i64 480, !18, i64 484, !18, i64 488, !18, i64 492, !18, i64 496, !18, i64 500, !18, i64 504, !19, i64 508, !19, i64 509, !20, i64 512, !10, i64 520, !10, i64 528, !6, i64 536}
!13 = !{!"_ZTS9Component", !14, i64 0, !15, i64 24, !15, i64 144, !10, i64 264, !10, i64 272}
!14 = !{!"_ZTS4Area", !10, i64 0, !10, i64 8, !10, i64 16}
!15 = !{!"_ZTS8powerDef", !16, i64 0, !16, i64 40, !16, i64 80}
!16 = !{!"_ZTS15powerComponents", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!17 = !{!"_ZTS10Htree_type", !7, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"_ZTS9Wire_type", !7, i64 0}
!21 = !{!12, !6, i64 536}
!22 = !{!23, !10, i64 152}
!23 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160}
!24 = !{!12, !10, i64 520}
!25 = !{!12, !10, i64 528}
!26 = !{!27, !10, i64 312}
!27 = !{!"_ZTS19TechnologyParameter", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !28, i64 352, !23, i64 360, !23, i64 528, !23, i64 696, !23, i64 864, !23, i64 1032, !29, i64 1200, !29, i64 1264, !29, i64 1328, !30, i64 1392, !31, i64 1416, !31, i64 1464, !31, i64 1512}
!28 = !{!"long", !7, i64 0}
!29 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56}
!30 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !10, i64 0, !10, i64 8, !10, i64 16}
!31 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!32 = !{!33, !10, i64 344}
!33 = !{!"_ZTS4Wire", !13, i64 0, !20, i64 280, !10, i64 288, !10, i64 296, !34, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !18, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !35, i64 384, !13, i64 408, !13, i64 688, !13, i64 968, !10, i64 1248, !6, i64 1256}
!34 = !{!"_ZTS14Wire_placement", !7, i64 0}
!35 = !{!"_ZTSNSt7__cxx114listI9ComponentSaIS1_EEE", !36, i64 0}
!36 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EEE", !37, i64 0}
!37 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EE10_List_implE", !38, i64 0}
!38 = !{!"_ZTSNSt8__detail17_List_node_headerE", !39, i64 0, !28, i64 16}
!39 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!40 = !{!23, !10, i64 80}
!41 = !{!23, !10, i64 72}
!42 = !{!13, !10, i64 264}
!43 = !{!13, !10, i64 24}
!44 = !{!12, !10, i64 432}
!45 = !{!13, !10, i64 104}
!46 = !{!12, !19, i64 508}
!47 = !{i8 0, i8 2}
!48 = !{}
!49 = !{!12, !10, i64 424}
!50 = !{!13, !10, i64 32}
!51 = !{!13, !10, i64 40}


; 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.TechnologyParameter = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i64, %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::ScalingFactor", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType" }
%"class.TechnologyParameter::DeviceType" = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::InterconnectType" = type { double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::ScalingFactor" = type { double, double, double }
%"class.TechnologyParameter::MemoryType" = type { double, double, double, double, double, double }
%class.Wire = type { %class.Component, i32, double, double, i32, double, double, double, double, double, i32, double, double, double, %"class.std::__cxx11::list", %class.Component, %class.Component, %class.Component, double, ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<Component, std::allocator<Component>>::_List_impl" }
%"struct.std::__cxx11::_List_base<Component, std::allocator<Component>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%class.Component = type { %class.Area, %class.powerDef, %class.powerDef, double, double }
%class.Area = type { double, double, double }
%class.powerDef = type { %class.powerComponents, %class.powerComponents, %class.powerComponents }
%class.powerComponents = type { double, double, double, double, double }

@g_tp = external global %class.TechnologyParameter, align 8

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 @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264), i32 noundef, double noundef, i32 noundef, double noundef, double noundef, i32 noundef, double noundef, ptr noundef) unnamed_addr #1

declare noundef double @_Z7tr_R_ondiibbb(double noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #1

declare noundef double @_Z8drain_C_diiidbbb(double noundef, i32 noundef, i32 noundef, i32 noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #1

declare noundef double @_Z6gate_Cddbbb(double noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #1

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

declare noundef double @_Z8horowitzddddi(double noundef, double noundef, double noundef, double noundef, i32 noundef) local_unnamed_addr #1

declare noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef, double noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext, i32 noundef) local_unnamed_addr #1

declare noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef, double noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind
declare void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264)) unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Htree213output_bufferEddd(ptr noundef nonnull align 8 dereferenceable(544) %0, double noundef %1, double noundef %2, double noundef %3) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %class.Wire, align 8
  call void @llvm.lifetime.start.p0(i64 1264, ptr nonnull %5) #5
  %6 = getelementptr inbounds i8, ptr %0, i64 512
  %7 = load i32, ptr %6, align 8, !tbaa !5
  call void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %5, i32 noundef %7, double noundef %3, i32 noundef 1, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef 0, double noundef 2.200000e-02, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
  %8 = getelementptr inbounds i8, ptr %0, i64 536
  %9 = load ptr, ptr %8, align 8, !tbaa !19
  %10 = getelementptr inbounds i8, ptr %9, i64 152
  %11 = load double, ptr %10, align 8, !tbaa !20
  %12 = fadd double %11, 1.000000e+00
  %13 = fmul double %12, %1
  %14 = fadd double %11, 2.000000e+00
  %15 = fadd double %14, 1.000000e+00
  %16 = call double @llvm.fmuladd.f64(double %11, double 2.000000e+00, double %15)
  %17 = fdiv double %13, %16
  %18 = getelementptr inbounds i8, ptr %0, i64 520
  %19 = load double, ptr %18, align 8, !tbaa !22
  %20 = getelementptr inbounds i8, ptr %0, i64 528
  %21 = load double, ptr %20, align 8, !tbaa !23
  %22 = fadd double %19, %21
  %23 = fmul double %22, %2
  %24 = invoke noundef double @_Z6gate_Cddbbb(double noundef %23, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %25 unwind label %406

25:                                               ; preds = %4
  %26 = fmul double %3, 0x3EB0C6F7A0B5ED8D
  %27 = invoke noundef double @_ZN4Wire8wire_capEdb(ptr noundef nonnull align 8 dereferenceable(1264) %5, double noundef %26, i1 noundef zeroext true)
          to label %28 unwind label %406

28:                                               ; preds = %25
  %29 = load double, ptr %18, align 8, !tbaa !22
  %30 = load double, ptr %20, align 8, !tbaa !23
  %31 = fadd double %29, %30
  %32 = fmul double %31, %2
  %33 = invoke noundef double @_Z6gate_Cddbbb(double noundef %32, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %34 unwind label %406

34:                                               ; preds = %28
  %35 = fadd double %24, %27
  %36 = fdiv double %35, %33
  %37 = load double, ptr %18, align 8, !tbaa !22
  %38 = load double, ptr %20, align 8, !tbaa !23
  %39 = fadd double %37, %38
  %40 = fmul double %39, %1
  %41 = invoke noundef double @_Z6gate_Cddbbb(double noundef %40, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %42 unwind label %408

42:                                               ; preds = %34
  %43 = load double, ptr %20, align 8, !tbaa !23
  %44 = invoke noundef double @_Z6gate_Cddbbb(double noundef %43, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %45 unwind label %408

45:                                               ; preds = %42
  %46 = fmul double %41, 5.000000e-01
  %47 = fmul double %36, %44
  %48 = fdiv double %46, %47
  %49 = fcmp olt double %17, 1.000000e+00
  %50 = select i1 %49, double 1.000000e+00, double %17
  %51 = load double, ptr %20, align 8, !tbaa !23
  %52 = fmul double %50, %51
  %53 = invoke noundef double @_Z7tr_R_ondiibbb(double noundef %52, i32 noundef 0, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %54 unwind label %410

54:                                               ; preds = %45
  %55 = fmul double %53, 2.000000e+00
  %56 = load double, ptr %18, align 8, !tbaa !22
  %57 = fmul double %48, %56
  %58 = invoke noundef double @_Z7tr_R_ondiibbb(double noundef %57, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %59 unwind label %412

59:                                               ; preds = %54
  %60 = load double, ptr %18, align 8, !tbaa !22
  %61 = fmul double %50, %60
  %62 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %63 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %61, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %62, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %64 unwind label %414

64:                                               ; preds = %59
  %65 = load double, ptr %20, align 8, !tbaa !23
  %66 = fmul double %50, %65
  %67 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %68 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %66, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %67, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %69 unwind label %414

69:                                               ; preds = %64
  %70 = load double, ptr %20, align 8, !tbaa !23
  %71 = fmul double %48, %70
  %72 = invoke noundef double @_Z6gate_Cddbbb(double noundef %71, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %73 unwind label %414

73:                                               ; preds = %69
  %74 = call double @llvm.fmuladd.f64(double %68, double 2.000000e+00, double %63)
  %75 = fadd double %74, %72
  %76 = load double, ptr %20, align 8, !tbaa !23
  %77 = fmul double %48, %76
  %78 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %79 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %77, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %78, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %80 unwind label %416

80:                                               ; preds = %73
  %81 = load double, ptr %18, align 8, !tbaa !22
  %82 = fmul double %48, %81
  %83 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %84 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %82, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %83, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %85 unwind label %416

85:                                               ; preds = %80
  %86 = load double, ptr %18, align 8, !tbaa !22
  %87 = load double, ptr %20, align 8, !tbaa !23
  %88 = fadd double %86, %87
  %89 = fmul double %88, %1
  %90 = invoke noundef double @_Z6gate_Cddbbb(double noundef %89, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %91 unwind label %416

91:                                               ; preds = %85
  %92 = fadd double %79, %84
  %93 = call double @llvm.fmuladd.f64(double %92, double 2.000000e+00, double %90)
  %94 = fadd double %55, %58
  %95 = fmul double %94, %93
  %96 = call double @llvm.fmuladd.f64(double %55, double %75, double %95)
  %97 = getelementptr inbounds i8, ptr %5, i64 344
  %98 = load double, ptr %97, align 8, !tbaa !30
  %99 = load ptr, ptr %8, align 8, !tbaa !19
  %100 = getelementptr inbounds i8, ptr %99, i64 80
  %101 = load double, ptr %100, align 8, !tbaa !38
  %102 = getelementptr inbounds i8, ptr %99, i64 72
  %103 = load double, ptr %102, align 8, !tbaa !39
  %104 = fdiv double %101, %103
  %105 = invoke noundef double @_Z8horowitzddddi(double noundef %98, double noundef %96, double noundef %104, double noundef %104, i32 noundef 1)
          to label %106 unwind label %418

106:                                              ; preds = %91
  %107 = getelementptr inbounds i8, ptr %0, i64 264
  %108 = load double, ptr %107, align 8, !tbaa !40
  %109 = fadd double %105, %108
  store double %109, ptr %107, align 8, !tbaa !40
  %110 = load double, ptr %20, align 8, !tbaa !23
  %111 = fmul double %50, %110
  %112 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %113 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %111, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %112, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %114 unwind label %418

114:                                              ; preds = %106
  %115 = load double, ptr %18, align 8, !tbaa !22
  %116 = fmul double %50, %115
  %117 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %118 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %116, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %117, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %119 unwind label %418

119:                                              ; preds = %114
  %120 = load double, ptr %20, align 8, !tbaa !23
  %121 = fmul double %48, %120
  %122 = invoke noundef double @_Z6gate_Cddbbb(double noundef %121, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %123 unwind label %418

123:                                              ; preds = %119
  %124 = call double @llvm.fmuladd.f64(double %113, double 2.000000e+00, double %118)
  %125 = fadd double %124, %122
  %126 = fmul double %125, 5.000000e-01
  %127 = load ptr, ptr %8, align 8, !tbaa !19
  %128 = getelementptr inbounds i8, ptr %127, i64 72
  %129 = load double, ptr %128, align 8, !tbaa !39
  %130 = fmul double %126, %129
  %131 = getelementptr inbounds i8, ptr %0, i64 24
  %132 = load double, ptr %131, align 8, !tbaa !41
  %133 = call double @llvm.fmuladd.f64(double %130, double %129, double %132)
  store double %133, ptr %131, align 8, !tbaa !41
  %134 = load double, ptr %20, align 8, !tbaa !23
  %135 = fmul double %50, %134
  %136 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %137 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %135, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %136, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %138 unwind label %418

138:                                              ; preds = %123
  %139 = load double, ptr %18, align 8, !tbaa !22
  %140 = fmul double %50, %139
  %141 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %142 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %140, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %141, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %143 unwind label %418

143:                                              ; preds = %138
  %144 = load double, ptr %20, align 8, !tbaa !23
  %145 = fmul double %48, %144
  %146 = invoke noundef double @_Z6gate_Cddbbb(double noundef %145, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %147 unwind label %418

147:                                              ; preds = %143
  %148 = call double @llvm.fmuladd.f64(double %137, double 2.000000e+00, double %142)
  %149 = fadd double %148, %146
  %150 = fmul double %149, 5.000000e-01
  %151 = load ptr, ptr %8, align 8, !tbaa !19
  %152 = getelementptr inbounds i8, ptr %151, i64 72
  %153 = load double, ptr %152, align 8, !tbaa !39
  %154 = fmul double %150, %153
  %155 = fmul double %153, %154
  %156 = getelementptr inbounds i8, ptr %0, i64 432
  %157 = load double, ptr %156, align 8, !tbaa !42
  %158 = getelementptr inbounds i8, ptr %0, i64 104
  %159 = load double, ptr %158, align 8, !tbaa !43
  %160 = call double @llvm.fmuladd.f64(double %155, double %157, double %159)
  store double %160, ptr %158, align 8, !tbaa !43
  %161 = load double, ptr %20, align 8, !tbaa !23
  %162 = fmul double %50, %161
  %163 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %164 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %162, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %163, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %165 unwind label %418

165:                                              ; preds = %147
  %166 = load double, ptr %18, align 8, !tbaa !22
  %167 = fmul double %50, %166
  %168 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %169 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %167, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %168, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %170 unwind label %418

170:                                              ; preds = %165
  %171 = load double, ptr %18, align 8, !tbaa !22
  %172 = load double, ptr %20, align 8, !tbaa !23
  %173 = fadd double %171, %172
  %174 = fmul double %50, %173
  %175 = invoke noundef double @_Z6gate_Cddbbb(double noundef %174, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %176 unwind label %418

176:                                              ; preds = %170
  %177 = fadd double %164, %169
  %178 = fadd double %177, %175
  %179 = fmul double %178, 5.000000e-01
  %180 = load ptr, ptr %8, align 8, !tbaa !19
  %181 = getelementptr inbounds i8, ptr %180, i64 72
  %182 = load double, ptr %181, align 8, !tbaa !39
  %183 = fmul double %179, %182
  %184 = load double, ptr %131, align 8, !tbaa !41
  %185 = call double @llvm.fmuladd.f64(double %183, double %182, double %184)
  store double %185, ptr %131, align 8, !tbaa !41
  %186 = load double, ptr %20, align 8, !tbaa !23
  %187 = fmul double %50, %186
  %188 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %189 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %187, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %188, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %190 unwind label %418

190:                                              ; preds = %176
  %191 = load double, ptr %18, align 8, !tbaa !22
  %192 = fmul double %50, %191
  %193 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %194 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %192, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %193, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %195 unwind label %418

195:                                              ; preds = %190
  %196 = load double, ptr %18, align 8, !tbaa !22
  %197 = load double, ptr %20, align 8, !tbaa !23
  %198 = fadd double %196, %197
  %199 = fmul double %50, %198
  %200 = invoke noundef double @_Z6gate_Cddbbb(double noundef %199, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %201 unwind label %418

201:                                              ; preds = %195
  %202 = fadd double %189, %194
  %203 = fadd double %202, %200
  %204 = fmul double %203, 5.000000e-01
  %205 = load ptr, ptr %8, align 8, !tbaa !19
  %206 = getelementptr inbounds i8, ptr %205, i64 72
  %207 = load double, ptr %206, align 8, !tbaa !39
  %208 = fmul double %204, %207
  %209 = fmul double %207, %208
  %210 = load double, ptr %156, align 8, !tbaa !42
  %211 = load double, ptr %158, align 8, !tbaa !43
  %212 = call double @llvm.fmuladd.f64(double %209, double %210, double %211)
  store double %212, ptr %158, align 8, !tbaa !43
  %213 = load double, ptr %20, align 8, !tbaa !23
  %214 = fmul double %50, %213
  %215 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %216 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %214, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %215, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %217 unwind label %418

217:                                              ; preds = %201
  %218 = load double, ptr %18, align 8, !tbaa !22
  %219 = fmul double %50, %218
  %220 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %221 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %219, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %220, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %222 unwind label %418

222:                                              ; preds = %217
  %223 = load double, ptr %18, align 8, !tbaa !22
  %224 = load double, ptr %20, align 8, !tbaa !23
  %225 = fadd double %223, %224
  %226 = fmul double %48, %225
  %227 = invoke noundef double @_Z6gate_Cddbbb(double noundef %226, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %228 unwind label %418

228:                                              ; preds = %222
  %229 = call double @llvm.fmuladd.f64(double %221, double 2.000000e+00, double %216)
  %230 = fadd double %229, %227
  %231 = fmul double %230, 5.000000e-01
  %232 = load ptr, ptr %8, align 8, !tbaa !19
  %233 = getelementptr inbounds i8, ptr %232, i64 72
  %234 = load double, ptr %233, align 8, !tbaa !39
  %235 = fmul double %231, %234
  %236 = load double, ptr %131, align 8, !tbaa !41
  %237 = call double @llvm.fmuladd.f64(double %235, double %234, double %236)
  store double %237, ptr %131, align 8, !tbaa !41
  %238 = load double, ptr %20, align 8, !tbaa !23
  %239 = fmul double %50, %238
  %240 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %241 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %239, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %240, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %242 unwind label %418

242:                                              ; preds = %228
  %243 = load double, ptr %18, align 8, !tbaa !22
  %244 = fmul double %50, %243
  %245 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %246 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %244, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %245, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %247 unwind label %418

247:                                              ; preds = %242
  %248 = load double, ptr %18, align 8, !tbaa !22
  %249 = load double, ptr %20, align 8, !tbaa !23
  %250 = fadd double %248, %249
  %251 = fmul double %48, %250
  %252 = invoke noundef double @_Z6gate_Cddbbb(double noundef %251, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %253 unwind label %418

253:                                              ; preds = %247
  %254 = call double @llvm.fmuladd.f64(double %246, double 2.000000e+00, double %241)
  %255 = fadd double %254, %252
  %256 = fmul double %255, 5.000000e-01
  %257 = load ptr, ptr %8, align 8, !tbaa !19
  %258 = getelementptr inbounds i8, ptr %257, i64 72
  %259 = load double, ptr %258, align 8, !tbaa !39
  %260 = fmul double %256, %259
  %261 = fmul double %259, %260
  %262 = load double, ptr %156, align 8, !tbaa !42
  %263 = load double, ptr %158, align 8, !tbaa !43
  %264 = call double @llvm.fmuladd.f64(double %261, double %262, double %263)
  store double %264, ptr %158, align 8, !tbaa !43
  %265 = load double, ptr %20, align 8, !tbaa !23
  %266 = fmul double %48, %265
  %267 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %268 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %266, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %267, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %269 unwind label %418

269:                                              ; preds = %253
  %270 = load double, ptr %18, align 8, !tbaa !22
  %271 = fmul double %48, %270
  %272 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %273 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %271, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %272, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %274 unwind label %418

274:                                              ; preds = %269
  %275 = load double, ptr %18, align 8, !tbaa !22
  %276 = load double, ptr %20, align 8, !tbaa !23
  %277 = fadd double %275, %276
  %278 = fmul double %277, %1
  %279 = invoke noundef double @_Z6gate_Cddbbb(double noundef %278, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %280 unwind label %418

280:                                              ; preds = %274
  %281 = fadd double %268, %273
  %282 = call double @llvm.fmuladd.f64(double %281, double 2.000000e+00, double %279)
  %283 = fmul double %282, 5.000000e-01
  %284 = load ptr, ptr %8, align 8, !tbaa !19
  %285 = getelementptr inbounds i8, ptr %284, i64 72
  %286 = load double, ptr %285, align 8, !tbaa !39
  %287 = fmul double %283, %286
  %288 = load double, ptr %131, align 8, !tbaa !41
  %289 = call double @llvm.fmuladd.f64(double %287, double %286, double %288)
  store double %289, ptr %131, align 8, !tbaa !41
  %290 = load double, ptr %20, align 8, !tbaa !23
  %291 = fmul double %48, %290
  %292 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %293 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %291, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %292, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %294 unwind label %418

294:                                              ; preds = %280
  %295 = load double, ptr %18, align 8, !tbaa !22
  %296 = fmul double %48, %295
  %297 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !24
  %298 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %296, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %297, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %299 unwind label %418

299:                                              ; preds = %294
  %300 = load double, ptr %18, align 8, !tbaa !22
  %301 = load double, ptr %20, align 8, !tbaa !23
  %302 = fadd double %300, %301
  %303 = fmul double %302, %1
  %304 = invoke noundef double @_Z6gate_Cddbbb(double noundef %303, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %305 unwind label %418

305:                                              ; preds = %299
  %306 = fadd double %293, %298
  %307 = call double @llvm.fmuladd.f64(double %306, double 2.000000e+00, double %304)
  %308 = fmul double %307, 5.000000e-01
  %309 = load ptr, ptr %8, align 8, !tbaa !19
  %310 = getelementptr inbounds i8, ptr %309, i64 72
  %311 = load double, ptr %310, align 8, !tbaa !39
  %312 = fmul double %308, %311
  %313 = fmul double %311, %312
  %314 = load double, ptr %156, align 8, !tbaa !42
  %315 = load double, ptr %158, align 8, !tbaa !43
  %316 = call double @llvm.fmuladd.f64(double %313, double %314, double %315)
  store double %316, ptr %158, align 8, !tbaa !43
  %317 = getelementptr inbounds i8, ptr %0, i64 508
  %318 = load i8, ptr %317, align 4, !tbaa !44, !range !45, !noundef !46
  %319 = trunc nuw i8 %318 to i1
  %320 = load double, ptr %18, align 8, !tbaa !22
  %321 = fmul double %48, %320
  %322 = fmul double %321, 2.000000e+00
  %323 = load double, ptr %20, align 8, !tbaa !23
  %324 = fmul double %48, %323
  %325 = fmul double %324, 2.000000e+00
  br i1 %319, label %326, label %420

326:                                              ; preds = %305
  %327 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %322, double noundef %325, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %328 unwind label %418

328:                                              ; preds = %326
  %329 = load ptr, ptr %8, align 8, !tbaa !19
  %330 = getelementptr inbounds i8, ptr %329, i64 72
  %331 = load double, ptr %330, align 8, !tbaa !39
  %332 = fmul double %327, %331
  %333 = getelementptr inbounds i8, ptr %0, i64 424
  %334 = load double, ptr %333, align 8, !tbaa !47
  %335 = getelementptr inbounds i8, ptr %0, i64 32
  %336 = load double, ptr %335, align 8, !tbaa !48
  %337 = call double @llvm.fmuladd.f64(double %332, double %334, double %336)
  store double %337, ptr %335, align 8, !tbaa !48
  %338 = load double, ptr %18, align 8, !tbaa !22
  %339 = fmul double %50, %338
  %340 = fmul double %339, 3.000000e+00
  %341 = load double, ptr %20, align 8, !tbaa !23
  %342 = fmul double %50, %341
  %343 = fmul double %342, 3.000000e+00
  %344 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %340, double noundef %343, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %345 unwind label %418

345:                                              ; preds = %328
  %346 = load ptr, ptr %8, align 8, !tbaa !19
  %347 = getelementptr inbounds i8, ptr %346, i64 72
  %348 = load double, ptr %347, align 8, !tbaa !39
  %349 = fmul double %344, %348
  %350 = load double, ptr %333, align 8, !tbaa !47
  %351 = load double, ptr %335, align 8, !tbaa !48
  %352 = call double @llvm.fmuladd.f64(double %349, double %350, double %351)
  store double %352, ptr %335, align 8, !tbaa !48
  %353 = load double, ptr %18, align 8, !tbaa !22
  %354 = fmul double %50, %353
  %355 = fmul double %354, 3.000000e+00
  %356 = load double, ptr %20, align 8, !tbaa !23
  %357 = fmul double %50, %356
  %358 = fmul double %357, 3.000000e+00
  %359 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %355, double noundef %358, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %360 unwind label %418

360:                                              ; preds = %345
  %361 = load ptr, ptr %8, align 8, !tbaa !19
  %362 = getelementptr inbounds i8, ptr %361, i64 72
  %363 = load double, ptr %362, align 8, !tbaa !39
  %364 = fmul double %359, %363
  %365 = load double, ptr %333, align 8, !tbaa !47
  %366 = load double, ptr %335, align 8, !tbaa !48
  %367 = call double @llvm.fmuladd.f64(double %364, double %365, double %366)
  store double %367, ptr %335, align 8, !tbaa !48
  %368 = load double, ptr %18, align 8, !tbaa !22
  %369 = fmul double %48, %368
  %370 = fmul double %369, 2.000000e+00
  %371 = load double, ptr %20, align 8, !tbaa !23
  %372 = fmul double %48, %371
  %373 = fmul double %372, 2.000000e+00
  %374 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %370, double noundef %373, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %375 unwind label %418

375:                                              ; preds = %360
  %376 = load ptr, ptr %8, align 8, !tbaa !19
  %377 = getelementptr inbounds i8, ptr %376, i64 72
  %378 = load double, ptr %377, align 8, !tbaa !39
  %379 = fmul double %374, %378
  %380 = load double, ptr %333, align 8, !tbaa !47
  %381 = getelementptr inbounds i8, ptr %0, i64 40
  %382 = load double, ptr %381, align 8, !tbaa !49
  %383 = call double @llvm.fmuladd.f64(double %379, double %380, double %382)
  store double %383, ptr %381, align 8, !tbaa !49
  %384 = load double, ptr %18, align 8, !tbaa !22
  %385 = fmul double %50, %384
  %386 = fmul double %385, 3.000000e+00
  %387 = load double, ptr %20, align 8, !tbaa !23
  %388 = fmul double %50, %387
  %389 = fmul double %388, 3.000000e+00
  %390 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %386, double noundef %389, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %391 unwind label %418

391:                                              ; preds = %375
  %392 = load ptr, ptr %8, align 8, !tbaa !19
  %393 = getelementptr inbounds i8, ptr %392, i64 72
  %394 = load double, ptr %393, align 8, !tbaa !39
  %395 = fmul double %390, %394
  %396 = load double, ptr %333, align 8, !tbaa !47
  %397 = load double, ptr %381, align 8, !tbaa !49
  %398 = call double @llvm.fmuladd.f64(double %395, double %396, double %397)
  store double %398, ptr %381, align 8, !tbaa !49
  %399 = load double, ptr %18, align 8, !tbaa !22
  %400 = fmul double %50, %399
  %401 = fmul double %400, 3.000000e+00
  %402 = load double, ptr %20, align 8, !tbaa !23
  %403 = fmul double %50, %402
  %404 = fmul double %403, 3.000000e+00
  %405 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %401, double noundef %404, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %500 unwind label %418

406:                                              ; preds = %28, %25, %4
  %407 = landingpad { ptr, i32 }
          cleanup
  br label %508

408:                                              ; preds = %42, %34
  %409 = landingpad { ptr, i32 }
          cleanup
  br label %508

410:                                              ; preds = %45
  %411 = landingpad { ptr, i32 }
          cleanup
  br label %508

412:                                              ; preds = %54
  %413 = landingpad { ptr, i32 }
          cleanup
  br label %508

414:                                              ; preds = %69, %64, %59
  %415 = landingpad { ptr, i32 }
          cleanup
  br label %508

416:                                              ; preds = %85, %80, %73
  %417 = landingpad { ptr, i32 }
          cleanup
  br label %508

418:                                              ; preds = %485, %469, %454, %439, %422, %420, %391, %375, %360, %345, %328, %326, %299, %294, %280, %274, %269, %253, %247, %242, %228, %222, %217, %201, %195, %190, %176, %170, %165, %147, %143, %138, %123, %119, %114, %106, %91
  %419 = landingpad { ptr, i32 }
          cleanup
  br label %508

420:                                              ; preds = %305
  %421 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %322, double noundef %325, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %422 unwind label %418

422:                                              ; preds = %420
  %423 = load ptr, ptr %8, align 8, !tbaa !19
  %424 = getelementptr inbounds i8, ptr %423, i64 72
  %425 = load double, ptr %424, align 8, !tbaa !39
  %426 = fmul double %421, %425
  %427 = getelementptr inbounds i8, ptr %0, i64 424
  %428 = load double, ptr %427, align 8, !tbaa !47
  %429 = getelementptr inbounds i8, ptr %0, i64 32
  %430 = load double, ptr %429, align 8, !tbaa !48
  %431 = call double @llvm.fmuladd.f64(double %426, double %428, double %430)
  store double %431, ptr %429, align 8, !tbaa !48
  %432 = load double, ptr %18, align 8, !tbaa !22
  %433 = fmul double %50, %432
  %434 = fmul double %433, 3.000000e+00
  %435 = load double, ptr %20, align 8, !tbaa !23
  %436 = fmul double %50, %435
  %437 = fmul double %436, 3.000000e+00
  %438 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %434, double noundef %437, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %439 unwind label %418

439:                                              ; preds = %422
  %440 = load ptr, ptr %8, align 8, !tbaa !19
  %441 = getelementptr inbounds i8, ptr %440, i64 72
  %442 = load double, ptr %441, align 8, !tbaa !39
  %443 = fmul double %438, %442
  %444 = load double, ptr %427, align 8, !tbaa !47
  %445 = load double, ptr %429, align 8, !tbaa !48
  %446 = call double @llvm.fmuladd.f64(double %443, double %444, double %445)
  store double %446, ptr %429, align 8, !tbaa !48
  %447 = load double, ptr %18, align 8, !tbaa !22
  %448 = fmul double %50, %447
  %449 = fmul double %448, 3.000000e+00
  %450 = load double, ptr %20, align 8, !tbaa !23
  %451 = fmul double %50, %450
  %452 = fmul double %451, 3.000000e+00
  %453 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %449, double noundef %452, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %454 unwind label %418

454:                                              ; preds = %439
  %455 = load ptr, ptr %8, align 8, !tbaa !19
  %456 = getelementptr inbounds i8, ptr %455, i64 72
  %457 = load double, ptr %456, align 8, !tbaa !39
  %458 = fmul double %453, %457
  %459 = load double, ptr %427, align 8, !tbaa !47
  %460 = load double, ptr %429, align 8, !tbaa !48
  %461 = call double @llvm.fmuladd.f64(double %458, double %459, double %460)
  store double %461, ptr %429, align 8, !tbaa !48
  %462 = load double, ptr %18, align 8, !tbaa !22
  %463 = fmul double %48, %462
  %464 = fmul double %463, 2.000000e+00
  %465 = load double, ptr %20, align 8, !tbaa !23
  %466 = fmul double %48, %465
  %467 = fmul double %466, 2.000000e+00
  %468 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %464, double noundef %467, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %469 unwind label %418

469:                                              ; preds = %454
  %470 = load ptr, ptr %8, align 8, !tbaa !19
  %471 = getelementptr inbounds i8, ptr %470, i64 72
  %472 = load double, ptr %471, align 8, !tbaa !39
  %473 = fmul double %468, %472
  %474 = load double, ptr %427, align 8, !tbaa !47
  %475 = getelementptr inbounds i8, ptr %0, i64 40
  %476 = load double, ptr %475, align 8, !tbaa !49
  %477 = call double @llvm.fmuladd.f64(double %473, double %474, double %476)
  store double %477, ptr %475, align 8, !tbaa !49
  %478 = load double, ptr %18, align 8, !tbaa !22
  %479 = fmul double %50, %478
  %480 = fmul double %479, 3.000000e+00
  %481 = load double, ptr %20, align 8, !tbaa !23
  %482 = fmul double %50, %481
  %483 = fmul double %482, 3.000000e+00
  %484 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %480, double noundef %483, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %485 unwind label %418

485:                                              ; preds = %469
  %486 = load ptr, ptr %8, align 8, !tbaa !19
  %487 = getelementptr inbounds i8, ptr %486, i64 72
  %488 = load double, ptr %487, align 8, !tbaa !39
  %489 = fmul double %484, %488
  %490 = load double, ptr %427, align 8, !tbaa !47
  %491 = load double, ptr %475, align 8, !tbaa !49
  %492 = call double @llvm.fmuladd.f64(double %489, double %490, double %491)
  store double %492, ptr %475, align 8, !tbaa !49
  %493 = load double, ptr %18, align 8, !tbaa !22
  %494 = fmul double %50, %493
  %495 = fmul double %494, 3.000000e+00
  %496 = load double, ptr %20, align 8, !tbaa !23
  %497 = fmul double %50, %496
  %498 = fmul double %497, 3.000000e+00
  %499 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %495, double noundef %498, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %500 unwind label %418

500:                                              ; preds = %485, %391
  %.sink93 = phi double [ %405, %391 ], [ %499, %485 ]
  %.sink92 = phi ptr [ %333, %391 ], [ %427, %485 ]
  %.sink = phi ptr [ %381, %391 ], [ %475, %485 ]
  %501 = load ptr, ptr %8, align 8, !tbaa !19
  %502 = getelementptr inbounds i8, ptr %501, i64 72
  %503 = load double, ptr %502, align 8, !tbaa !39
  %504 = fmul double %.sink93, %503
  %505 = load double, ptr %.sink92, align 8, !tbaa !47
  %506 = load double, ptr %.sink, align 8, !tbaa !49
  %507 = call double @llvm.fmuladd.f64(double %504, double %505, double %506)
  store double %507, ptr %.sink, align 8, !tbaa !49
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %5) #5
  call void @llvm.lifetime.end.p0(i64 1264, ptr nonnull %5) #5
  ret void

508:                                              ; preds = %408, %412, %416, %418, %414, %410, %406
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %407, %406 ], [ %409, %408 ], [ %411, %410 ], [ %413, %412 ], [ %415, %414 ], [ %419, %418 ], [ %417, %416 ]
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %5) #5
  call void @llvm.lifetime.end.p0(i64 1264, ptr nonnull %5) #5
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn
}

declare noundef double @_ZN4Wire8wire_capEdb(ptr noundef nonnull align 8 dereferenceable(1264), double noundef, i1 noundef zeroext) local_unnamed_addr #1

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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { 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 #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, !17, i64 512}
!6 = !{!"_ZTS6Htree2", !7, i64 0, !9, i64 280, !9, i64 288, !9, i64 296, !12, i64 304, !9, i64 424, !9, i64 432, !14, i64 440, !9, i64 448, !9, i64 456, !9, i64 464, !9, i64 472, !15, i64 480, !15, i64 484, !15, i64 488, !15, i64 492, !15, i64 496, !15, i64 500, !15, i64 504, !16, i64 508, !16, i64 509, !17, i64 512, !9, i64 520, !9, i64 528, !18, i64 536}
!7 = !{!"_ZTS9Component", !8, i64 0, !12, i64 24, !12, i64 144, !9, i64 264, !9, i64 272}
!8 = !{!"_ZTS4Area", !9, i64 0, !9, i64 8, !9, i64 16}
!9 = !{!"double", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTS8powerDef", !13, i64 0, !13, i64 40, !13, i64 80}
!13 = !{!"_ZTS15powerComponents", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32}
!14 = !{!"_ZTS10Htree_type", !10, i64 0}
!15 = !{!"int", !10, i64 0}
!16 = !{!"bool", !10, i64 0}
!17 = !{!"_ZTS9Wire_type", !10, i64 0}
!18 = !{!"any pointer", !10, i64 0}
!19 = !{!6, !18, i64 536}
!20 = !{!21, !9, i64 152}
!21 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !9, i64 88, !9, i64 96, !9, i64 104, !9, i64 112, !9, i64 120, !9, i64 128, !9, i64 136, !9, i64 144, !9, i64 152, !9, i64 160}
!22 = !{!6, !9, i64 520}
!23 = !{!6, !9, i64 528}
!24 = !{!25, !9, i64 312}
!25 = !{!"_ZTS19TechnologyParameter", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40, !9, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !9, i64 88, !9, i64 96, !9, i64 104, !9, i64 112, !9, i64 120, !9, i64 128, !9, i64 136, !9, i64 144, !9, i64 152, !9, i64 160, !9, i64 168, !9, i64 176, !9, i64 184, !9, i64 192, !9, i64 200, !9, i64 208, !9, i64 216, !9, i64 224, !9, i64 232, !9, i64 240, !9, i64 248, !9, i64 256, !9, i64 264, !9, i64 272, !9, i64 280, !9, i64 288, !9, i64 296, !9, i64 304, !9, i64 312, !9, i64 320, !9, i64 328, !9, i64 336, !9, i64 344, !26, i64 352, !21, i64 360, !21, i64 528, !21, i64 696, !21, i64 864, !21, i64 1032, !27, i64 1200, !27, i64 1264, !27, i64 1328, !28, i64 1392, !29, i64 1416, !29, i64 1464, !29, i64 1512}
!26 = !{!"long", !10, i64 0}
!27 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40, !9, i64 48, !9, i64 56}
!28 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !9, i64 0, !9, i64 8, !9, i64 16}
!29 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40}
!30 = !{!31, !9, i64 344}
!31 = !{!"_ZTS4Wire", !7, i64 0, !17, i64 280, !9, i64 288, !9, i64 296, !32, i64 304, !9, i64 312, !9, i64 320, !9, i64 328, !9, i64 336, !9, i64 344, !15, i64 352, !9, i64 360, !9, i64 368, !9, i64 376, !33, i64 384, !7, i64 408, !7, i64 688, !7, i64 968, !9, i64 1248, !18, i64 1256}
!32 = !{!"_ZTS14Wire_placement", !10, i64 0}
!33 = !{!"_ZTSNSt7__cxx114listI9ComponentSaIS1_EEE", !34, i64 0}
!34 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EEE", !35, i64 0}
!35 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EE10_List_implE", !36, i64 0}
!36 = !{!"_ZTSNSt8__detail17_List_node_headerE", !37, i64 0, !26, i64 16}
!37 = !{!"_ZTSNSt8__detail15_List_node_baseE", !18, i64 0, !18, i64 8}
!38 = !{!21, !9, i64 80}
!39 = !{!21, !9, i64 72}
!40 = !{!7, !9, i64 264}
!41 = !{!7, !9, i64 24}
!42 = !{!6, !9, i64 432}
!43 = !{!7, !9, i64 104}
!44 = !{!6, !16, i64 508}
!45 = !{i8 0, i8 2}
!46 = !{}
!47 = !{!6, !9, i64 424}
!48 = !{!7, !9, i64 32}
!49 = !{!7, !9, i64 40}


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