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

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

@.str.1 = external hidden unnamed_addr constant [69 x i8], align 1
@g_tp = external global %class.TechnologyParameter, align 8
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@__PRETTY_FUNCTION__._ZN6Htree28in_htreeEv = external hidden unnamed_addr constant [24 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Htree28in_htreeEv(ptr noundef nonnull align 8 dereferenceable(544) %0) #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca double, align 8
  %4 = alloca double, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %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 ptr, align 8
  %20 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %21 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #9
  store double 0.000000e+00, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #9
  store double 0.000000e+00, ptr %4, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  store double 0.000000e+00, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #9
  store double 0.000000e+00, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #9
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  store double 0.000000e+00, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  store double 0.000000e+00, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 0, ptr %12, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %22 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %23 = load i32, ptr %22, align 8, !tbaa !13
  %24 = sdiv i32 %23, 2
  %25 = sext i32 %24 to i64
  %26 = call noundef i32 @_Z5_log2m(i64 noundef %25)
  store i32 %26, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %27 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %28 = load i32, ptr %27, align 4, !tbaa !22
  %29 = sdiv i32 %28, 2
  %30 = sext i32 %29 to i64
  %31 = call noundef i32 @_Z5_log2m(i64 noundef %30)
  store i32 %31, ptr %14, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %32 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 19
  %33 = load i8, ptr %32, align 4, !tbaa !23, !range !24, !noundef !25
  %34 = trunc i8 %33 to i1
  br i1 %34, label %35, label %96

35:                                               ; preds = %1
  %36 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 11
  %37 = load double, ptr %36, align 8, !tbaa !26
  %38 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %39 = load i32, ptr %38, align 4, !tbaa !22
  %40 = sitofp i32 %39 to double
  %41 = fmul double %37, %40
  %42 = fdiv double %41, 2.000000e+00
  %43 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %44 = load i32, ptr %43, align 8, !tbaa !27
  %45 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %46 = load i32, ptr %45, align 4, !tbaa !28
  %47 = add nsw i32 %44, %46
  %48 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %49 = load i32, ptr %48, align 4, !tbaa !29
  %50 = add nsw i32 %47, %49
  %51 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %52 = load i32, ptr %51, align 8, !tbaa !30
  %53 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %54 = load i32, ptr %53, align 8, !tbaa !31
  %55 = add nsw i32 %52, %54
  %56 = add nsw i32 %50, %55
  %57 = sitofp i32 %56 to double
  %58 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %59 = fmul double %57, %58
  %60 = fmul double %59, 2.000000e+00
  %61 = load i32, ptr %13, align 4, !tbaa !11
  %62 = call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %61)
  %63 = fsub double 1.000000e+00, %62
  %64 = call double @llvm.fmuladd.f64(double %60, double %63, double %42)
  %65 = fdiv double %64, 2.000000e+00
  store double %65, ptr %16, align 8, !tbaa !9
  %66 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 10
  %67 = load double, ptr %66, align 8, !tbaa !39
  %68 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %69 = load i32, ptr %68, align 8, !tbaa !13
  %70 = sitofp i32 %69 to double
  %71 = fmul double %67, %70
  %72 = fdiv double %71, 2.000000e+00
  %73 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %74 = load i32, ptr %73, align 8, !tbaa !27
  %75 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %76 = load i32, ptr %75, align 4, !tbaa !28
  %77 = add nsw i32 %74, %76
  %78 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %79 = load i32, ptr %78, align 4, !tbaa !29
  %80 = add nsw i32 %77, %79
  %81 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %82 = load i32, ptr %81, align 8, !tbaa !30
  %83 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %84 = load i32, ptr %83, align 8, !tbaa !31
  %85 = add nsw i32 %82, %84
  %86 = add nsw i32 %80, %85
  %87 = sitofp i32 %86 to double
  %88 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %89 = fmul double %87, %88
  %90 = fmul double %89, 2.000000e+00
  %91 = load i32, ptr %14, align 4, !tbaa !11
  %92 = call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %91)
  %93 = fsub double 1.000000e+00, %92
  %94 = call double @llvm.fmuladd.f64(double %90, double %93, double %72)
  %95 = fdiv double %94, 2.000000e+00
  store double %95, ptr %15, align 8, !tbaa !9
  br label %373

96:                                               ; preds = %1
  %97 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %98 = load i32, ptr %97, align 8, !tbaa !13
  %99 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %100 = load i32, ptr %99, align 4, !tbaa !22
  %101 = icmp eq i32 %98, %100
  br i1 %101, label %102, label %173

102:                                              ; preds = %96
  %103 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 11
  %104 = load double, ptr %103, align 8, !tbaa !26
  %105 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %106 = load i32, ptr %105, align 4, !tbaa !22
  %107 = sitofp i32 %106 to double
  %108 = fmul double %104, %107
  %109 = fdiv double %108, 2.000000e+00
  %110 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %111 = load i32, ptr %110, align 8, !tbaa !27
  %112 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %113 = load i32, ptr %112, align 8, !tbaa !30
  %114 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %115 = load i32, ptr %114, align 8, !tbaa !31
  %116 = add nsw i32 %113, %115
  %117 = add nsw i32 %111, %116
  %118 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %119 = load i32, ptr %118, align 4, !tbaa !22
  %120 = sdiv i32 %119, 2
  %121 = sub nsw i32 %120, 1
  %122 = mul nsw i32 %117, %121
  %123 = sitofp i32 %122 to double
  %124 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %125 = call double @llvm.fmuladd.f64(double %123, double %124, double %109)
  %126 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %127 = load i32, ptr %126, align 4, !tbaa !28
  %128 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %129 = load i32, ptr %128, align 4, !tbaa !29
  %130 = add nsw i32 %127, %129
  %131 = sitofp i32 %130 to double
  %132 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %133 = fmul double %131, %132
  %134 = load i32, ptr %13, align 4, !tbaa !11
  %135 = sitofp i32 %134 to double
  %136 = call double @llvm.fmuladd.f64(double %133, double %135, double %125)
  %137 = fdiv double %136, 2.000000e+00
  store double %137, ptr %16, align 8, !tbaa !9
  %138 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 10
  %139 = load double, ptr %138, align 8, !tbaa !39
  %140 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %141 = load i32, ptr %140, align 8, !tbaa !13
  %142 = sitofp i32 %141 to double
  %143 = fmul double %139, %142
  %144 = fdiv double %143, 2.000000e+00
  %145 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %146 = load i32, ptr %145, align 8, !tbaa !27
  %147 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %148 = load i32, ptr %147, align 8, !tbaa !30
  %149 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %150 = load i32, ptr %149, align 8, !tbaa !31
  %151 = add nsw i32 %148, %150
  %152 = add nsw i32 %146, %151
  %153 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %154 = load i32, ptr %153, align 8, !tbaa !13
  %155 = sdiv i32 %154, 2
  %156 = sub nsw i32 %155, 1
  %157 = mul nsw i32 %152, %156
  %158 = sitofp i32 %157 to double
  %159 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %160 = call double @llvm.fmuladd.f64(double %158, double %159, double %144)
  %161 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %162 = load i32, ptr %161, align 4, !tbaa !28
  %163 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %164 = load i32, ptr %163, align 4, !tbaa !29
  %165 = add nsw i32 %162, %164
  %166 = sitofp i32 %165 to double
  %167 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %168 = fmul double %166, %167
  %169 = load i32, ptr %14, align 4, !tbaa !11
  %170 = sitofp i32 %169 to double
  %171 = call double @llvm.fmuladd.f64(double %168, double %170, double %160)
  %172 = fdiv double %171, 2.000000e+00
  store double %172, ptr %15, align 8, !tbaa !9
  br label %372

173:                                              ; preds = %96
  %174 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %175 = load i32, ptr %174, align 8, !tbaa !13
  %176 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %177 = load i32, ptr %176, align 4, !tbaa !22
  %178 = icmp sgt i32 %175, %177
  br i1 %178, label %179, label %276

179:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %180 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %181 = load i32, ptr %180, align 8, !tbaa !13
  %182 = sdiv i32 %181, 2
  %183 = sext i32 %182 to i64
  %184 = call noundef i32 @_Z5_log2m(i64 noundef %183)
  %185 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %186 = load i32, ptr %185, align 4, !tbaa !22
  %187 = sdiv i32 %186, 2
  %188 = sext i32 %187 to i64
  %189 = call noundef i32 @_Z5_log2m(i64 noundef %188)
  %190 = sub i32 %184, %189
  %191 = uitofp i32 %190 to double
  store double %191, ptr %17, align 8, !tbaa !9
  %192 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 11
  %193 = load double, ptr %192, align 8, !tbaa !26
  %194 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %195 = load i32, ptr %194, align 4, !tbaa !22
  %196 = sitofp i32 %195 to double
  %197 = fmul double %193, %196
  %198 = fdiv double %197, 2.000000e+00
  %199 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %200 = load i32, ptr %199, align 8, !tbaa !27
  %201 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %202 = load i32, ptr %201, align 8, !tbaa !30
  %203 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %204 = load i32, ptr %203, align 8, !tbaa !31
  %205 = add nsw i32 %202, %204
  %206 = add nsw i32 %200, %205
  %207 = sitofp i32 %206 to double
  %208 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %209 = load i32, ptr %208, align 4, !tbaa !22
  %210 = sdiv i32 %209, 2
  %211 = sub nsw i32 %210, 1
  %212 = sitofp i32 %211 to double
  %213 = load double, ptr %17, align 8, !tbaa !9
  %214 = fadd double %212, %213
  %215 = fmul double %207, %214
  %216 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %217 = call double @llvm.fmuladd.f64(double %215, double %216, double %198)
  %218 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %219 = load i32, ptr %218, align 4, !tbaa !28
  %220 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %221 = load i32, ptr %220, align 4, !tbaa !29
  %222 = add nsw i32 %219, %221
  %223 = sitofp i32 %222 to double
  %224 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %225 = fmul double %223, %224
  %226 = load i32, ptr %13, align 4, !tbaa !11
  %227 = load i32, ptr %14, align 4, !tbaa !11
  %228 = sub nsw i32 %226, %227
  %229 = call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %228)
  %230 = fsub double 1.000000e+00, %229
  %231 = load i32, ptr %14, align 4, !tbaa !11
  %232 = load i32, ptr %13, align 4, !tbaa !11
  %233 = sub nsw i32 %231, %232
  %234 = call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %233)
  %235 = load i32, ptr %14, align 4, !tbaa !11
  %236 = sitofp i32 %235 to double
  %237 = fmul double %234, %236
  %238 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %230, double %237)
  %239 = call double @llvm.fmuladd.f64(double %225, double %238, double %217)
  %240 = fdiv double %239, 2.000000e+00
  store double %240, ptr %16, align 8, !tbaa !9
  %241 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 10
  %242 = load double, ptr %241, align 8, !tbaa !39
  %243 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %244 = load i32, ptr %243, align 8, !tbaa !13
  %245 = sitofp i32 %244 to double
  %246 = fmul double %242, %245
  %247 = fdiv double %246, 2.000000e+00
  %248 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %249 = load i32, ptr %248, align 8, !tbaa !27
  %250 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %251 = load i32, ptr %250, align 8, !tbaa !30
  %252 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %253 = load i32, ptr %252, align 8, !tbaa !31
  %254 = add nsw i32 %251, %253
  %255 = add nsw i32 %249, %254
  %256 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %257 = load i32, ptr %256, align 8, !tbaa !13
  %258 = sdiv i32 %257, 2
  %259 = sub nsw i32 %258, 1
  %260 = mul nsw i32 %255, %259
  %261 = sitofp i32 %260 to double
  %262 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %263 = call double @llvm.fmuladd.f64(double %261, double %262, double %247)
  %264 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %265 = load i32, ptr %264, align 4, !tbaa !28
  %266 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %267 = load i32, ptr %266, align 4, !tbaa !29
  %268 = add nsw i32 %265, %267
  %269 = sitofp i32 %268 to double
  %270 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %271 = fmul double %269, %270
  %272 = load i32, ptr %14, align 4, !tbaa !11
  %273 = sitofp i32 %272 to double
  %274 = call double @llvm.fmuladd.f64(double %271, double %273, double %263)
  %275 = fdiv double %274, 2.000000e+00
  store double %275, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  br label %371

276:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %277 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %278 = load i32, ptr %277, align 4, !tbaa !22
  %279 = sdiv i32 %278, 2
  %280 = sext i32 %279 to i64
  %281 = call noundef i32 @_Z5_log2m(i64 noundef %280)
  %282 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %283 = load i32, ptr %282, align 8, !tbaa !13
  %284 = sdiv i32 %283, 2
  %285 = sext i32 %284 to i64
  %286 = call noundef i32 @_Z5_log2m(i64 noundef %285)
  %287 = sub i32 %281, %286
  %288 = uitofp i32 %287 to double
  store double %288, ptr %18, align 8, !tbaa !9
  %289 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 11
  %290 = load double, ptr %289, align 8, !tbaa !26
  %291 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 17
  %292 = load i32, ptr %291, align 4, !tbaa !22
  %293 = sitofp i32 %292 to double
  %294 = fmul double %290, %293
  %295 = fdiv double %294, 2.000000e+00
  %296 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %297 = load i32, ptr %296, align 8, !tbaa !27
  %298 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %299 = load i32, ptr %298, align 8, !tbaa !30
  %300 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %301 = load i32, ptr %300, align 8, !tbaa !31
  %302 = add nsw i32 %299, %301
  %303 = add nsw i32 %297, %302
  %304 = sitofp i32 %303 to double
  %305 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %306 = load i32, ptr %305, align 8, !tbaa !13
  %307 = sdiv i32 %306, 2
  %308 = sub nsw i32 %307, 1
  %309 = sitofp i32 %308 to double
  %310 = load double, ptr %18, align 8, !tbaa !9
  %311 = fadd double %309, %310
  %312 = fmul double %304, %311
  %313 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %314 = call double @llvm.fmuladd.f64(double %312, double %313, double %295)
  %315 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %316 = load i32, ptr %315, align 4, !tbaa !28
  %317 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %318 = load i32, ptr %317, align 4, !tbaa !29
  %319 = add nsw i32 %316, %318
  %320 = sitofp i32 %319 to double
  %321 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %322 = fmul double %320, %321
  %323 = load i32, ptr %13, align 4, !tbaa !11
  %324 = sitofp i32 %323 to double
  %325 = call double @llvm.fmuladd.f64(double %322, double %324, double %314)
  %326 = fdiv double %325, 2.000000e+00
  store double %326, ptr %16, align 8, !tbaa !9
  %327 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 10
  %328 = load double, ptr %327, align 8, !tbaa !39
  %329 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %330 = load i32, ptr %329, align 8, !tbaa !13
  %331 = sitofp i32 %330 to double
  %332 = fmul double %328, %331
  %333 = fdiv double %332, 2.000000e+00
  %334 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 12
  %335 = load i32, ptr %334, align 8, !tbaa !27
  %336 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 14
  %337 = load i32, ptr %336, align 8, !tbaa !30
  %338 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 16
  %339 = load i32, ptr %338, align 8, !tbaa !31
  %340 = add nsw i32 %337, %339
  %341 = add nsw i32 %335, %340
  %342 = sitofp i32 %341 to double
  %343 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 18
  %344 = load i32, ptr %343, align 8, !tbaa !13
  %345 = sdiv i32 %344, 2
  %346 = sub nsw i32 %345, 1
  %347 = sitofp i32 %346 to double
  %348 = load double, ptr %18, align 8, !tbaa !9
  %349 = fadd double %347, %348
  %350 = fmul double %342, %349
  %351 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %352 = call double @llvm.fmuladd.f64(double %350, double %351, double %333)
  %353 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 13
  %354 = load i32, ptr %353, align 4, !tbaa !28
  %355 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 15
  %356 = load i32, ptr %355, align 4, !tbaa !29
  %357 = add nsw i32 %354, %356
  %358 = sitofp i32 %357 to double
  %359 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), align 8, !tbaa !32
  %360 = fmul double %358, %359
  %361 = load i32, ptr %13, align 4, !tbaa !11
  %362 = sitofp i32 %361 to double
  %363 = load i32, ptr %14, align 4, !tbaa !11
  %364 = load i32, ptr %13, align 4, !tbaa !11
  %365 = sub nsw i32 %363, %364
  %366 = call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %365)
  %367 = fsub double 1.000000e+00, %366
  %368 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %367, double %362)
  %369 = call double @llvm.fmuladd.f64(double %360, double %368, double %352)
  %370 = fdiv double %369, 2.000000e+00
  store double %370, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %371

371:                                              ; preds = %276, %179
  br label %372

372:                                              ; preds = %371, %102
  br label %373

373:                                              ; preds = %372, %35
  %374 = load double, ptr %16, align 8, !tbaa !9
  %375 = fmul double %374, 2.000000e+00
  %376 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 0
  %377 = getelementptr inbounds %class.Area, ptr %376, i32 0, i32 1
  store double %375, ptr %377, align 8, !tbaa !40
  %378 = load double, ptr %15, align 8, !tbaa !9
  %379 = fmul double %378, 2.000000e+00
  %380 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 0
  %381 = getelementptr inbounds %class.Area, ptr %380, i32 0, i32 0
  store double %379, ptr %381, align 8, !tbaa !41
  %382 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 3
  store double 0.000000e+00, ptr %382, align 8, !tbaa !42
  %383 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %384 = getelementptr inbounds %class.powerDef, ptr %383, i32 0, i32 0
  %385 = getelementptr inbounds %class.powerComponents, ptr %384, i32 0, i32 0
  store double 0.000000e+00, ptr %385, align 8, !tbaa !43
  %386 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %387 = getelementptr inbounds %class.powerDef, ptr %386, i32 0, i32 0
  %388 = getelementptr inbounds %class.powerComponents, ptr %387, i32 0, i32 1
  store double 0.000000e+00, ptr %388, align 8, !tbaa !44
  %389 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %390 = getelementptr inbounds %class.powerDef, ptr %389, i32 0, i32 2
  %391 = getelementptr inbounds %class.powerComponents, ptr %390, i32 0, i32 0
  store double 0.000000e+00, ptr %391, align 8, !tbaa !45
  %392 = load double, ptr %15, align 8, !tbaa !9
  store double %392, ptr %10, align 8, !tbaa !9
  %393 = load double, ptr %16, align 8, !tbaa !9
  %394 = fdiv double %393, 2.000000e+00
  store double %394, ptr %11, align 8, !tbaa !9
  br label %395

395:                                              ; preds = %798, %661, %373
  %396 = load i32, ptr %14, align 4, !tbaa !11
  %397 = icmp sgt i32 %396, 0
  br i1 %397, label %401, label %398

398:                                              ; preds = %395
  %399 = load i32, ptr %13, align 4, !tbaa !11
  %400 = icmp sgt i32 %399, 0
  br label %401

401:                                              ; preds = %398, %395
  %402 = phi i1 [ true, %395 ], [ %400, %398 ]
  br i1 %402, label %403, label %799

403:                                              ; preds = %401
  %404 = load ptr, ptr %7, align 8, !tbaa !5
  %405 = icmp ne ptr %404, null
  br i1 %405, label %406, label %411

406:                                              ; preds = %403
  %407 = load ptr, ptr %7, align 8, !tbaa !5
  %408 = icmp eq ptr %407, null
  br i1 %408, label %410, label %409

409:                                              ; preds = %406
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %407) #9
  call void @_ZdlPvm(ptr noundef %407, i64 noundef 1264) #10
  br label %410

410:                                              ; preds = %409, %406
  br label %411

411:                                              ; preds = %410, %403
  %412 = load ptr, ptr %8, align 8, !tbaa !5
  %413 = icmp ne ptr %412, null
  br i1 %413, label %414, label %419

414:                                              ; preds = %411
  %415 = load ptr, ptr %8, align 8, !tbaa !5
  %416 = icmp eq ptr %415, null
  br i1 %416, label %418, label %417

417:                                              ; preds = %414
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %415) #9
  call void @_ZdlPvm(ptr noundef %415, i64 noundef 1264) #10
  br label %418

418:                                              ; preds = %417, %414
  br label %419

419:                                              ; preds = %418, %411
  %420 = load ptr, ptr %9, align 8, !tbaa !5
  %421 = icmp ne ptr %420, null
  br i1 %421, label %422, label %427

422:                                              ; preds = %419
  %423 = load ptr, ptr %9, align 8, !tbaa !5
  %424 = icmp eq ptr %423, null
  br i1 %424, label %426, label %425

425:                                              ; preds = %422
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %423) #9
  call void @_ZdlPvm(ptr noundef %423, i64 noundef 1264) #10
  br label %426

426:                                              ; preds = %425, %422
  br label %427

427:                                              ; preds = %426, %419
  %428 = load i32, ptr %13, align 4, !tbaa !11
  %429 = load i32, ptr %14, align 4, !tbaa !11
  %430 = icmp sgt i32 %428, %429
  br i1 %430, label %431, label %456

431:                                              ; preds = %427
  %432 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #11
  %433 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %434 = load i32, ptr %433, align 8, !tbaa !46
  %435 = load double, ptr %10, align 8, !tbaa !9
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %432, i32 noundef %434, double noundef %435, 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))
          to label %436 unwind label %448

436:                                              ; preds = %431
  store ptr %432, ptr %7, align 8, !tbaa !5
  %437 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #11
  %438 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %439 = load i32, ptr %438, align 8, !tbaa !46
  %440 = load double, ptr %10, align 8, !tbaa !9
  %441 = fdiv double %440, 2.000000e+00
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %437, i32 noundef %439, double noundef %441, 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))
          to label %442 unwind label %452

442:                                              ; preds = %436
  store ptr %437, ptr %8, align 8, !tbaa !5
  %443 = load double, ptr %10, align 8, !tbaa !9
  store double %443, ptr %15, align 8, !tbaa !9
  %444 = load double, ptr %10, align 8, !tbaa !9
  %445 = fdiv double %444, 2.000000e+00
  store double %445, ptr %10, align 8, !tbaa !9
  store ptr null, ptr %9, align 8, !tbaa !5
  %446 = load i32, ptr %13, align 4, !tbaa !11
  %447 = add nsw i32 %446, -1
  store i32 %447, ptr %13, align 4, !tbaa !11
  store i32 0, ptr %12, align 4, !tbaa !11
  br label %533

448:                                              ; preds = %431
  %449 = landingpad { ptr, i32 }
          cleanup
  %450 = extractvalue { ptr, i32 } %449, 0
  store ptr %450, ptr %19, align 8
  %451 = extractvalue { ptr, i32 } %449, 1
  store i32 %451, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %432, i64 noundef 1264) #10
  br label %824

452:                                              ; preds = %436
  %453 = landingpad { ptr, i32 }
          cleanup
  %454 = extractvalue { ptr, i32 } %453, 0
  store ptr %454, ptr %19, align 8
  %455 = extractvalue { ptr, i32 } %453, 1
  store i32 %455, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %437, i64 noundef 1264) #10
  br label %824

456:                                              ; preds = %427
  %457 = load i32, ptr %14, align 4, !tbaa !11
  %458 = icmp sgt i32 %457, 0
  br i1 %458, label %459, label %501

459:                                              ; preds = %456
  %460 = load i32, ptr %13, align 4, !tbaa !11
  %461 = icmp sgt i32 %460, 0
  br i1 %461, label %462, label %501

462:                                              ; preds = %459
  %463 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #11
  %464 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %465 = load i32, ptr %464, align 8, !tbaa !46
  %466 = load double, ptr %10, align 8, !tbaa !9
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %463, i32 noundef %465, double noundef %466, 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))
          to label %467 unwind label %489

467:                                              ; preds = %462
  store ptr %463, ptr %7, align 8, !tbaa !5
  %468 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #11
  %469 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %470 = load i32, ptr %469, align 8, !tbaa !46
  %471 = load double, ptr %11, align 8, !tbaa !9
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %468, i32 noundef %470, double noundef %471, 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))
          to label %472 unwind label %493

472:                                              ; preds = %467
  store ptr %468, ptr %8, align 8, !tbaa !5
  %473 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #11
  %474 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %475 = load i32, ptr %474, align 8, !tbaa !46
  %476 = load double, ptr %10, align 8, !tbaa !9
  %477 = fdiv double %476, 2.000000e+00
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %473, i32 noundef %475, double noundef %477, 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))
          to label %478 unwind label %497

478:                                              ; preds = %472
  store ptr %473, ptr %9, align 8, !tbaa !5
  %479 = load double, ptr %10, align 8, !tbaa !9
  store double %479, ptr %15, align 8, !tbaa !9
  %480 = load double, ptr %11, align 8, !tbaa !9
  store double %480, ptr %16, align 8, !tbaa !9
  %481 = load double, ptr %10, align 8, !tbaa !9
  %482 = fdiv double %481, 2.000000e+00
  store double %482, ptr %10, align 8, !tbaa !9
  %483 = load double, ptr %11, align 8, !tbaa !9
  %484 = fdiv double %483, 2.000000e+00
  store double %484, ptr %11, align 8, !tbaa !9
  %485 = load i32, ptr %14, align 4, !tbaa !11
  %486 = add nsw i32 %485, -1
  store i32 %486, ptr %14, align 4, !tbaa !11
  %487 = load i32, ptr %13, align 4, !tbaa !11
  %488 = add nsw i32 %487, -1
  store i32 %488, ptr %13, align 4, !tbaa !11
  store i32 1, ptr %12, align 4, !tbaa !11
  br label %532

489:                                              ; preds = %462
  %490 = landingpad { ptr, i32 }
          cleanup
  %491 = extractvalue { ptr, i32 } %490, 0
  store ptr %491, ptr %19, align 8
  %492 = extractvalue { ptr, i32 } %490, 1
  store i32 %492, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %463, i64 noundef 1264) #10
  br label %824

493:                                              ; preds = %467
  %494 = landingpad { ptr, i32 }
          cleanup
  %495 = extractvalue { ptr, i32 } %494, 0
  store ptr %495, ptr %19, align 8
  %496 = extractvalue { ptr, i32 } %494, 1
  store i32 %496, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %468, i64 noundef 1264) #10
  br label %824

497:                                              ; preds = %472
  %498 = landingpad { ptr, i32 }
          cleanup
  %499 = extractvalue { ptr, i32 } %498, 0
  store ptr %499, ptr %19, align 8
  %500 = extractvalue { ptr, i32 } %498, 1
  store i32 %500, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %473, i64 noundef 1264) #10
  br label %824

501:                                              ; preds = %459, %456
  %502 = load i32, ptr %13, align 4, !tbaa !11
  %503 = icmp eq i32 %502, 0
  br i1 %503, label %504, label %505

504:                                              ; preds = %501
  br label %507

505:                                              ; preds = %501
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 407, ptr noundef @__PRETTY_FUNCTION__._ZN6Htree28in_htreeEv) #12
  unreachable

506:                                              ; No predecessors!
  br label %507

507:                                              ; preds = %506, %504
  %508 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #11
  %509 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %510 = load i32, ptr %509, align 8, !tbaa !46
  %511 = load double, ptr %11, align 8, !tbaa !9
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %508, i32 noundef %510, double noundef %511, 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))
          to label %512 unwind label %524

512:                                              ; preds = %507
  store ptr %508, ptr %7, align 8, !tbaa !5
  %513 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #11
  %514 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 21
  %515 = load i32, ptr %514, align 8, !tbaa !46
  %516 = load double, ptr %11, align 8, !tbaa !9
  %517 = fdiv double %516, 2.000000e+00
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %513, i32 noundef %515, double noundef %517, 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))
          to label %518 unwind label %528

518:                                              ; preds = %512
  store ptr %513, ptr %8, align 8, !tbaa !5
  %519 = load double, ptr %11, align 8, !tbaa !9
  store double %519, ptr %16, align 8, !tbaa !9
  %520 = load double, ptr %11, align 8, !tbaa !9
  %521 = fdiv double %520, 2.000000e+00
  store double %521, ptr %11, align 8, !tbaa !9
  store ptr null, ptr %9, align 8, !tbaa !5
  %522 = load i32, ptr %14, align 4, !tbaa !11
  %523 = add nsw i32 %522, -1
  store i32 %523, ptr %14, align 4, !tbaa !11
  store i32 2, ptr %12, align 4, !tbaa !11
  br label %532

524:                                              ; preds = %507
  %525 = landingpad { ptr, i32 }
          cleanup
  %526 = extractvalue { ptr, i32 } %525, 0
  store ptr %526, ptr %19, align 8
  %527 = extractvalue { ptr, i32 } %525, 1
  store i32 %527, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %508, i64 noundef 1264) #10
  br label %824

528:                                              ; preds = %512
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %19, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %513, i64 noundef 1264) #10
  br label %824

532:                                              ; preds = %518, %478
  br label %533

533:                                              ; preds = %532, %442
  %534 = load ptr, ptr %7, align 8, !tbaa !5
  %535 = getelementptr inbounds %class.Component, ptr %534, i32 0, i32 3
  %536 = load double, ptr %535, align 8, !tbaa !42
  %537 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 3
  %538 = load double, ptr %537, align 8, !tbaa !42
  %539 = fadd double %538, %536
  store double %539, ptr %537, align 8, !tbaa !42
  %540 = load ptr, ptr %7, align 8, !tbaa !5
  %541 = getelementptr inbounds %class.Component, ptr %540, i32 0, i32 1
  %542 = getelementptr inbounds %class.powerDef, ptr %541, i32 0, i32 0
  %543 = getelementptr inbounds %class.powerComponents, ptr %542, i32 0, i32 0
  %544 = load double, ptr %543, align 8, !tbaa !43
  %545 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %546 = getelementptr inbounds %class.powerDef, ptr %545, i32 0, i32 0
  %547 = getelementptr inbounds %class.powerComponents, ptr %546, i32 0, i32 0
  %548 = load double, ptr %547, align 8, !tbaa !43
  %549 = fadd double %548, %544
  store double %549, ptr %547, align 8, !tbaa !43
  %550 = load ptr, ptr %7, align 8, !tbaa !5
  %551 = getelementptr inbounds %class.Component, ptr %550, i32 0, i32 1
  %552 = getelementptr inbounds %class.powerDef, ptr %551, i32 0, i32 0
  %553 = getelementptr inbounds %class.powerComponents, ptr %552, i32 0, i32 0
  %554 = load double, ptr %553, align 8, !tbaa !43
  %555 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %556 = load double, ptr %555, align 8, !tbaa !47
  %557 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %558 = getelementptr inbounds %class.powerDef, ptr %557, i32 0, i32 2
  %559 = getelementptr inbounds %class.powerComponents, ptr %558, i32 0, i32 0
  %560 = load double, ptr %559, align 8, !tbaa !45
  %561 = call double @llvm.fmuladd.f64(double %554, double %556, double %560)
  store double %561, ptr %559, align 8, !tbaa !45
  %562 = load ptr, ptr %7, align 8, !tbaa !5
  %563 = getelementptr inbounds %class.Component, ptr %562, i32 0, i32 1
  %564 = getelementptr inbounds %class.powerDef, ptr %563, i32 0, i32 0
  %565 = getelementptr inbounds %class.powerComponents, ptr %564, i32 0, i32 1
  %566 = load double, ptr %565, align 8, !tbaa !44
  %567 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %568 = load double, ptr %567, align 8, !tbaa !47
  %569 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %570 = getelementptr inbounds %class.powerDef, ptr %569, i32 0, i32 0
  %571 = getelementptr inbounds %class.powerComponents, ptr %570, i32 0, i32 1
  %572 = load double, ptr %571, align 8, !tbaa !44
  %573 = call double @llvm.fmuladd.f64(double %566, double %568, double %572)
  store double %573, ptr %571, align 8, !tbaa !44
  %574 = load ptr, ptr %7, align 8, !tbaa !5
  %575 = getelementptr inbounds %class.Component, ptr %574, i32 0, i32 1
  %576 = getelementptr inbounds %class.powerDef, ptr %575, i32 0, i32 0
  %577 = getelementptr inbounds %class.powerComponents, ptr %576, i32 0, i32 2
  %578 = load double, ptr %577, align 8, !tbaa !48
  %579 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %580 = load double, ptr %579, align 8, !tbaa !47
  %581 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %582 = getelementptr inbounds %class.powerDef, ptr %581, i32 0, i32 0
  %583 = getelementptr inbounds %class.powerComponents, ptr %582, i32 0, i32 2
  %584 = load double, ptr %583, align 8, !tbaa !48
  %585 = call double @llvm.fmuladd.f64(double %578, double %580, double %584)
  store double %585, ptr %583, align 8, !tbaa !48
  %586 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 19
  %587 = load i8, ptr %586, align 4, !tbaa !23, !range !24, !noundef !25
  %588 = trunc i8 %587 to i1
  %589 = zext i1 %588 to i32
  %590 = icmp eq i32 %589, 0
  br i1 %590, label %591, label %594

591:                                              ; preds = %533
  %592 = load i32, ptr %12, align 4, !tbaa !11
  %593 = icmp eq i32 %592, 2
  br i1 %593, label %600, label %594

594:                                              ; preds = %591, %533
  %595 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 20
  %596 = load i8, ptr %595, align 1, !tbaa !49, !range !24, !noundef !25
  %597 = trunc i8 %596 to i1
  %598 = zext i1 %597 to i32
  %599 = icmp eq i32 %598, 1
  br i1 %599, label %600, label %604

600:                                              ; preds = %594, %591
  %601 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %602 = load double, ptr %601, align 8, !tbaa !47
  %603 = fmul double %602, 2.000000e+00
  store double %603, ptr %601, align 8, !tbaa !47
  br label %604

604:                                              ; preds = %600, %594
  %605 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 19
  %606 = load i8, ptr %605, align 4, !tbaa !23, !range !24, !noundef !25
  %607 = trunc i8 %606 to i1
  %608 = zext i1 %607 to i32
  %609 = icmp eq i32 %608, 0
  br i1 %609, label %610, label %658

610:                                              ; preds = %604
  %611 = load double, ptr %15, align 8, !tbaa !9
  %612 = load ptr, ptr %7, align 8, !tbaa !5
  %613 = getelementptr inbounds %class.Wire, ptr %612, i32 0, i32 6
  %614 = load double, ptr %613, align 8, !tbaa !50
  %615 = fcmp ogt double %611, %614
  br i1 %615, label %616, label %623

616:                                              ; preds = %610
  %617 = load ptr, ptr %7, align 8, !tbaa !5
  %618 = getelementptr inbounds %class.Wire, ptr %617, i32 0, i32 5
  %619 = load double, ptr %618, align 8, !tbaa !58
  store double %619, ptr %3, align 8, !tbaa !9
  %620 = load ptr, ptr %7, align 8, !tbaa !5
  %621 = getelementptr inbounds %class.Wire, ptr %620, i32 0, i32 6
  %622 = load double, ptr %621, align 8, !tbaa !50
  store double %622, ptr %6, align 8, !tbaa !9
  br label %634

623:                                              ; preds = %610
  %624 = load double, ptr %15, align 8, !tbaa !9
  %625 = load ptr, ptr %7, align 8, !tbaa !5
  %626 = getelementptr inbounds %class.Wire, ptr %625, i32 0, i32 6
  %627 = load double, ptr %626, align 8, !tbaa !50
  %628 = fdiv double %624, %627
  %629 = load ptr, ptr %7, align 8, !tbaa !5
  %630 = getelementptr inbounds %class.Wire, ptr %629, i32 0, i32 5
  %631 = load double, ptr %630, align 8, !tbaa !58
  %632 = fmul double %628, %631
  store double %632, ptr %3, align 8, !tbaa !9
  %633 = load double, ptr %15, align 8, !tbaa !9
  store double %633, ptr %6, align 8, !tbaa !9
  br label %634

634:                                              ; preds = %623, %616
  %635 = load double, ptr %16, align 8, !tbaa !9
  %636 = load ptr, ptr %8, align 8, !tbaa !5
  %637 = getelementptr inbounds %class.Wire, ptr %636, i32 0, i32 6
  %638 = load double, ptr %637, align 8, !tbaa !50
  %639 = fcmp ogt double %635, %638
  br i1 %639, label %640, label %644

640:                                              ; preds = %634
  %641 = load ptr, ptr %8, align 8, !tbaa !5
  %642 = getelementptr inbounds %class.Wire, ptr %641, i32 0, i32 5
  %643 = load double, ptr %642, align 8, !tbaa !58
  store double %643, ptr %4, align 8, !tbaa !9
  br label %654

644:                                              ; preds = %634
  %645 = load double, ptr %15, align 8, !tbaa !9
  %646 = load ptr, ptr %8, align 8, !tbaa !5
  %647 = getelementptr inbounds %class.Wire, ptr %646, i32 0, i32 6
  %648 = load double, ptr %647, align 8, !tbaa !50
  %649 = fdiv double %645, %648
  %650 = load ptr, ptr %8, align 8, !tbaa !5
  %651 = getelementptr inbounds %class.Wire, ptr %650, i32 0, i32 5
  %652 = load double, ptr %651, align 8, !tbaa !58
  %653 = fmul double %649, %652
  store double %653, ptr %4, align 8, !tbaa !9
  br label %654

654:                                              ; preds = %644, %640
  %655 = load double, ptr %3, align 8, !tbaa !9
  %656 = load double, ptr %4, align 8, !tbaa !9
  %657 = load double, ptr %6, align 8, !tbaa !9
  call void @_ZN6Htree210input_nandEddd(ptr noundef nonnull align 8 dereferenceable(544) %21, double noundef %655, double noundef %656, double noundef %657)
  br label %658

658:                                              ; preds = %654, %604
  %659 = load i32, ptr %12, align 4, !tbaa !11
  %660 = icmp ne i32 %659, 1
  br i1 %660, label %661, label %662

661:                                              ; preds = %658
  br label %395, !llvm.loop !59

662:                                              ; preds = %658
  %663 = load ptr, ptr %8, align 8, !tbaa !5
  %664 = getelementptr inbounds %class.Component, ptr %663, i32 0, i32 3
  %665 = load double, ptr %664, align 8, !tbaa !42
  %666 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 3
  %667 = load double, ptr %666, align 8, !tbaa !42
  %668 = fadd double %667, %665
  store double %668, ptr %666, align 8, !tbaa !42
  %669 = load ptr, ptr %8, align 8, !tbaa !5
  %670 = getelementptr inbounds %class.Component, ptr %669, i32 0, i32 1
  %671 = getelementptr inbounds %class.powerDef, ptr %670, i32 0, i32 0
  %672 = getelementptr inbounds %class.powerComponents, ptr %671, i32 0, i32 0
  %673 = load double, ptr %672, align 8, !tbaa !43
  %674 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %675 = getelementptr inbounds %class.powerDef, ptr %674, i32 0, i32 0
  %676 = getelementptr inbounds %class.powerComponents, ptr %675, i32 0, i32 0
  %677 = load double, ptr %676, align 8, !tbaa !43
  %678 = fadd double %677, %673
  store double %678, ptr %676, align 8, !tbaa !43
  %679 = load ptr, ptr %8, align 8, !tbaa !5
  %680 = getelementptr inbounds %class.Component, ptr %679, i32 0, i32 1
  %681 = getelementptr inbounds %class.powerDef, ptr %680, i32 0, i32 0
  %682 = getelementptr inbounds %class.powerComponents, ptr %681, i32 0, i32 0
  %683 = load double, ptr %682, align 8, !tbaa !43
  %684 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %685 = load double, ptr %684, align 8, !tbaa !47
  %686 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %687 = getelementptr inbounds %class.powerDef, ptr %686, i32 0, i32 2
  %688 = getelementptr inbounds %class.powerComponents, ptr %687, i32 0, i32 0
  %689 = load double, ptr %688, align 8, !tbaa !45
  %690 = call double @llvm.fmuladd.f64(double %683, double %685, double %689)
  store double %690, ptr %688, align 8, !tbaa !45
  %691 = load ptr, ptr %8, align 8, !tbaa !5
  %692 = getelementptr inbounds %class.Component, ptr %691, i32 0, i32 1
  %693 = getelementptr inbounds %class.powerDef, ptr %692, i32 0, i32 0
  %694 = getelementptr inbounds %class.powerComponents, ptr %693, i32 0, i32 1
  %695 = load double, ptr %694, align 8, !tbaa !44
  %696 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %697 = load double, ptr %696, align 8, !tbaa !47
  %698 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %699 = getelementptr inbounds %class.powerDef, ptr %698, i32 0, i32 0
  %700 = getelementptr inbounds %class.powerComponents, ptr %699, i32 0, i32 1
  %701 = load double, ptr %700, align 8, !tbaa !44
  %702 = call double @llvm.fmuladd.f64(double %695, double %697, double %701)
  store double %702, ptr %700, align 8, !tbaa !44
  %703 = load ptr, ptr %8, align 8, !tbaa !5
  %704 = getelementptr inbounds %class.Component, ptr %703, 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 2
  %707 = load double, ptr %706, align 8, !tbaa !48
  %708 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %709 = load double, ptr %708, align 8, !tbaa !47
  %710 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %711 = getelementptr inbounds %class.powerDef, ptr %710, i32 0, i32 0
  %712 = getelementptr inbounds %class.powerComponents, ptr %711, i32 0, i32 2
  %713 = load double, ptr %712, align 8, !tbaa !48
  %714 = call double @llvm.fmuladd.f64(double %707, double %709, double %713)
  store double %714, ptr %712, align 8, !tbaa !48
  %715 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 19
  %716 = load i8, ptr %715, align 4, !tbaa !23, !range !24, !noundef !25
  %717 = trunc i8 %716 to i1
  br i1 %717, label %718, label %743

718:                                              ; preds = %662
  %719 = load ptr, ptr %8, align 8, !tbaa !5
  %720 = getelementptr inbounds %class.Component, ptr %719, i32 0, i32 1
  %721 = getelementptr inbounds %class.powerDef, ptr %720, i32 0, i32 0
  %722 = getelementptr inbounds %class.powerComponents, ptr %721, i32 0, i32 1
  %723 = load double, ptr %722, align 8, !tbaa !44
  %724 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %725 = load double, ptr %724, align 8, !tbaa !47
  %726 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %727 = getelementptr inbounds %class.powerDef, ptr %726, i32 0, i32 0
  %728 = getelementptr inbounds %class.powerComponents, ptr %727, i32 0, i32 1
  %729 = load double, ptr %728, align 8, !tbaa !44
  %730 = call double @llvm.fmuladd.f64(double %723, double %725, double %729)
  store double %730, ptr %728, align 8, !tbaa !44
  %731 = load ptr, ptr %8, align 8, !tbaa !5
  %732 = getelementptr inbounds %class.Component, ptr %731, i32 0, i32 1
  %733 = getelementptr inbounds %class.powerDef, ptr %732, i32 0, i32 0
  %734 = getelementptr inbounds %class.powerComponents, ptr %733, i32 0, i32 2
  %735 = load double, ptr %734, align 8, !tbaa !48
  %736 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %737 = load double, ptr %736, align 8, !tbaa !47
  %738 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %739 = getelementptr inbounds %class.powerDef, ptr %738, i32 0, i32 0
  %740 = getelementptr inbounds %class.powerComponents, ptr %739, i32 0, i32 2
  %741 = load double, ptr %740, align 8, !tbaa !48
  %742 = call double @llvm.fmuladd.f64(double %735, double %737, double %741)
  store double %742, ptr %740, align 8, !tbaa !48
  br label %798

743:                                              ; preds = %662
  %744 = load ptr, ptr %8, align 8, !tbaa !5
  %745 = getelementptr inbounds %class.Component, ptr %744, i32 0, i32 1
  %746 = getelementptr inbounds %class.powerDef, ptr %745, i32 0, i32 0
  %747 = getelementptr inbounds %class.powerComponents, ptr %746, i32 0, i32 1
  %748 = load double, ptr %747, align 8, !tbaa !44
  %749 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %750 = load double, ptr %749, align 8, !tbaa !47
  %751 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %752 = getelementptr inbounds %class.powerDef, ptr %751, i32 0, i32 0
  %753 = getelementptr inbounds %class.powerComponents, ptr %752, i32 0, i32 1
  %754 = load double, ptr %753, align 8, !tbaa !44
  %755 = call double @llvm.fmuladd.f64(double %748, double %750, double %754)
  store double %755, ptr %753, align 8, !tbaa !44
  %756 = load ptr, ptr %8, align 8, !tbaa !5
  %757 = getelementptr inbounds %class.Component, ptr %756, i32 0, i32 1
  %758 = getelementptr inbounds %class.powerDef, ptr %757, i32 0, i32 0
  %759 = getelementptr inbounds %class.powerComponents, ptr %758, i32 0, i32 2
  %760 = load double, ptr %759, align 8, !tbaa !48
  %761 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %762 = load double, ptr %761, align 8, !tbaa !47
  %763 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 1
  %764 = getelementptr inbounds %class.powerDef, ptr %763, i32 0, i32 0
  %765 = getelementptr inbounds %class.powerComponents, ptr %764, i32 0, i32 2
  %766 = load double, ptr %765, align 8, !tbaa !48
  %767 = call double @llvm.fmuladd.f64(double %760, double %762, double %766)
  store double %767, ptr %765, align 8, !tbaa !48
  %768 = getelementptr inbounds %class.Htree2, ptr %21, i32 0, i32 5
  %769 = load double, ptr %768, align 8, !tbaa !47
  %770 = fmul double %769, 2.000000e+00
  store double %770, ptr %768, align 8, !tbaa !47
  %771 = load double, ptr %16, align 8, !tbaa !9
  %772 = load ptr, ptr %9, align 8, !tbaa !5
  %773 = getelementptr inbounds %class.Wire, ptr %772, i32 0, i32 6
  %774 = load double, ptr %773, align 8, !tbaa !50
  %775 = fcmp ogt double %771, %774
  br i1 %775, label %776, label %783

776:                                              ; preds = %743
  %777 = load ptr, ptr %9, align 8, !tbaa !5
  %778 = getelementptr inbounds %class.Wire, ptr %777, i32 0, i32 5
  %779 = load double, ptr %778, align 8, !tbaa !58
  store double %779, ptr %5, align 8, !tbaa !9
  %780 = load ptr, ptr %9, align 8, !tbaa !5
  %781 = getelementptr inbounds %class.Wire, ptr %780, i32 0, i32 6
  %782 = load double, ptr %781, align 8, !tbaa !50
  store double %782, ptr %6, align 8, !tbaa !9
  br label %794

783:                                              ; preds = %743
  %784 = load double, ptr %15, align 8, !tbaa !9
  %785 = load ptr, ptr %9, align 8, !tbaa !5
  %786 = getelementptr inbounds %class.Wire, ptr %785, i32 0, i32 6
  %787 = load double, ptr %786, align 8, !tbaa !50
  %788 = fdiv double %784, %787
  %789 = load ptr, ptr %9, align 8, !tbaa !5
  %790 = getelementptr inbounds %class.Wire, ptr %789, i32 0, i32 5
  %791 = load double, ptr %790, align 8, !tbaa !58
  %792 = fmul double %788, %791
  store double %792, ptr %5, align 8, !tbaa !9
  %793 = load double, ptr %16, align 8, !tbaa !9
  store double %793, ptr %6, align 8, !tbaa !9
  br label %794

794:                                              ; preds = %783, %776
  %795 = load double, ptr %4, align 8, !tbaa !9
  %796 = load double, ptr %5, align 8, !tbaa !9
  %797 = load double, ptr %6, align 8, !tbaa !9
  call void @_ZN6Htree210input_nandEddd(ptr noundef nonnull align 8 dereferenceable(544) %21, double noundef %795, double noundef %796, double noundef %797)
  br label %798

798:                                              ; preds = %794, %718
  br label %395, !llvm.loop !59

799:                                              ; preds = %401
  %800 = load ptr, ptr %7, align 8, !tbaa !5
  %801 = icmp ne ptr %800, null
  br i1 %801, label %802, label %807

802:                                              ; preds = %799
  %803 = load ptr, ptr %7, align 8, !tbaa !5
  %804 = icmp eq ptr %803, null
  br i1 %804, label %806, label %805

805:                                              ; preds = %802
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %803) #9
  call void @_ZdlPvm(ptr noundef %803, i64 noundef 1264) #10
  br label %806

806:                                              ; preds = %805, %802
  br label %807

807:                                              ; preds = %806, %799
  %808 = load ptr, ptr %8, align 8, !tbaa !5
  %809 = icmp ne ptr %808, null
  br i1 %809, label %810, label %815

810:                                              ; preds = %807
  %811 = load ptr, ptr %8, align 8, !tbaa !5
  %812 = icmp eq ptr %811, null
  br i1 %812, label %814, label %813

813:                                              ; preds = %810
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %811) #9
  call void @_ZdlPvm(ptr noundef %811, i64 noundef 1264) #10
  br label %814

814:                                              ; preds = %813, %810
  br label %815

815:                                              ; preds = %814, %807
  %816 = load ptr, ptr %9, align 8, !tbaa !5
  %817 = icmp ne ptr %816, null
  br i1 %817, label %818, label %823

818:                                              ; preds = %815
  %819 = load ptr, ptr %9, align 8, !tbaa !5
  %820 = icmp eq ptr %819, null
  br i1 %820, label %822, label %821

821:                                              ; preds = %818
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %819) #9
  call void @_ZdlPvm(ptr noundef %819, i64 noundef 1264) #10
  br label %822

822:                                              ; preds = %821, %818
  br label %823

823:                                              ; preds = %822, %815
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  ret void

824:                                              ; preds = %528, %524, %497, %493, %489, %452, %448
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  br label %825

825:                                              ; preds = %824
  %826 = load ptr, ptr %19, align 8
  %827 = load i32, ptr %20, align 4
  %828 = insertvalue { ptr, i32 } poison, ptr %826, 0
  %829 = insertvalue { ptr, i32 } %828, i32 %827, 1
  resume { ptr, i32 } %829
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Htree210input_nandEddd(ptr noundef nonnull align 8 dereferenceable(544), double noundef, double noundef, double noundef) #1 align 2

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

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

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

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

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

declare noundef i32 @_Z5_log2m(i64 noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef, i32 noundef) #6

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #7

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #8

attributes #0 = { noreturn 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 #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nobuiltin 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 #8 = { nobuiltin allocsize(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 #9 = { nounwind }
attributes #10 = { builtin nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { noreturn 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, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 504}
!14 = !{!"_ZTS6Htree2", !15, i64 0, !10, i64 280, !10, i64 288, !10, i64 296, !17, i64 304, !10, i64 424, !10, i64 432, !19, i64 440, !10, i64 448, !10, i64 456, !10, i64 464, !10, i64 472, !12, i64 480, !12, i64 484, !12, i64 488, !12, i64 492, !12, i64 496, !12, i64 500, !12, i64 504, !20, i64 508, !20, i64 509, !21, i64 512, !10, i64 520, !10, i64 528, !6, i64 536}
!15 = !{!"_ZTS9Component", !16, i64 0, !17, i64 24, !17, i64 144, !10, i64 264, !10, i64 272}
!16 = !{!"_ZTS4Area", !10, i64 0, !10, i64 8, !10, i64 16}
!17 = !{!"_ZTS8powerDef", !18, i64 0, !18, i64 40, !18, i64 80}
!18 = !{!"_ZTS15powerComponents", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!19 = !{!"_ZTS10Htree_type", !7, i64 0}
!20 = !{!"bool", !7, i64 0}
!21 = !{!"_ZTS9Wire_type", !7, i64 0}
!22 = !{!14, !12, i64 500}
!23 = !{!14, !20, i64 508}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{!14, !10, i64 472}
!27 = !{!14, !12, i64 480}
!28 = !{!14, !12, i64 484}
!29 = !{!14, !12, i64 492}
!30 = !{!14, !12, i64 488}
!31 = !{!14, !12, i64 496}
!32 = !{!33, !10, i64 1328}
!33 = !{!"_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, !34, i64 352, !35, i64 360, !35, i64 528, !35, i64 696, !35, i64 864, !35, i64 1032, !36, i64 1200, !36, i64 1264, !36, i64 1328, !37, i64 1392, !38, i64 1416, !38, i64 1464, !38, i64 1512}
!34 = !{!"long", !7, i64 0}
!35 = !{!"_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}
!36 = !{!"_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}
!37 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !10, i64 0, !10, i64 8, !10, i64 16}
!38 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!39 = !{!14, !10, i64 464}
!40 = !{!15, !10, i64 8}
!41 = !{!15, !10, i64 0}
!42 = !{!15, !10, i64 264}
!43 = !{!15, !10, i64 24}
!44 = !{!15, !10, i64 32}
!45 = !{!15, !10, i64 104}
!46 = !{!14, !21, i64 512}
!47 = !{!14, !10, i64 424}
!48 = !{!15, !10, i64 40}
!49 = !{!14, !20, i64 509}
!50 = !{!51, !10, i64 320}
!51 = !{!"_ZTS4Wire", !15, i64 0, !21, i64 280, !10, i64 288, !10, i64 296, !52, i64 304, !10, i64 312, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !12, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !53, i64 384, !15, i64 408, !15, i64 688, !15, i64 968, !10, i64 1248, !6, i64 1256}
!52 = !{!"_ZTS14Wire_placement", !7, i64 0}
!53 = !{!"_ZTSNSt7__cxx114listI9ComponentSaIS1_EEE", !54, i64 0}
!54 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EEE", !55, i64 0}
!55 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EE10_List_implE", !56, i64 0}
!56 = !{!"_ZTSNSt8__detail17_List_node_headerE", !57, i64 0, !34, i64 16}
!57 = !{!"_ZTSNSt8__detail15_List_node_baseE", !6, i64 0, !6, i64 8}
!58 = !{!51, !10, i64 312}
!59 = distinct !{!59, !60}
!60 = !{!"llvm.loop.mustprogress"}


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

@.str.1 = external hidden unnamed_addr constant [69 x i8], align 1
@g_tp = external global %class.TechnologyParameter, align 8
@.str.5 = external hidden unnamed_addr constant [7 x i8], align 1
@__PRETTY_FUNCTION__._ZN6Htree28in_htreeEv = external hidden unnamed_addr constant [24 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6Htree28in_htreeEv(ptr noundef nonnull align 8 dereferenceable(544) %0) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 504
  %3 = load i32, ptr %2, align 8, !tbaa !5
  %4 = sdiv i32 %3, 2
  %5 = sext i32 %4 to i64
  %6 = tail call noundef i32 @_Z5_log2m(i64 noundef %5)
  %7 = getelementptr inbounds i8, ptr %0, i64 500
  %8 = load i32, ptr %7, align 4, !tbaa !19
  %9 = sdiv i32 %8, 2
  %10 = sext i32 %9 to i64
  %11 = tail call noundef i32 @_Z5_log2m(i64 noundef %10)
  %12 = getelementptr inbounds i8, ptr %0, i64 508
  %13 = load i8, ptr %12, align 4, !tbaa !20, !range !21, !noundef !22
  %14 = trunc nuw i8 %13 to i1
  br i1 %14, label %15, label %69

15:                                               ; preds = %1
  %16 = getelementptr inbounds i8, ptr %0, i64 472
  %17 = getelementptr inbounds i8, ptr %0, i64 480
  %18 = load i32, ptr %17, align 8, !tbaa !23
  %19 = getelementptr inbounds i8, ptr %0, i64 484
  %20 = load i32, ptr %19, align 4, !tbaa !24
  %21 = getelementptr inbounds i8, ptr %0, i64 492
  %22 = load i32, ptr %21, align 4, !tbaa !25
  %23 = getelementptr inbounds i8, ptr %0, i64 488
  %24 = load i32, ptr %23, align 8, !tbaa !26
  %25 = getelementptr inbounds i8, ptr %0, i64 496
  %26 = load i32, ptr %25, align 8, !tbaa !27
  %27 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1328), align 8, !tbaa !28
  %28 = getelementptr inbounds i8, ptr %0, i64 464
  %29 = load double, ptr %16, align 8, !tbaa !35
  %30 = load i32, ptr %7, align 4, !tbaa !19
  %31 = tail call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %6)
  %32 = load <2 x double>, ptr %28, align 8
  %33 = load <4 x i32>, ptr %2, align 8
  %34 = shufflevector <4 x i32> %33, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %35 = insertelement <2 x i32> %34, i32 %30, i64 1
  %36 = sitofp <2 x i32> %35 to <2 x double>
  %37 = insertelement <2 x double> %32, double %29, i64 1
  %38 = fmul <2 x double> %37, %36
  %39 = fmul <2 x double> %38, <double 5.000000e-01, double 5.000000e-01>
  %40 = load <4 x i32>, ptr %17, align 8
  %41 = shufflevector <4 x i32> %40, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %42 = load <4 x i32>, ptr %19, align 4
  %43 = shufflevector <4 x i32> %42, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %44 = load <4 x i32>, ptr %21, align 4
  %45 = shufflevector <4 x i32> %44, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %46 = load <4 x i32>, ptr %23, align 8
  %47 = shufflevector <4 x i32> %46, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %48 = load <4 x i32>, ptr %25, align 8
  %49 = shufflevector <4 x i32> %48, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %50 = insertelement <2 x i32> %41, i32 %20, i64 1
  %51 = insertelement <2 x i32> %43, i32 %18, i64 1
  %52 = add <2 x i32> %50, %51
  %53 = insertelement <2 x i32> %45, i32 %22, i64 1
  %54 = add <2 x i32> %52, %53
  %55 = insertelement <2 x i32> %47, i32 %24, i64 1
  %56 = add <2 x i32> %54, %55
  %57 = insertelement <2 x i32> %49, i32 %26, i64 1
  %58 = add <2 x i32> %56, %57
  %59 = sitofp <2 x i32> %58 to <2 x double>
  %60 = load <2 x double>, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1328), align 8
  %61 = insertelement <2 x double> %60, double %27, i64 1
  %62 = fmul <2 x double> %61, %59
  %63 = fmul <2 x double> %62, <double 2.000000e+00, double 2.000000e+00>
  %64 = tail call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %11)
  %65 = insertelement <2 x double> poison, double %64, i64 0
  %66 = insertelement <2 x double> %65, double %31, i64 1
  %67 = fsub <2 x double> <double 1.000000e+00, double 1.000000e+00>, %66
  %68 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %63, <2 x double> %67, <2 x double> %39)
  br label %241

69:                                               ; preds = %1
  %70 = load i32, ptr %2, align 8, !tbaa !5
  %71 = load i32, ptr %7, align 4, !tbaa !19
  %72 = icmp eq i32 %70, %71
  br i1 %72, label %73, label %112

73:                                               ; preds = %69
  %74 = sitofp i32 %70 to double
  %75 = getelementptr inbounds i8, ptr %0, i64 480
  %76 = load i32, ptr %75, align 8, !tbaa !23
  %77 = getelementptr inbounds i8, ptr %0, i64 488
  %78 = load i32, ptr %77, align 8, !tbaa !26
  %79 = getelementptr inbounds i8, ptr %0, i64 496
  %80 = load i32, ptr %79, align 8, !tbaa !27
  %81 = add i32 %78, %76
  %82 = add i32 %81, %80
  %83 = sdiv i32 %70, 2
  %84 = add nsw i32 %83, -1
  %85 = mul nsw i32 %82, %84
  %86 = sitofp i32 %85 to double
  %87 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1328), align 8, !tbaa !28
  %88 = getelementptr inbounds i8, ptr %0, i64 484
  %89 = load i32, ptr %88, align 4, !tbaa !24
  %90 = getelementptr inbounds i8, ptr %0, i64 492
  %91 = load i32, ptr %90, align 4, !tbaa !25
  %92 = add nsw i32 %91, %89
  %93 = sitofp i32 %92 to double
  %94 = fmul double %87, %93
  %95 = insertelement <2 x i32> poison, i32 %11, i64 0
  %96 = insertelement <2 x i32> %95, i32 %6, i64 1
  %97 = sitofp <2 x i32> %96 to <2 x double>
  %98 = getelementptr inbounds i8, ptr %0, i64 464
  %99 = load <2 x double>, ptr %98, align 8, !tbaa !36
  %100 = insertelement <2 x double> poison, double %74, i64 0
  %101 = shufflevector <2 x double> %100, <2 x double> poison, <2 x i32> zeroinitializer
  %102 = fmul <2 x double> %99, %101
  %103 = fmul <2 x double> %102, <double 5.000000e-01, double 5.000000e-01>
  %104 = insertelement <2 x double> poison, double %86, i64 0
  %105 = shufflevector <2 x double> %104, <2 x double> poison, <2 x i32> zeroinitializer
  %106 = insertelement <2 x double> poison, double %87, i64 0
  %107 = shufflevector <2 x double> %106, <2 x double> poison, <2 x i32> zeroinitializer
  %108 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %105, <2 x double> %107, <2 x double> %103)
  %109 = insertelement <2 x double> poison, double %94, i64 0
  %110 = shufflevector <2 x double> %109, <2 x double> poison, <2 x i32> zeroinitializer
  %111 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %110, <2 x double> %97, <2 x double> %108)
  br label %241

112:                                              ; preds = %69
  %113 = icmp sgt i32 %70, %71
  %114 = getelementptr inbounds i8, ptr %0, i64 480
  %115 = getelementptr inbounds i8, ptr %0, i64 488
  %116 = getelementptr inbounds i8, ptr %0, i64 496
  br i1 %113, label %117, label %189

117:                                              ; preds = %112
  %118 = getelementptr inbounds i8, ptr %0, i64 472
  %119 = sdiv i32 %70, 2
  %120 = sext i32 %119 to i64
  %121 = tail call noundef i32 @_Z5_log2m(i64 noundef %120)
  %122 = load i32, ptr %7, align 4, !tbaa !19
  %123 = sdiv i32 %122, 2
  %124 = sext i32 %123 to i64
  %125 = tail call noundef i32 @_Z5_log2m(i64 noundef %124)
  %126 = sub i32 %121, %125
  %127 = uitofp i32 %126 to double
  %128 = load i32, ptr %114, align 8, !tbaa !23
  %129 = load i32, ptr %115, align 8, !tbaa !26
  %130 = load i32, ptr %116, align 8, !tbaa !27
  %131 = add i32 %129, %128
  %132 = add i32 %131, %130
  %133 = sitofp i32 %132 to double
  %134 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1328), align 8, !tbaa !28
  %135 = getelementptr inbounds i8, ptr %0, i64 484
  %136 = load i32, ptr %135, align 4, !tbaa !24
  %137 = getelementptr inbounds i8, ptr %0, i64 492
  %138 = load i32, ptr %137, align 4, !tbaa !25
  %139 = sub nsw i32 %6, %11
  %140 = sub nsw i32 %11, %6
  %141 = sitofp i32 %11 to double
  %142 = getelementptr inbounds i8, ptr %0, i64 464
  %143 = load double, ptr %118, align 8, !tbaa !35
  %144 = load i32, ptr %7, align 4, !tbaa !19
  %145 = sdiv i32 %144, 2
  %146 = add nsw i32 %145, -1
  %147 = sitofp i32 %146 to double
  %148 = fadd double %127, %147
  %149 = fmul double %148, %133
  %150 = tail call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %139)
  %151 = fsub double 1.000000e+00, %150
  %152 = tail call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %140)
  %153 = fmul double %152, %141
  %154 = tail call double @llvm.fmuladd.f64(double %151, double 2.000000e+00, double %153)
  %155 = load <2 x double>, ptr %142, align 8
  %156 = load i32, ptr %2, align 8, !tbaa !5
  %157 = insertelement <2 x i32> poison, i32 %156, i64 0
  %158 = insertelement <2 x i32> %157, i32 %144, i64 1
  %159 = sitofp <2 x i32> %158 to <2 x double>
  %160 = insertelement <2 x double> %155, double %143, i64 1
  %161 = fmul <2 x double> %160, %159
  %162 = fmul <2 x double> %161, <double 5.000000e-01, double 5.000000e-01>
  %163 = load i32, ptr %114, align 8, !tbaa !23
  %164 = load i32, ptr %115, align 8, !tbaa !26
  %165 = load i32, ptr %116, align 8, !tbaa !27
  %166 = add i32 %164, %163
  %167 = add i32 %166, %165
  %168 = sdiv i32 %156, 2
  %169 = add nsw i32 %168, -1
  %170 = mul nsw i32 %167, %169
  %171 = sitofp i32 %170 to double
  %172 = load <2 x double>, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1328), align 8
  %173 = insertelement <2 x double> poison, double %171, i64 0
  %174 = insertelement <2 x double> %173, double %149, i64 1
  %175 = insertelement <2 x double> %172, double %134, i64 1
  %176 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %174, <2 x double> %175, <2 x double> %162)
  %177 = load <4 x i32>, ptr %135, align 4
  %178 = shufflevector <4 x i32> %177, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %179 = load <4 x i32>, ptr %137, align 4
  %180 = shufflevector <4 x i32> %179, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
  %181 = insertelement <2 x i32> %178, i32 %138, i64 1
  %182 = insertelement <2 x i32> %180, i32 %136, i64 1
  %183 = add nsw <2 x i32> %181, %182
  %184 = sitofp <2 x i32> %183 to <2 x double>
  %185 = fmul <2 x double> %175, %184
  %186 = insertelement <2 x double> poison, double %141, i64 0
  %187 = insertelement <2 x double> %186, double %154, i64 1
  %188 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %185, <2 x double> %187, <2 x double> %176)
  br label %241

189:                                              ; preds = %112
  %190 = sdiv i32 %71, 2
  %191 = sext i32 %190 to i64
  %192 = tail call noundef i32 @_Z5_log2m(i64 noundef %191)
  %193 = load i32, ptr %2, align 8, !tbaa !5
  %194 = sdiv i32 %193, 2
  %195 = sext i32 %194 to i64
  %196 = tail call noundef i32 @_Z5_log2m(i64 noundef %195)
  %197 = sub i32 %192, %196
  %198 = uitofp i32 %197 to double
  %199 = load i32, ptr %114, align 8, !tbaa !23
  %200 = load i32, ptr %115, align 8, !tbaa !26
  %201 = load i32, ptr %116, align 8, !tbaa !27
  %202 = add i32 %200, %199
  %203 = add i32 %202, %201
  %204 = sitofp i32 %203 to double
  %205 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1328), align 8, !tbaa !28
  %206 = getelementptr inbounds i8, ptr %0, i64 484
  %207 = load i32, ptr %206, align 4, !tbaa !24
  %208 = getelementptr inbounds i8, ptr %0, i64 492
  %209 = load i32, ptr %208, align 4, !tbaa !25
  %210 = add nsw i32 %209, %207
  %211 = sitofp i32 %210 to double
  %212 = fmul double %205, %211
  %213 = sitofp i32 %6 to double
  %214 = getelementptr inbounds i8, ptr %0, i64 464
  %215 = load <2 x i32>, ptr %7, align 4, !tbaa !37
  %216 = extractelement <2 x i32> %215, i64 1
  %217 = sdiv i32 %216, 2
  %218 = add nsw i32 %217, -1
  %219 = sitofp i32 %218 to double
  %220 = fadd double %198, %219
  %221 = fmul double %220, %204
  %222 = load <2 x double>, ptr %214, align 8, !tbaa !36
  %223 = sitofp <2 x i32> %215 to <2 x double>
  %224 = shufflevector <2 x double> %223, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %225 = fmul <2 x double> %222, %224
  %226 = fmul <2 x double> %225, <double 5.000000e-01, double 5.000000e-01>
  %227 = insertelement <2 x double> poison, double %221, i64 0
  %228 = shufflevector <2 x double> %227, <2 x double> poison, <2 x i32> zeroinitializer
  %229 = insertelement <2 x double> poison, double %205, i64 0
  %230 = shufflevector <2 x double> %229, <2 x double> poison, <2 x i32> zeroinitializer
  %231 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %228, <2 x double> %230, <2 x double> %226)
  %232 = sub nsw i32 %11, %6
  %233 = tail call noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 5.000000e-01, i32 noundef %232)
  %234 = fsub double 1.000000e+00, %233
  %235 = tail call double @llvm.fmuladd.f64(double %234, double 2.000000e+00, double %213)
  %236 = insertelement <2 x double> poison, double %212, i64 0
  %237 = shufflevector <2 x double> %236, <2 x double> poison, <2 x i32> zeroinitializer
  %238 = insertelement <2 x double> poison, double %235, i64 0
  %239 = insertelement <2 x double> %238, double %213, i64 1
  %240 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %237, <2 x double> %239, <2 x double> %231)
  br label %241

241:                                              ; preds = %73, %189, %117, %15
  %242 = phi <2 x double> [ %68, %15 ], [ %111, %73 ], [ %188, %117 ], [ %240, %189 ]
  %243 = fmul <2 x double> %242, <double 5.000000e-01, double 5.000000e-01>
  %244 = fmul <2 x double> %243, <double 2.000000e+00, double 2.000000e+00>
  store <2 x double> %244, ptr %0, align 8, !tbaa !36
  %245 = getelementptr inbounds i8, ptr %0, i64 264
  store double 0.000000e+00, ptr %245, align 8, !tbaa !38
  %246 = getelementptr inbounds i8, ptr %0, i64 24
  %247 = getelementptr inbounds i8, ptr %0, i64 32
  %248 = getelementptr inbounds i8, ptr %0, i64 104
  store double 0.000000e+00, ptr %248, align 8, !tbaa !39
  %249 = icmp sgt i32 %11, 0
  %250 = icmp sgt i32 %6, 0
  %251 = or i1 %249, %250
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %246, i8 0, i64 16, i1 false)
  br i1 %251, label %.lr.ph, label %.thread219

.lr.ph:                                           ; preds = %241
  %252 = extractelement <2 x double> %243, i64 1
  %253 = fmul double %252, 5.000000e-01
  %254 = getelementptr inbounds i8, ptr %0, i64 512
  %255 = getelementptr inbounds i8, ptr %0, i64 424
  %256 = getelementptr inbounds i8, ptr %0, i64 509
  %257 = insertelement <2 x double> %243, double %253, i64 1
  br label %258

258:                                              ; preds = %.lr.ph, %.backedge
  %259 = phi i1 [ %250, %.lr.ph ], [ %421, %.backedge ]
  %260 = phi i1 [ %249, %.lr.ph ], [ %420, %.backedge ]
  %.0110195 = phi double [ 0.000000e+00, %.lr.ph ], [ %.2, %.backedge ]
  %.0117192 = phi i32 [ %11, %.lr.ph ], [ %.1118, %.backedge ]
  %.0119191 = phi i32 [ %6, %.lr.ph ], [ %.1120, %.backedge ]
  %.0126188 = phi ptr [ null, %.lr.ph ], [ %.1127, %.backedge ]
  %.0128187 = phi ptr [ null, %.lr.ph ], [ %.1129, %.backedge ]
  %.0130186 = phi ptr [ null, %.lr.ph ], [ %.1131, %.backedge ]
  %261 = phi <2 x double> [ %243, %.lr.ph ], [ %423, %.backedge ]
  %262 = phi <2 x double> [ %257, %.lr.ph ], [ %424, %.backedge ]
  %.not146 = icmp eq ptr %.0130186, null
  br i1 %.not146, label %264, label %263

263:                                              ; preds = %258
  tail call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %.0130186) #10
  tail call void @_ZdlPvm(ptr noundef nonnull %.0130186, i64 noundef 1264) #11
  br label %264

264:                                              ; preds = %263, %258
  %.not147 = icmp eq ptr %.0128187, null
  br i1 %.not147, label %266, label %265

265:                                              ; preds = %264
  tail call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %.0128187) #10
  tail call void @_ZdlPvm(ptr noundef nonnull %.0128187, i64 noundef 1264) #11
  br label %266

266:                                              ; preds = %265, %264
  %.not148 = icmp eq ptr %.0126188, null
  br i1 %.not148, label %268, label %267

267:                                              ; preds = %266
  tail call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %.0126188) #10
  tail call void @_ZdlPvm(ptr noundef nonnull %.0126188, i64 noundef 1264) #11
  br label %268

268:                                              ; preds = %267, %266
  %269 = icmp sgt i32 %.0119191, %.0117192
  br i1 %269, label %270, label %285

270:                                              ; preds = %268
  %271 = tail call noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #12
  %272 = load i32, ptr %254, align 8, !tbaa !40
  %273 = extractelement <2 x double> %261, i64 0
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %271, i32 noundef %272, double noundef %273, 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))
          to label %274 unwind label %281

274:                                              ; preds = %270
  %275 = tail call noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #12
  %276 = load i32, ptr %254, align 8, !tbaa !40
  %277 = fmul double %273, 5.000000e-01
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %275, i32 noundef %276, double noundef %277, 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))
          to label %278 unwind label %283

278:                                              ; preds = %274
  %279 = add nsw i32 %.0119191, -1
  %280 = extractelement <2 x double> %262, i64 1
  br label %327

281:                                              ; preds = %270
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %427

283:                                              ; preds = %274
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %427

285:                                              ; preds = %268
  %or.cond = select i1 %260, i1 %259, i1 false
  br i1 %or.cond, label %286, label %309

286:                                              ; preds = %285
  %287 = tail call noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #12
  %288 = load i32, ptr %254, align 8, !tbaa !40
  %289 = extractelement <2 x double> %261, i64 0
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %287, i32 noundef %288, double noundef %289, 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))
          to label %290 unwind label %303

290:                                              ; preds = %286
  %291 = tail call noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #12
  %292 = load i32, ptr %254, align 8, !tbaa !40
  %293 = extractelement <2 x double> %262, i64 1
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %291, i32 noundef %292, double noundef %293, 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))
          to label %294 unwind label %305

294:                                              ; preds = %290
  %295 = tail call noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #12
  %296 = load i32, ptr %254, align 8, !tbaa !40
  %297 = fmul double %289, 5.000000e-01
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %295, i32 noundef %296, double noundef %297, 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))
          to label %298 unwind label %307

298:                                              ; preds = %294
  %299 = fmul double %293, 5.000000e-01
  %300 = add nsw i32 %.0117192, -1
  %301 = add nsw i32 %.0119191, -1
  %302 = shufflevector <2 x double> %261, <2 x double> %262, <2 x i32> <i32 0, i32 3>
  br label %327

303:                                              ; preds = %286
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %427

305:                                              ; preds = %290
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %427

307:                                              ; preds = %294
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %427

309:                                              ; preds = %285
  %310 = icmp eq i32 %.0119191, 0
  br i1 %310, label %312, label %311

311:                                              ; preds = %309
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 407, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN6Htree28in_htreeEv) #13
  unreachable

312:                                              ; preds = %309
  %313 = tail call noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #12
  %314 = load i32, ptr %254, align 8, !tbaa !40
  %315 = extractelement <2 x double> %262, i64 1
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %313, i32 noundef %314, double noundef %315, 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))
          to label %316 unwind label %323

316:                                              ; preds = %312
  %317 = tail call noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #12
  %318 = load i32, ptr %254, align 8, !tbaa !40
  %319 = fmul double %315, 5.000000e-01
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %317, i32 noundef %318, double noundef %319, 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))
          to label %320 unwind label %325

320:                                              ; preds = %316
  %321 = add nsw i32 %.0117192, -1
  %322 = extractelement <2 x double> %261, i64 0
  br label %327

323:                                              ; preds = %312
  %324 = landingpad { ptr, i32 }
          cleanup
  br label %427

325:                                              ; preds = %316
  %326 = landingpad { ptr, i32 }
          cleanup
  br label %427

327:                                              ; preds = %298, %320, %278
  %.1131 = phi ptr [ %271, %278 ], [ %287, %298 ], [ %313, %320 ]
  %.1129 = phi ptr [ %275, %278 ], [ %291, %298 ], [ %317, %320 ]
  %.1127 = phi ptr [ null, %278 ], [ %295, %298 ], [ null, %320 ]
  %.1125 = phi double [ %277, %278 ], [ %297, %298 ], [ %322, %320 ]
  %.1123 = phi double [ %280, %278 ], [ %299, %298 ], [ %319, %320 ]
  %328 = phi i1 [ false, %278 ], [ false, %298 ], [ true, %320 ]
  %.not150 = phi i1 [ false, %278 ], [ true, %298 ], [ false, %320 ]
  %.1120 = phi i32 [ %279, %278 ], [ %301, %298 ], [ 0, %320 ]
  %.1118 = phi i32 [ %.0117192, %278 ], [ %300, %298 ], [ %321, %320 ]
  %329 = phi <2 x double> [ %261, %278 ], [ %302, %298 ], [ %262, %320 ]
  %330 = getelementptr inbounds i8, ptr %.1131, i64 264
  %331 = load double, ptr %330, align 8, !tbaa !38
  %332 = load double, ptr %245, align 8, !tbaa !38
  %333 = fadd double %331, %332
  store double %333, ptr %245, align 8, !tbaa !38
  %334 = getelementptr inbounds i8, ptr %.1131, i64 24
  %335 = load double, ptr %334, align 8, !tbaa !41
  %336 = load double, ptr %246, align 8, !tbaa !41
  %337 = fadd double %335, %336
  store double %337, ptr %246, align 8, !tbaa !41
  %338 = load double, ptr %255, align 8, !tbaa !42
  %339 = load double, ptr %248, align 8, !tbaa !39
  %340 = tail call double @llvm.fmuladd.f64(double %335, double %338, double %339)
  store double %340, ptr %248, align 8, !tbaa !39
  %341 = getelementptr inbounds i8, ptr %.1131, i64 32
  %342 = load <2 x double>, ptr %341, align 8, !tbaa !36
  %343 = load <2 x double>, ptr %247, align 8, !tbaa !36
  %344 = insertelement <2 x double> poison, double %338, i64 0
  %345 = shufflevector <2 x double> %344, <2 x double> poison, <2 x i32> zeroinitializer
  %346 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %342, <2 x double> %345, <2 x double> %343)
  store <2 x double> %346, ptr %247, align 8, !tbaa !36
  %347 = load i8, ptr %12, align 4, !tbaa !20, !range !21, !noundef !22
  %348 = icmp eq i8 %347, 0
  %or.cond3 = and i1 %328, %348
  br i1 %or.cond3, label %352, label %349

349:                                              ; preds = %327
  %350 = load i8, ptr %256, align 1, !tbaa !43, !range !21, !noundef !22
  %351 = trunc nuw i8 %350 to i1
  br i1 %351, label %352, label %354

352:                                              ; preds = %327, %349
  %353 = fmul double %338, 2.000000e+00
  store double %353, ptr %255, align 8, !tbaa !42
  br label %354

354:                                              ; preds = %352, %349
  br i1 %348, label %355, label %382

355:                                              ; preds = %354
  %356 = getelementptr inbounds i8, ptr %.1131, i64 320
  %357 = load double, ptr %356, align 8, !tbaa !44
  %358 = extractelement <2 x double> %329, i64 0
  %359 = fcmp ogt double %358, %357
  br i1 %359, label %360, label %363

360:                                              ; preds = %355
  %361 = getelementptr inbounds i8, ptr %.1131, i64 312
  %362 = load double, ptr %361, align 8, !tbaa !52
  br label %368

363:                                              ; preds = %355
  %364 = fdiv double %358, %357
  %365 = getelementptr inbounds i8, ptr %.1131, i64 312
  %366 = load double, ptr %365, align 8, !tbaa !52
  %367 = fmul double %364, %366
  br label %368

368:                                              ; preds = %363, %360
  %.0132 = phi double [ %357, %360 ], [ %358, %363 ]
  %.0109 = phi double [ %362, %360 ], [ %367, %363 ]
  %369 = getelementptr inbounds i8, ptr %.1129, i64 320
  %370 = load double, ptr %369, align 8, !tbaa !44
  %371 = extractelement <2 x double> %329, i64 1
  %372 = fcmp ogt double %371, %370
  br i1 %372, label %373, label %376

373:                                              ; preds = %368
  %374 = getelementptr inbounds i8, ptr %.1129, i64 312
  %375 = load double, ptr %374, align 8, !tbaa !52
  br label %381

376:                                              ; preds = %368
  %377 = fdiv double %358, %370
  %378 = getelementptr inbounds i8, ptr %.1129, i64 312
  %379 = load double, ptr %378, align 8, !tbaa !52
  %380 = fmul double %377, %379
  br label %381

381:                                              ; preds = %376, %373
  %.1 = phi double [ %375, %373 ], [ %380, %376 ]
  tail call void @_ZN6Htree210input_nandEddd(ptr noundef nonnull align 8 dereferenceable(544) %0, double noundef %.0109, double noundef %.1, double noundef %.0132)
  br label %382

382:                                              ; preds = %381, %354
  %.2 = phi double [ %.1, %381 ], [ %.0110195, %354 ]
  br i1 %.not150, label %383, label %.backedge

383:                                              ; preds = %382
  %384 = getelementptr inbounds i8, ptr %.1129, i64 264
  %385 = load double, ptr %384, align 8, !tbaa !38
  %386 = load double, ptr %245, align 8, !tbaa !38
  %387 = fadd double %385, %386
  store double %387, ptr %245, align 8, !tbaa !38
  %388 = getelementptr inbounds i8, ptr %.1129, i64 24
  %389 = load double, ptr %388, align 8, !tbaa !41
  %390 = load double, ptr %246, align 8, !tbaa !41
  %391 = fadd double %389, %390
  store double %391, ptr %246, align 8, !tbaa !41
  %392 = load double, ptr %255, align 8, !tbaa !42
  %393 = load double, ptr %248, align 8, !tbaa !39
  %394 = tail call double @llvm.fmuladd.f64(double %389, double %392, double %393)
  store double %394, ptr %248, align 8, !tbaa !39
  %395 = getelementptr inbounds i8, ptr %.1129, i64 32
  %396 = load i8, ptr %12, align 4, !tbaa !20, !range !21, !noundef !22
  %397 = trunc nuw i8 %396 to i1
  %398 = load <2 x double>, ptr %395, align 8, !tbaa !36
  %399 = load <2 x double>, ptr %247, align 8, !tbaa !36
  %400 = insertelement <2 x double> poison, double %392, i64 0
  %401 = shufflevector <2 x double> %400, <2 x double> poison, <2 x i32> zeroinitializer
  %402 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %398, <2 x double> %401, <2 x double> %399)
  %403 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %398, <2 x double> %401, <2 x double> %402)
  store <2 x double> %403, ptr %247, align 8, !tbaa !36
  br i1 %397, label %.backedge, label %404

404:                                              ; preds = %383
  %405 = fmul double %392, 2.000000e+00
  store double %405, ptr %255, align 8, !tbaa !42
  %406 = getelementptr inbounds i8, ptr %.1127, i64 320
  %407 = load double, ptr %406, align 8, !tbaa !44
  %408 = extractelement <2 x double> %329, i64 1
  %409 = fcmp ogt double %408, %407
  br i1 %409, label %410, label %413

410:                                              ; preds = %404
  %411 = getelementptr inbounds i8, ptr %.1127, i64 312
  %412 = load double, ptr %411, align 8, !tbaa !52
  br label %419

413:                                              ; preds = %404
  %414 = extractelement <2 x double> %329, i64 0
  %415 = fdiv double %414, %407
  %416 = getelementptr inbounds i8, ptr %.1127, i64 312
  %417 = load double, ptr %416, align 8, !tbaa !52
  %418 = fmul double %415, %417
  br label %419

419:                                              ; preds = %413, %410
  %.0134 = phi double [ %412, %410 ], [ %418, %413 ]
  %.1133 = phi double [ %407, %410 ], [ %408, %413 ]
  tail call void @_ZN6Htree210input_nandEddd(ptr noundef nonnull align 8 dereferenceable(544) %0, double noundef %.2, double noundef %.0134, double noundef %.1133)
  br label %.backedge

.backedge:                                        ; preds = %383, %419, %382
  %420 = icmp sgt i32 %.1118, 0
  %421 = icmp sgt i32 %.1120, 0
  %422 = select i1 %420, i1 true, i1 %421
  %423 = insertelement <2 x double> %329, double %.1125, i64 0
  %424 = insertelement <2 x double> %329, double %.1123, i64 1
  br i1 %422, label %258, label %425, !llvm.loop !53

425:                                              ; preds = %.backedge
  tail call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %.1131) #10
  tail call void @_ZdlPvm(ptr noundef nonnull %.1131, i64 noundef 1264) #11
  tail call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %.1129) #10
  tail call void @_ZdlPvm(ptr noundef nonnull %.1129, i64 noundef 1264) #11
  %.not145 = icmp eq ptr %.1127, null
  br i1 %.not145, label %.thread219, label %426

426:                                              ; preds = %425
  tail call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %.1127) #10
  tail call void @_ZdlPvm(ptr noundef nonnull %.1127, i64 noundef 1264) #11
  br label %.thread219

.thread219:                                       ; preds = %241, %426, %425
  ret void

427:                                              ; preds = %325, %323, %307, %305, %303, %283, %281
  %.lcssa223.sink = phi ptr [ %317, %325 ], [ %313, %323 ], [ %295, %307 ], [ %291, %305 ], [ %287, %303 ], [ %275, %283 ], [ %271, %281 ]
  %.pn = phi { ptr, i32 } [ %326, %325 ], [ %324, %323 ], [ %308, %307 ], [ %306, %305 ], [ %304, %303 ], [ %284, %283 ], [ %282, %281 ]
  tail call void @_ZdlPvm(ptr noundef nonnull %.lcssa223.sink, i64 noundef 1264) #11
  resume { ptr, i32 } %.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Htree210input_nandEddd(ptr noundef nonnull align 8 dereferenceable(544), double noundef, double noundef, double noundef) local_unnamed_addr #1 align 2

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

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

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

declare noundef i32 @_Z5_log2m(i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3powIdiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #6

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #7

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #9

attributes #0 = { noreturn 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 #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nobuiltin 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 #7 = { nobuiltin allocsize(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 #8 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind }
attributes #11 = { builtin nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { noreturn 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, !15, i64 504}
!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, !15, i64 500}
!20 = !{!6, !16, i64 508}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!6, !15, i64 480}
!24 = !{!6, !15, i64 484}
!25 = !{!6, !15, i64 492}
!26 = !{!6, !15, i64 488}
!27 = !{!6, !15, i64 496}
!28 = !{!29, !9, i64 1328}
!29 = !{!"_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, !30, i64 352, !31, i64 360, !31, i64 528, !31, i64 696, !31, i64 864, !31, i64 1032, !32, i64 1200, !32, i64 1264, !32, i64 1328, !33, i64 1392, !34, i64 1416, !34, i64 1464, !34, i64 1512}
!30 = !{!"long", !10, i64 0}
!31 = !{!"_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}
!32 = !{!"_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}
!33 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !9, i64 0, !9, i64 8, !9, i64 16}
!34 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40}
!35 = !{!6, !9, i64 472}
!36 = !{!9, !9, i64 0}
!37 = !{!15, !15, i64 0}
!38 = !{!7, !9, i64 264}
!39 = !{!7, !9, i64 104}
!40 = !{!6, !17, i64 512}
!41 = !{!7, !9, i64 24}
!42 = !{!6, !9, i64 424}
!43 = !{!6, !16, i64 509}
!44 = !{!45, !9, i64 320}
!45 = !{!"_ZTS4Wire", !7, i64 0, !17, i64 280, !9, i64 288, !9, i64 296, !46, 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, !47, i64 384, !7, i64 408, !7, i64 688, !7, i64 968, !9, i64 1248, !18, i64 1256}
!46 = !{!"_ZTS14Wire_placement", !10, i64 0}
!47 = !{!"_ZTSNSt7__cxx114listI9ComponentSaIS1_EEE", !48, i64 0}
!48 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EEE", !49, i64 0}
!49 = !{!"_ZTSNSt7__cxx1110_List_baseI9ComponentSaIS1_EE10_List_implE", !50, i64 0}
!50 = !{!"_ZTSNSt8__detail17_List_node_headerE", !51, i64 0, !30, i64 16}
!51 = !{!"_ZTSNSt8__detail15_List_node_baseE", !18, i64 0, !18, i64 8}
!52 = !{!45, !9, i64 312}
!53 = distinct !{!53, !54}
!54 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass