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

; 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: mustprogress uwtable
define dso_local void @_ZN6Htree210input_nandEddd(ptr noundef nonnull align 8 dereferenceable(544) %0, double noundef %1, double noundef %2, double noundef %3) #0 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
  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
  %15 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 1264, ptr %9) #5
  %16 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 21
  %17 = load i32, ptr %16, align 8, !tbaa !11
  %18 = load double, ptr %8, align 8, !tbaa !9
  call void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %9, i32 noundef %17, double noundef %18, 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
  %19 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %20 = load ptr, ptr %19, align 8, !tbaa !21
  %21 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %20, i32 0, i32 19
  %22 = load double, ptr %21, align 8, !tbaa !22
  store double %22, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %23 = load double, ptr %6, align 8, !tbaa !9
  %24 = load double, ptr %10, align 8, !tbaa !9
  %25 = fadd double 1.000000e+00, %24
  %26 = fmul double %23, %25
  %27 = load double, ptr %10, align 8, !tbaa !9
  %28 = fadd double 2.000000e+00, %27
  %29 = fdiv double %26, %28
  store double %29, ptr %11, align 8, !tbaa !9
  %30 = load double, ptr %11, align 8, !tbaa !9
  %31 = fcmp olt double %30, 1.000000e+00
  br i1 %31, label %32, label %33

32:                                               ; preds = %4
  br label %35

33:                                               ; preds = %4
  %34 = load double, ptr %11, align 8, !tbaa !9
  br label %35

35:                                               ; preds = %33, %32
  %36 = phi double [ 1.000000e+00, %32 ], [ %34, %33 ]
  store double %36, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %37 = load double, ptr %11, align 8, !tbaa !9
  %38 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %39 = load double, ptr %38, align 8, !tbaa !24
  %40 = fmul double %37, %39
  %41 = invoke noundef double @_Z7tr_R_ondiibbb(double noundef %40, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %42 unwind label %224

42:                                               ; preds = %35
  %43 = fmul double 2.000000e+00, %41
  %44 = load double, ptr %11, align 8, !tbaa !9
  %45 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %46 = load double, ptr %45, align 8, !tbaa !24
  %47 = fmul double %44, %46
  %48 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !25
  %49 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %47, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %48, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %50 unwind label %224

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

59:                                               ; preds = %50
  %60 = fmul double 2.000000e+00, %58
  %61 = call double @llvm.fmuladd.f64(double %49, double 2.000000e+00, double %60)
  %62 = fmul double %43, %61
  store double %62, ptr %12, align 8, !tbaa !9
  %63 = getelementptr inbounds %class.Wire, ptr %9, i32 0, i32 9
  %64 = load double, ptr %63, align 8, !tbaa !32
  %65 = load double, ptr %12, align 8, !tbaa !9
  %66 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %67 = load ptr, ptr %66, align 8, !tbaa !21
  %68 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %67, i32 0, i32 10
  %69 = load double, ptr %68, align 8, !tbaa !40
  %70 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %71 = load ptr, ptr %70, align 8, !tbaa !21
  %72 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %71, i32 0, i32 9
  %73 = load double, ptr %72, align 8, !tbaa !41
  %74 = fdiv double %69, %73
  %75 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %76 = load ptr, ptr %75, align 8, !tbaa !21
  %77 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %76, i32 0, i32 10
  %78 = load double, ptr %77, align 8, !tbaa !40
  %79 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %80 = load ptr, ptr %79, align 8, !tbaa !21
  %81 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %80, i32 0, i32 9
  %82 = load double, ptr %81, align 8, !tbaa !41
  %83 = fdiv double %78, %82
  %84 = invoke noundef double @_Z8horowitzddddi(double noundef %64, double noundef %65, double noundef %74, double noundef %83, i32 noundef 1)
          to label %85 unwind label %224

85:                                               ; preds = %59
  %86 = getelementptr inbounds %class.Component, ptr %15, i32 0, i32 3
  %87 = load double, ptr %86, align 8, !tbaa !42
  %88 = fadd double %87, %84
  store double %88, ptr %86, align 8, !tbaa !42
  %89 = load double, ptr %10, align 8, !tbaa !9
  %90 = load double, ptr %11, align 8, !tbaa !9
  %91 = fmul double %89, %90
  %92 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 23
  %93 = load double, ptr %92, align 8, !tbaa !31
  %94 = fmul double %91, %93
  %95 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !25
  %96 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %94, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %95, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %97 unwind label %224

97:                                               ; preds = %85
  %98 = load double, ptr %11, align 8, !tbaa !9
  %99 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %100 = load double, ptr %99, align 8, !tbaa !24
  %101 = fmul double %98, %100
  %102 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !25
  %103 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %101, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %102, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %104 unwind label %224

104:                                              ; preds = %97
  %105 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %96, double %103)
  %106 = load double, ptr %7, align 8, !tbaa !9
  %107 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %108 = load double, ptr %107, align 8, !tbaa !24
  %109 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 23
  %110 = load double, ptr %109, align 8, !tbaa !31
  %111 = fadd double %108, %110
  %112 = fmul double %106, %111
  %113 = invoke noundef double @_Z6gate_Cddbbb(double noundef %112, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %114 unwind label %224

114:                                              ; preds = %104
  %115 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %113, double %105)
  %116 = fmul double 5.000000e-01, %115
  %117 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %118 = load ptr, ptr %117, align 8, !tbaa !21
  %119 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %118, i32 0, i32 9
  %120 = load double, ptr %119, align 8, !tbaa !41
  %121 = fmul double %116, %120
  %122 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %123 = load ptr, ptr %122, align 8, !tbaa !21
  %124 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %123, i32 0, i32 9
  %125 = load double, ptr %124, align 8, !tbaa !41
  %126 = getelementptr inbounds %class.Component, ptr %15, i32 0, i32 1
  %127 = getelementptr inbounds %class.powerDef, ptr %126, i32 0, i32 0
  %128 = getelementptr inbounds %class.powerComponents, ptr %127, i32 0, i32 0
  %129 = load double, ptr %128, align 8, !tbaa !43
  %130 = call double @llvm.fmuladd.f64(double %121, double %125, double %129)
  store double %130, ptr %128, align 8, !tbaa !43
  %131 = load double, ptr %10, align 8, !tbaa !9
  %132 = load double, ptr %11, align 8, !tbaa !9
  %133 = fmul double %131, %132
  %134 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 23
  %135 = load double, ptr %134, align 8, !tbaa !31
  %136 = fmul double %133, %135
  %137 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !25
  %138 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %136, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %137, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %139 unwind label %224

139:                                              ; preds = %114
  %140 = load double, ptr %11, align 8, !tbaa !9
  %141 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %142 = load double, ptr %141, align 8, !tbaa !24
  %143 = fmul double %140, %142
  %144 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !25
  %145 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %143, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %144, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %146 unwind label %224

146:                                              ; preds = %139
  %147 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %138, double %145)
  %148 = load double, ptr %7, align 8, !tbaa !9
  %149 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %150 = load double, ptr %149, align 8, !tbaa !24
  %151 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 23
  %152 = load double, ptr %151, align 8, !tbaa !31
  %153 = fadd double %150, %152
  %154 = fmul double %148, %153
  %155 = invoke noundef double @_Z6gate_Cddbbb(double noundef %154, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %156 unwind label %224

156:                                              ; preds = %146
  %157 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %155, double %147)
  %158 = fmul double 5.000000e-01, %157
  %159 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %160 = load ptr, ptr %159, align 8, !tbaa !21
  %161 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %160, i32 0, i32 9
  %162 = load double, ptr %161, align 8, !tbaa !41
  %163 = fmul double %158, %162
  %164 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %165 = load ptr, ptr %164, align 8, !tbaa !21
  %166 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %165, i32 0, i32 9
  %167 = load double, ptr %166, align 8, !tbaa !41
  %168 = fmul double %163, %167
  %169 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 5
  %170 = load double, ptr %169, align 8, !tbaa !44
  %171 = getelementptr inbounds %class.Component, ptr %15, i32 0, i32 1
  %172 = getelementptr inbounds %class.powerDef, ptr %171, i32 0, i32 2
  %173 = getelementptr inbounds %class.powerComponents, ptr %172, i32 0, i32 0
  %174 = load double, ptr %173, align 8, !tbaa !45
  %175 = call double @llvm.fmuladd.f64(double %168, double %170, double %174)
  store double %175, ptr %173, align 8, !tbaa !45
  %176 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 5
  %177 = load double, ptr %176, align 8, !tbaa !44
  %178 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %179 = load double, ptr %178, align 8, !tbaa !24
  %180 = load double, ptr %11, align 8, !tbaa !9
  %181 = fmul double %180, 2.000000e+00
  %182 = fmul double %179, %181
  %183 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 23
  %184 = load double, ptr %183, align 8, !tbaa !31
  %185 = load double, ptr %11, align 8, !tbaa !9
  %186 = fmul double %184, %185
  %187 = fmul double %186, 2.000000e+00
  %188 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %182, double noundef %187, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %189 unwind label %224

189:                                              ; preds = %156
  %190 = fmul double %177, %188
  %191 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %192 = load ptr, ptr %191, align 8, !tbaa !21
  %193 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %192, i32 0, i32 9
  %194 = load double, ptr %193, align 8, !tbaa !41
  %195 = getelementptr inbounds %class.Component, ptr %15, i32 0, i32 1
  %196 = getelementptr inbounds %class.powerDef, ptr %195, i32 0, i32 0
  %197 = getelementptr inbounds %class.powerComponents, ptr %196, i32 0, i32 1
  %198 = load double, ptr %197, align 8, !tbaa !46
  %199 = call double @llvm.fmuladd.f64(double %190, double %194, double %198)
  store double %199, ptr %197, align 8, !tbaa !46
  %200 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 5
  %201 = load double, ptr %200, align 8, !tbaa !44
  %202 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 22
  %203 = load double, ptr %202, align 8, !tbaa !24
  %204 = load double, ptr %11, align 8, !tbaa !9
  %205 = fmul double %204, 2.000000e+00
  %206 = fmul double %203, %205
  %207 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 23
  %208 = load double, ptr %207, align 8, !tbaa !31
  %209 = load double, ptr %11, align 8, !tbaa !9
  %210 = fmul double %208, %209
  %211 = fmul double %210, 2.000000e+00
  %212 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %206, double noundef %211, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %213 unwind label %224

213:                                              ; preds = %189
  %214 = fmul double %201, %212
  %215 = getelementptr inbounds %class.Htree2, ptr %15, i32 0, i32 24
  %216 = load ptr, ptr %215, align 8, !tbaa !21
  %217 = getelementptr inbounds %"class.TechnologyParameter::DeviceType", ptr %216, i32 0, i32 9
  %218 = load double, ptr %217, align 8, !tbaa !41
  %219 = getelementptr inbounds %class.Component, ptr %15, i32 0, i32 1
  %220 = getelementptr inbounds %class.powerDef, ptr %219, i32 0, i32 0
  %221 = getelementptr inbounds %class.powerComponents, ptr %220, i32 0, i32 2
  %222 = load double, ptr %221, align 8, !tbaa !47
  %223 = call double @llvm.fmuladd.f64(double %214, double %218, double %222)
  store double %223, ptr %221, align 8, !tbaa !47
  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

224:                                              ; preds = %189, %156, %146, %139, %114, %104, %97, %85, %59, %50, %42, %35
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %13, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %14, align 4
  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 %228

228:                                              ; preds = %224
  %229 = load ptr, ptr %13, align 8
  %230 = load i32, ptr %14, align 4
  %231 = insertvalue { ptr, i32 } poison, ptr %229, 0
  %232 = insertvalue { ptr, i32 } %231, i32 %230, 1
  resume { ptr, i32 } %232
}

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #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 = !{!26, !10, i64 312}
!26 = !{!"_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, !27, i64 352, !23, i64 360, !23, i64 528, !23, i64 696, !23, i64 864, !23, i64 1032, !28, i64 1200, !28, i64 1264, !28, i64 1328, !29, i64 1392, !30, i64 1416, !30, i64 1464, !30, i64 1512}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_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}
!29 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !10, i64 0, !10, i64 8, !10, i64 16}
!30 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!31 = !{!12, !10, i64 528}
!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, !27, 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 424}
!45 = !{!13, !10, i64 104}
!46 = !{!13, !10, i64 32}
!47 = !{!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 uwtable
define dso_local void @_ZN6Htree210input_nandEddd(ptr nocapture noundef nonnull align 8 dereferenceable(544) %0, double noundef %1, double noundef %2, double noundef %3) local_unnamed_addr #0 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 = fdiv double %13, %14
  %16 = fcmp olt double %15, 1.000000e+00
  %17 = select i1 %16, double 1.000000e+00, double %15
  %18 = getelementptr inbounds i8, ptr %0, i64 520
  %19 = load double, ptr %18, align 8, !tbaa !22
  %20 = fmul double %19, %17
  %21 = invoke noundef double @_Z7tr_R_ondiibbb(double noundef %20, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %22 unwind label %138

22:                                               ; preds = %4
  %23 = fmul double %21, 2.000000e+00
  %24 = load double, ptr %18, align 8, !tbaa !22
  %25 = fmul double %17, %24
  %26 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !23
  %27 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %25, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %26, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %28 unwind label %138

28:                                               ; preds = %22
  %29 = load double, ptr %18, align 8, !tbaa !22
  %30 = getelementptr inbounds i8, ptr %0, i64 528
  %31 = load double, ptr %30, align 8, !tbaa !29
  %32 = fadd double %29, %31
  %33 = fmul double %32, %2
  %34 = invoke noundef double @_Z6gate_Cddbbb(double noundef %33, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %35 unwind label %138

35:                                               ; preds = %28
  %36 = fmul double %34, 2.000000e+00
  %37 = call double @llvm.fmuladd.f64(double %27, double 2.000000e+00, double %36)
  %38 = fmul double %23, %37
  %39 = getelementptr inbounds i8, ptr %5, i64 344
  %40 = load double, ptr %39, align 8, !tbaa !30
  %41 = load ptr, ptr %8, align 8, !tbaa !19
  %42 = getelementptr inbounds i8, ptr %41, i64 80
  %43 = load double, ptr %42, align 8, !tbaa !38
  %44 = getelementptr inbounds i8, ptr %41, i64 72
  %45 = load double, ptr %44, align 8, !tbaa !39
  %46 = fdiv double %43, %45
  %47 = invoke noundef double @_Z8horowitzddddi(double noundef %40, double noundef %38, double noundef %46, double noundef %46, i32 noundef 1)
          to label %48 unwind label %138

48:                                               ; preds = %35
  %49 = getelementptr inbounds i8, ptr %0, i64 264
  %50 = load double, ptr %49, align 8, !tbaa !40
  %51 = fadd double %47, %50
  store double %51, ptr %49, align 8, !tbaa !40
  %52 = fmul double %11, %17
  %53 = load double, ptr %30, align 8, !tbaa !29
  %54 = fmul double %52, %53
  %55 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !23
  %56 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %54, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %55, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %57 unwind label %138

57:                                               ; preds = %48
  %58 = load double, ptr %18, align 8, !tbaa !22
  %59 = fmul double %17, %58
  %60 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !23
  %61 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %59, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %60, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %62 unwind label %138

62:                                               ; preds = %57
  %63 = load double, ptr %18, align 8, !tbaa !22
  %64 = load double, ptr %30, align 8, !tbaa !29
  %65 = fadd double %63, %64
  %66 = fmul double %65, %2
  %67 = invoke noundef double @_Z6gate_Cddbbb(double noundef %66, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %68 unwind label %138

68:                                               ; preds = %62
  %69 = call double @llvm.fmuladd.f64(double %56, double 2.000000e+00, double %61)
  %70 = call double @llvm.fmuladd.f64(double %67, double 2.000000e+00, double %69)
  %71 = fmul double %70, 5.000000e-01
  %72 = load ptr, ptr %8, align 8, !tbaa !19
  %73 = getelementptr inbounds i8, ptr %72, i64 72
  %74 = load double, ptr %73, align 8, !tbaa !39
  %75 = fmul double %71, %74
  %76 = getelementptr inbounds i8, ptr %0, i64 24
  %77 = load double, ptr %76, align 8, !tbaa !41
  %78 = call double @llvm.fmuladd.f64(double %75, double %74, double %77)
  store double %78, ptr %76, align 8, !tbaa !41
  %79 = load double, ptr %30, align 8, !tbaa !29
  %80 = fmul double %52, %79
  %81 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !23
  %82 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %80, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %81, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %83 unwind label %138

83:                                               ; preds = %68
  %84 = load double, ptr %18, align 8, !tbaa !22
  %85 = fmul double %17, %84
  %86 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !23
  %87 = invoke noundef double @_Z8drain_C_diiidbbb(double noundef %85, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %86, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %88 unwind label %138

88:                                               ; preds = %83
  %89 = load double, ptr %18, align 8, !tbaa !22
  %90 = load double, ptr %30, align 8, !tbaa !29
  %91 = fadd double %89, %90
  %92 = fmul double %91, %2
  %93 = invoke noundef double @_Z6gate_Cddbbb(double noundef %92, double noundef 0.000000e+00, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %94 unwind label %138

94:                                               ; preds = %88
  %95 = call double @llvm.fmuladd.f64(double %82, double 2.000000e+00, double %87)
  %96 = call double @llvm.fmuladd.f64(double %93, double 2.000000e+00, double %95)
  %97 = fmul double %96, 5.000000e-01
  %98 = load ptr, ptr %8, align 8, !tbaa !19
  %99 = getelementptr inbounds i8, ptr %98, i64 72
  %100 = load double, ptr %99, align 8, !tbaa !39
  %101 = fmul double %97, %100
  %102 = fmul double %100, %101
  %103 = getelementptr inbounds i8, ptr %0, i64 424
  %104 = load double, ptr %103, align 8, !tbaa !42
  %105 = getelementptr inbounds i8, ptr %0, i64 104
  %106 = load double, ptr %105, align 8, !tbaa !43
  %107 = call double @llvm.fmuladd.f64(double %102, double %104, double %106)
  store double %107, ptr %105, align 8, !tbaa !43
  %108 = load double, ptr %18, align 8, !tbaa !22
  %109 = fmul double %17, 2.000000e+00
  %110 = fmul double %109, %108
  %111 = load double, ptr %30, align 8, !tbaa !29
  %112 = fmul double %17, %111
  %113 = fmul double %112, 2.000000e+00
  %114 = invoke noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %110, double noundef %113, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %115 unwind label %138

115:                                              ; preds = %94
  %116 = fmul double %104, %114
  %117 = load ptr, ptr %8, align 8, !tbaa !19
  %118 = getelementptr inbounds i8, ptr %117, i64 72
  %119 = load double, ptr %118, align 8, !tbaa !39
  %120 = getelementptr inbounds i8, ptr %0, i64 32
  %121 = load double, ptr %120, align 8, !tbaa !44
  %122 = call double @llvm.fmuladd.f64(double %116, double %119, double %121)
  store double %122, ptr %120, align 8, !tbaa !44
  %123 = load double, ptr %103, align 8, !tbaa !42
  %124 = load double, ptr %18, align 8, !tbaa !22
  %125 = fmul double %109, %124
  %126 = load double, ptr %30, align 8, !tbaa !29
  %127 = fmul double %17, %126
  %128 = fmul double %127, 2.000000e+00
  %129 = invoke noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %125, double noundef %128, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
          to label %130 unwind label %138

130:                                              ; preds = %115
  %131 = fmul double %123, %129
  %132 = load ptr, ptr %8, align 8, !tbaa !19
  %133 = getelementptr inbounds i8, ptr %132, i64 72
  %134 = load double, ptr %133, align 8, !tbaa !39
  %135 = getelementptr inbounds i8, ptr %0, i64 40
  %136 = load double, ptr %135, align 8, !tbaa !45
  %137 = call double @llvm.fmuladd.f64(double %131, double %134, double %136)
  store double %137, ptr %135, align 8, !tbaa !45
  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

138:                                              ; preds = %115, %94, %88, %83, %68, %62, %57, %48, %35, %28, %22, %4
  %139 = landingpad { ptr, i32 }
          cleanup
  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 } %139
}

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #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 = !{!24, !9, i64 312}
!24 = !{!"_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, !25, i64 352, !21, i64 360, !21, i64 528, !21, i64 696, !21, i64 864, !21, i64 1032, !26, i64 1200, !26, i64 1264, !26, i64 1328, !27, i64 1392, !28, i64 1416, !28, i64 1464, !28, i64 1512}
!25 = !{!"long", !10, i64 0}
!26 = !{!"_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}
!27 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !9, i64 0, !9, i64 8, !9, i64 16}
!28 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40}
!29 = !{!6, !9, i64 528}
!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, !25, 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 424}
!43 = !{!7, !9, i64 104}
!44 = !{!7, !9, i64 32}
!45 = !{!7, !9, i64 40}


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