; LLVM IR from gem5/gem5 :: ext/mcpat/cacti/mat.ll (ZN3Mat17compute_cam_delayEd)

; 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.Mat = type { %class.Component, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, double, double, double, double, double, double, double, double, double, double, double, double, double, %class.Subarray, %class.powerDef, %class.powerDef, %class.powerDef, double, i32, i32, double, %class.Area, %class.Area, i8, i8, i8, i8, i32, %class.powerDef, double, double, double, double, double, double, %class.powerDef, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32 }
%class.Component = type { %class.Area, %class.powerDef, %class.powerDef, double, double }
%class.Subarray = type { %class.Component, ptr, i32, i32, i32, i32, %class.Area, %class.Area, i8, double, double, double, double, double, double, 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.InputParameter = type { i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i8, i8, i32, i32, i8, double, double, i8, i32, i32, i8 }
%class.Driver = type <{ %class.Component, i32, i32, [20 x double], [20 x double], double, double, double, double, %class.powerDef, i8, [7 x i8] }>

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

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

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

declare void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761), double noundef, double noundef, double noundef, i1 noundef zeroext) unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24)) #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN3Mat17compute_cam_delayEd(ptr noundef nonnull align 8 dereferenceable(3064) %0, double noundef %1) #6 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca double, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca i32, align 4
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca double, align 8
  %59 = alloca double, align 8
  %60 = alloca double, align 8
  %61 = alloca i8, align 1
  %62 = alloca ptr, align 8
  %63 = alloca i32, align 4
  %64 = alloca double, align 8
  %65 = alloca double, align 8
  %66 = alloca double, align 8
  %67 = alloca double, align 8
  %68 = alloca double, align 8
  %69 = alloca double, align 8
  %70 = alloca double, align 8
  %71 = alloca double, align 8
  %72 = alloca double, align 8
  %73 = alloca double, align 8
  %74 = alloca double, align 8
  %75 = alloca double, align 8
  %76 = alloca double, align 8
  %77 = alloca double, align 8
  %78 = alloca double, align 8
  %79 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store double %1, ptr %4, align 8, !tbaa !9
  %80 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  store double 0.000000e+00, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  store double 0.000000e+00, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  store double 0.000000e+00, ptr %53, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  store double 0.000000e+00, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  store double 0.000000e+00, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  store double 0.000000e+00, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  store double 0.000000e+00, ptr %57, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  store double 0.000000e+00, ptr %58, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  store double 0.000000e+00, ptr %59, align 8, !tbaa !9
  %81 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 54
  %82 = call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %81)
  %83 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 2), align 8, !tbaa !11
  %84 = fmul double %82, %83
  store double %84, ptr %42, align 8, !tbaa !9
  %85 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 54
  %86 = call noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24) %85)
  %87 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 2), align 8, !tbaa !11
  %88 = fmul double %86, %87
  store double %88, ptr %44, align 8, !tbaa !9
  %89 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 54
  %90 = call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %89)
  %91 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 1), align 8, !tbaa !18
  %92 = fmul double %90, %91
  store double %92, ptr %43, align 8, !tbaa !9
  %93 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 54
  %94 = call noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24) %93)
  %95 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 1), align 8, !tbaa !18
  %96 = fmul double %94, %95
  store double %96, ptr %45, align 8, !tbaa !9
  store double 0.000000e+00, ptr %46, align 8, !tbaa !9
  %97 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 39
  store double 0.000000e+00, ptr %97, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %98 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %99 = load i8, ptr %98, align 8, !tbaa !28, !range !29, !noundef !30
  %100 = trunc i8 %99 to i1
  %101 = call noundef double @_Z21pmos_to_nmos_sz_ratiobb(i1 noundef zeroext %100, i1 noundef zeroext false)
  store double %101, ptr %60, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %61) #8
  store i8 0, ptr %61, align 1, !tbaa !31
  %102 = load i8, ptr %61, align 1, !tbaa !31, !range !29, !noundef !30
  %103 = trunc i8 %102 to i1
  br i1 %103, label %104, label %217

104:                                              ; preds = %2
  %105 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %106 = getelementptr inbounds %class.InputParameter, ptr %105, i32 0, i32 13
  %107 = load double, ptr %106, align 8, !tbaa !32
  %108 = fmul double 4.500000e+02, %107
  store double %108, ptr %13, align 8, !tbaa !9
  %109 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %110 = getelementptr inbounds %class.InputParameter, ptr %109, i32 0, i32 13
  %111 = load double, ptr %110, align 8, !tbaa !32
  %112 = fmul double 3.000000e+02, %111
  store double %112, ptr %14, align 8, !tbaa !9
  %113 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %114 = getelementptr inbounds %class.InputParameter, ptr %113, i32 0, i32 13
  %115 = load double, ptr %114, align 8, !tbaa !32
  %116 = fmul double 6.250000e+01, %115
  store double %116, ptr %15, align 8, !tbaa !9
  %117 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %118 = getelementptr inbounds %class.InputParameter, ptr %117, i32 0, i32 13
  %119 = load double, ptr %118, align 8, !tbaa !32
  %120 = fmul double 1.250000e+02, %119
  store double %120, ptr %16, align 8, !tbaa !9
  %121 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %122 = getelementptr inbounds %class.InputParameter, ptr %121, i32 0, i32 13
  %123 = load double, ptr %122, align 8, !tbaa !32
  %124 = fmul double 2.500000e+02, %123
  store double %124, ptr %17, align 8, !tbaa !9
  %125 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %126 = getelementptr inbounds %class.InputParameter, ptr %125, i32 0, i32 13
  %127 = load double, ptr %126, align 8, !tbaa !32
  %128 = fmul double 5.000000e+02, %127
  store double %128, ptr %18, align 8, !tbaa !9
  %129 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %130 = getelementptr inbounds %class.InputParameter, ptr %129, i32 0, i32 13
  %131 = load double, ptr %130, align 8, !tbaa !32
  %132 = fmul double 6.250000e+00, %131
  store double %132, ptr %19, align 8, !tbaa !9
  %133 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %134 = getelementptr inbounds %class.InputParameter, ptr %133, i32 0, i32 13
  %135 = load double, ptr %134, align 8, !tbaa !32
  %136 = fmul double 1.250000e+01, %135
  store double %136, ptr %20, align 8, !tbaa !9
  %137 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %138 = getelementptr inbounds %class.InputParameter, ptr %137, i32 0, i32 13
  %139 = load double, ptr %138, align 8, !tbaa !32
  %140 = fmul double 2.500000e+01, %139
  store double %140, ptr %21, align 8, !tbaa !9
  %141 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %142 = getelementptr inbounds %class.InputParameter, ptr %141, i32 0, i32 13
  %143 = load double, ptr %142, align 8, !tbaa !32
  %144 = fmul double 5.000000e+01, %143
  store double %144, ptr %22, align 8, !tbaa !9
  %145 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %146 = getelementptr inbounds %class.InputParameter, ptr %145, i32 0, i32 13
  %147 = load double, ptr %146, align 8, !tbaa !32
  %148 = fmul double 6.250000e+01, %147
  store double %148, ptr %23, align 8, !tbaa !9
  %149 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %150 = getelementptr inbounds %class.InputParameter, ptr %149, i32 0, i32 13
  %151 = load double, ptr %150, align 8, !tbaa !32
  %152 = fmul double 1.250000e+02, %151
  store double %152, ptr %24, align 8, !tbaa !9
  %153 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %154 = getelementptr inbounds %class.InputParameter, ptr %153, i32 0, i32 13
  %155 = load double, ptr %154, align 8, !tbaa !32
  %156 = fmul double 7.500000e+00, %155
  store double %156, ptr %25, align 8, !tbaa !9
  %157 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %158 = getelementptr inbounds %class.InputParameter, ptr %157, i32 0, i32 13
  %159 = load double, ptr %158, align 8, !tbaa !32
  %160 = fmul double 1.250000e+01, %159
  store double %160, ptr %30, align 8, !tbaa !9
  %161 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %162 = getelementptr inbounds %class.InputParameter, ptr %161, i32 0, i32 13
  %163 = load double, ptr %162, align 8, !tbaa !32
  %164 = fmul double 2.500000e+01, %163
  store double %164, ptr %31, align 8, !tbaa !9
  %165 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %166 = getelementptr inbounds %class.InputParameter, ptr %165, i32 0, i32 13
  %167 = load double, ptr %166, align 8, !tbaa !32
  %168 = fmul double 2.500000e+01, %167
  store double %168, ptr %34, align 8, !tbaa !9
  %169 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %170 = getelementptr inbounds %class.InputParameter, ptr %169, i32 0, i32 13
  %171 = load double, ptr %170, align 8, !tbaa !32
  %172 = fmul double 3.750000e+01, %171
  store double %172, ptr %35, align 8, !tbaa !9
  %173 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %174 = getelementptr inbounds %class.InputParameter, ptr %173, i32 0, i32 13
  %175 = load double, ptr %174, align 8, !tbaa !32
  %176 = fmul double 1.250000e+01, %175
  store double %176, ptr %38, align 8, !tbaa !9
  %177 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %178 = getelementptr inbounds %class.InputParameter, ptr %177, i32 0, i32 13
  %179 = load double, ptr %178, align 8, !tbaa !32
  %180 = fmul double 3.750000e+01, %179
  store double %180, ptr %39, align 8, !tbaa !9
  %181 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %182 = getelementptr inbounds %class.InputParameter, ptr %181, i32 0, i32 13
  %183 = load double, ptr %182, align 8, !tbaa !32
  %184 = fmul double 1.250000e+01, %183
  store double %184, ptr %26, align 8, !tbaa !9
  %185 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %186 = getelementptr inbounds %class.InputParameter, ptr %185, i32 0, i32 13
  %187 = load double, ptr %186, align 8, !tbaa !32
  %188 = fmul double 1.250000e+01, %187
  store double %188, ptr %27, align 8, !tbaa !9
  %189 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %190 = getelementptr inbounds %class.InputParameter, ptr %189, i32 0, i32 13
  %191 = load double, ptr %190, align 8, !tbaa !32
  %192 = fmul double 7.500000e+01, %191
  store double %192, ptr %28, align 8, !tbaa !9
  %193 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %194 = getelementptr inbounds %class.InputParameter, ptr %193, i32 0, i32 13
  %195 = load double, ptr %194, align 8, !tbaa !32
  %196 = fmul double 1.000000e+02, %195
  store double %196, ptr %29, align 8, !tbaa !9
  %197 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %198 = getelementptr inbounds %class.InputParameter, ptr %197, i32 0, i32 13
  %199 = load double, ptr %198, align 8, !tbaa !32
  %200 = fmul double 6.250000e+01, %199
  store double %200, ptr %32, align 8, !tbaa !9
  %201 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %202 = getelementptr inbounds %class.InputParameter, ptr %201, i32 0, i32 13
  %203 = load double, ptr %202, align 8, !tbaa !32
  %204 = fmul double 6.250000e+01, %203
  store double %204, ptr %33, align 8, !tbaa !9
  %205 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %206 = getelementptr inbounds %class.InputParameter, ptr %205, i32 0, i32 13
  %207 = load double, ptr %206, align 8, !tbaa !32
  %208 = fmul double 6.250000e+00, %207
  store double %208, ptr %36, align 8, !tbaa !9
  %209 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %210 = getelementptr inbounds %class.InputParameter, ptr %209, i32 0, i32 13
  %211 = load double, ptr %210, align 8, !tbaa !32
  %212 = fmul double 1.250000e+01, %211
  store double %212, ptr %37, align 8, !tbaa !9
  %213 = load double, ptr %27, align 8, !tbaa !9
  store double %213, ptr %40, align 8, !tbaa !9
  %214 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !35
  %215 = load double, ptr %60, align 8, !tbaa !9
  %216 = fmul double %214, %215
  store double %216, ptr %41, align 8, !tbaa !9
  br label %324

217:                                              ; preds = %2
  %218 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %219 = getelementptr inbounds %class.InputParameter, ptr %218, i32 0, i32 13
  %220 = load double, ptr %219, align 8, !tbaa !32
  %221 = fmul double 4.500000e+02, %220
  store double %221, ptr %13, align 8, !tbaa !9
  %222 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %223 = getelementptr inbounds %class.InputParameter, ptr %222, i32 0, i32 13
  %224 = load double, ptr %223, align 8, !tbaa !32
  %225 = fmul double 3.000000e+02, %224
  store double %225, ptr %14, align 8, !tbaa !9
  %226 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %227 = getelementptr inbounds %class.InputParameter, ptr %226, i32 0, i32 13
  %228 = load double, ptr %227, align 8, !tbaa !32
  %229 = fmul double 6.250000e+01, %228
  store double %229, ptr %15, align 8, !tbaa !9
  %230 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %231 = getelementptr inbounds %class.InputParameter, ptr %230, i32 0, i32 13
  %232 = load double, ptr %231, align 8, !tbaa !32
  %233 = fmul double 1.250000e+02, %232
  store double %233, ptr %16, align 8, !tbaa !9
  %234 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %235 = getelementptr inbounds %class.InputParameter, ptr %234, i32 0, i32 13
  %236 = load double, ptr %235, align 8, !tbaa !32
  %237 = fmul double 2.500000e+02, %236
  store double %237, ptr %17, align 8, !tbaa !9
  %238 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %239 = getelementptr inbounds %class.InputParameter, ptr %238, i32 0, i32 13
  %240 = load double, ptr %239, align 8, !tbaa !32
  %241 = fmul double 5.000000e+02, %240
  store double %241, ptr %18, align 8, !tbaa !9
  %242 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %243 = getelementptr inbounds %class.InputParameter, ptr %242, i32 0, i32 13
  %244 = load double, ptr %243, align 8, !tbaa !32
  %245 = fmul double 6.250000e+00, %244
  store double %245, ptr %19, align 8, !tbaa !9
  %246 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %247 = getelementptr inbounds %class.InputParameter, ptr %246, i32 0, i32 13
  %248 = load double, ptr %247, align 8, !tbaa !32
  %249 = fmul double 1.250000e+01, %248
  store double %249, ptr %20, align 8, !tbaa !9
  %250 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %251 = getelementptr inbounds %class.InputParameter, ptr %250, i32 0, i32 13
  %252 = load double, ptr %251, align 8, !tbaa !32
  %253 = fmul double 2.500000e+01, %252
  store double %253, ptr %21, align 8, !tbaa !9
  %254 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %255 = getelementptr inbounds %class.InputParameter, ptr %254, i32 0, i32 13
  %256 = load double, ptr %255, align 8, !tbaa !32
  %257 = fmul double 5.000000e+01, %256
  store double %257, ptr %22, align 8, !tbaa !9
  %258 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %259 = getelementptr inbounds %class.InputParameter, ptr %258, i32 0, i32 13
  %260 = load double, ptr %259, align 8, !tbaa !32
  %261 = fmul double 6.250000e+01, %260
  store double %261, ptr %23, align 8, !tbaa !9
  %262 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %263 = getelementptr inbounds %class.InputParameter, ptr %262, i32 0, i32 13
  %264 = load double, ptr %263, align 8, !tbaa !32
  %265 = fmul double 1.250000e+02, %264
  store double %265, ptr %24, align 8, !tbaa !9
  %266 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %267 = getelementptr inbounds %class.InputParameter, ptr %266, i32 0, i32 13
  %268 = load double, ptr %267, align 8, !tbaa !32
  %269 = fmul double 7.500000e+00, %268
  store double %269, ptr %25, align 8, !tbaa !9
  %270 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %271 = getelementptr inbounds %class.InputParameter, ptr %270, i32 0, i32 13
  %272 = load double, ptr %271, align 8, !tbaa !32
  %273 = fmul double 1.250000e+01, %272
  store double %273, ptr %30, align 8, !tbaa !9
  %274 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %275 = getelementptr inbounds %class.InputParameter, ptr %274, i32 0, i32 13
  %276 = load double, ptr %275, align 8, !tbaa !32
  %277 = fmul double 2.500000e+01, %276
  store double %277, ptr %31, align 8, !tbaa !9
  %278 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %279 = getelementptr inbounds %class.InputParameter, ptr %278, i32 0, i32 13
  %280 = load double, ptr %279, align 8, !tbaa !32
  %281 = fmul double 2.500000e+01, %280
  store double %281, ptr %34, align 8, !tbaa !9
  %282 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %283 = getelementptr inbounds %class.InputParameter, ptr %282, i32 0, i32 13
  %284 = load double, ptr %283, align 8, !tbaa !32
  %285 = fmul double 3.750000e+01, %284
  store double %285, ptr %35, align 8, !tbaa !9
  %286 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %287 = getelementptr inbounds %class.InputParameter, ptr %286, i32 0, i32 13
  %288 = load double, ptr %287, align 8, !tbaa !32
  %289 = fmul double 1.250000e+01, %288
  store double %289, ptr %38, align 8, !tbaa !9
  %290 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %291 = getelementptr inbounds %class.InputParameter, ptr %290, i32 0, i32 13
  %292 = load double, ptr %291, align 8, !tbaa !32
  %293 = fmul double 3.750000e+01, %292
  store double %293, ptr %39, align 8, !tbaa !9
  %294 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 34), align 8, !tbaa !36
  store double %294, ptr %26, align 8, !tbaa !9
  %295 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 4), align 8, !tbaa !37
  store double %295, ptr %27, align 8, !tbaa !9
  %296 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %297 = getelementptr inbounds %class.InputParameter, ptr %296, i32 0, i32 13
  %298 = load double, ptr %297, align 8, !tbaa !32
  %299 = fmul double 7.500000e+01, %298
  store double %299, ptr %28, align 8, !tbaa !9
  %300 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %301 = getelementptr inbounds %class.InputParameter, ptr %300, i32 0, i32 13
  %302 = load double, ptr %301, align 8, !tbaa !32
  %303 = fmul double 1.000000e+02, %302
  store double %303, ptr %29, align 8, !tbaa !9
  %304 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %305 = getelementptr inbounds %class.InputParameter, ptr %304, i32 0, i32 13
  %306 = load double, ptr %305, align 8, !tbaa !32
  %307 = fmul double 6.250000e+01, %306
  store double %307, ptr %32, align 8, !tbaa !9
  %308 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %309 = getelementptr inbounds %class.InputParameter, ptr %308, i32 0, i32 13
  %310 = load double, ptr %309, align 8, !tbaa !32
  %311 = fmul double 6.250000e+01, %310
  store double %311, ptr %33, align 8, !tbaa !9
  %312 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %313 = getelementptr inbounds %class.InputParameter, ptr %312, i32 0, i32 13
  %314 = load double, ptr %313, align 8, !tbaa !32
  %315 = fmul double 6.250000e+00, %314
  store double %315, ptr %36, align 8, !tbaa !9
  %316 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %317 = getelementptr inbounds %class.InputParameter, ptr %316, i32 0, i32 13
  %318 = load double, ptr %317, align 8, !tbaa !32
  %319 = fmul double 1.250000e+01, %318
  store double %319, ptr %37, align 8, !tbaa !9
  %320 = load double, ptr %27, align 8, !tbaa !9
  store double %320, ptr %40, align 8, !tbaa !9
  %321 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !35
  %322 = load double, ptr %60, align 8, !tbaa !9
  %323 = fmul double %321, %322
  store double %323, ptr %41, align 8, !tbaa !9
  br label %324

324:                                              ; preds = %217, %104
  %325 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %326 = getelementptr inbounds %class.Subarray, ptr %325, i32 0, i32 4
  %327 = load i32, ptr %326, align 8, !tbaa !38
  %328 = sitofp i32 %327 to double
  %329 = fdiv double %328, 2.000000e+00
  %330 = call double @llvm.ceil.f64(double %329)
  %331 = fptosi double %330 to i32
  store i32 %331, ptr %47, align 4, !tbaa !39
  %332 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %333 = getelementptr inbounds %class.Subarray, ptr %332, i32 0, i32 4
  %334 = load i32, ptr %333, align 8, !tbaa !38
  %335 = sitofp i32 %334 to double
  %336 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 34), align 8, !tbaa !36
  %337 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 35), align 8, !tbaa !40
  %338 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %336, double %337)
  %339 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %340 = load i8, ptr %339, align 8, !tbaa !28, !range !29, !noundef !30
  %341 = trunc i8 %340 to i1
  %342 = call noundef double @_Z6gate_Cddbbb(double noundef %338, double noundef 0.000000e+00, i1 noundef zeroext %341, i1 noundef zeroext false, i1 noundef zeroext false)
  %343 = fmul double %335, %342
  store double %343, ptr %48, align 8, !tbaa !9
  %344 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %345 = getelementptr inbounds %class.Subarray, ptr %344, i32 0, i32 4
  %346 = load i32, ptr %345, align 8, !tbaa !38
  %347 = sitofp i32 %346 to double
  %348 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 54
  %349 = getelementptr inbounds %class.Area, ptr %348, i32 0, i32 0
  %350 = load double, ptr %349, align 8, !tbaa !41
  %351 = fmul double %347, %350
  %352 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 2), align 8, !tbaa !42
  %353 = fmul double %351, %352
  store double %353, ptr %49, align 8, !tbaa !9
  %354 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %355 = getelementptr inbounds %class.Subarray, ptr %354, i32 0, i32 4
  %356 = load i32, ptr %355, align 8, !tbaa !38
  %357 = sitofp i32 %356 to double
  %358 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 54
  %359 = getelementptr inbounds %class.Area, ptr %358, i32 0, i32 0
  %360 = load double, ptr %359, align 8, !tbaa !41
  %361 = fmul double %357, %360
  %362 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 1), align 8, !tbaa !43
  %363 = fmul double %361, %362
  store double %363, ptr %50, align 8, !tbaa !9
  %364 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 768) #9
  %365 = load double, ptr %48, align 8, !tbaa !9
  %366 = load double, ptr %49, align 8, !tbaa !9
  %367 = load double, ptr %50, align 8, !tbaa !9
  %368 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %369 = load i8, ptr %368, align 8, !tbaa !28, !range !29, !noundef !30
  %370 = trunc i8 %369 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %364, double noundef %365, double noundef %366, double noundef %367, i1 noundef zeroext %370)
          to label %371 unwind label %947

371:                                              ; preds = %324
  %372 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 18
  store ptr %364, ptr %372, align 8, !tbaa !44
  %373 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %374 = getelementptr inbounds %class.Subarray, ptr %373, i32 0, i32 2
  %375 = load i32, ptr %374, align 8, !tbaa !45
  %376 = add i32 %375, 1
  %377 = uitofp i32 %376 to double
  %378 = load double, ptr %27, align 8, !tbaa !9
  %379 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %380 = load i8, ptr %379, align 8, !tbaa !28, !range !29, !noundef !30
  %381 = trunc i8 %380 to i1
  %382 = call noundef double @_Z6gate_Cddbbb(double noundef %378, double noundef 0.000000e+00, i1 noundef zeroext %381, i1 noundef zeroext false, i1 noundef zeroext false)
  %383 = fmul double %377, %382
  store double %383, ptr %48, align 8, !tbaa !9
  %384 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %385 = getelementptr inbounds %class.Subarray, ptr %384, i32 0, i32 2
  %386 = load i32, ptr %385, align 8, !tbaa !45
  %387 = add i32 %386, 1
  %388 = uitofp i32 %387 to double
  %389 = load double, ptr %44, align 8, !tbaa !9
  %390 = fmul double %388, %389
  store double %390, ptr %49, align 8, !tbaa !9
  %391 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %392 = getelementptr inbounds %class.Subarray, ptr %391, i32 0, i32 2
  %393 = load i32, ptr %392, align 8, !tbaa !45
  %394 = add i32 %393, 1
  %395 = uitofp i32 %394 to double
  %396 = load double, ptr %45, align 8, !tbaa !9
  %397 = fmul double %395, %396
  store double %397, ptr %50, align 8, !tbaa !9
  %398 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 768) #9
  %399 = load double, ptr %48, align 8, !tbaa !9
  %400 = load double, ptr %49, align 8, !tbaa !9
  %401 = load double, ptr %50, align 8, !tbaa !9
  %402 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %403 = load i8, ptr %402, align 8, !tbaa !28, !range !29, !noundef !30
  %404 = trunc i8 %403 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %398, double noundef %399, double noundef %400, double noundef %401, i1 noundef zeroext %404)
          to label %405 unwind label %951

405:                                              ; preds = %371
  %406 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 19
  store ptr %398, ptr %406, align 8, !tbaa !46
  %407 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 18
  %408 = load ptr, ptr %407, align 8, !tbaa !44
  %409 = call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %408, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  %410 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 34), align 8, !tbaa !36
  %411 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %412 = load i8, ptr %411, align 8, !tbaa !28, !range !29, !noundef !30
  %413 = trunc i8 %412 to i1
  %414 = call noundef double @_Z7tr_R_ondiibbb(double noundef %410, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %413, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %414, ptr %64, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #8
  %415 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 54
  %416 = getelementptr inbounds %class.Area, ptr %415, i32 0, i32 1
  %417 = load double, ptr %416, align 8, !tbaa !47
  %418 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 1), align 8, !tbaa !18
  %419 = fmul double %417, %418
  store double %419, ptr %65, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #8
  %420 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %421 = getelementptr inbounds %class.Subarray, ptr %420, i32 0, i32 2
  %422 = load i32, ptr %421, align 8, !tbaa !45
  %423 = add i32 %422, 1
  %424 = uitofp i32 %423 to double
  %425 = load double, ptr %65, align 8, !tbaa !9
  %426 = fmul double %424, %425
  store double %426, ptr %66, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #8
  %427 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %428 = getelementptr inbounds %class.Subarray, ptr %427, i32 0, i32 16
  %429 = load double, ptr %428, align 8, !tbaa !48
  store double %429, ptr %67, align 8, !tbaa !9
  %430 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 18
  %431 = load ptr, ptr %430, align 8, !tbaa !44
  %432 = getelementptr inbounds %class.Driver, ptr %431, i32 0, i32 8
  %433 = load double, ptr %432, align 8, !tbaa !49
  %434 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 5), align 8, !tbaa !51
  %435 = call double @log(double noundef %434) #8
  %436 = load double, ptr %64, align 8, !tbaa !9
  %437 = load double, ptr %67, align 8, !tbaa !9
  %438 = load double, ptr %66, align 8, !tbaa !9
  %439 = load double, ptr %67, align 8, !tbaa !9
  %440 = fmul double %438, %439
  %441 = fdiv double %440, 2.000000e+00
  %442 = call double @llvm.fmuladd.f64(double %436, double %437, double %441)
  %443 = call double @llvm.fmuladd.f64(double %435, double %442, double %433)
  %444 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 40
  store double %443, ptr %444, align 8, !tbaa !52
  %445 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 19
  %446 = load ptr, ptr %445, align 8, !tbaa !46
  %447 = load double, ptr %4, align 8, !tbaa !9
  %448 = call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %446, double noundef %447)
  store double %448, ptr %5, align 8, !tbaa !9
  %449 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 19
  %450 = load ptr, ptr %449, align 8, !tbaa !46
  %451 = getelementptr inbounds %class.Driver, ptr %450, i32 0, i32 8
  %452 = load double, ptr %451, align 8, !tbaa !49
  %453 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 39
  %454 = load double, ptr %453, align 8, !tbaa !19
  %455 = fadd double %454, %452
  store double %455, ptr %453, align 8, !tbaa !19
  %456 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %457 = getelementptr inbounds %class.Subarray, ptr %456, i32 0, i32 2
  %458 = load i32, ptr %457, align 8, !tbaa !45
  %459 = add i32 %458, 1
  %460 = uitofp i32 %459 to double
  %461 = load double, ptr %26, align 8, !tbaa !9
  %462 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %463 = load i8, ptr %462, align 8, !tbaa !28, !range !29, !noundef !30
  %464 = trunc i8 %463 to i1
  %465 = call noundef double @_Z6gate_Cddbbb(double noundef %461, double noundef 0.000000e+00, i1 noundef zeroext %464, i1 noundef zeroext false, i1 noundef zeroext false)
  %466 = fmul double %460, %465
  store double %466, ptr %48, align 8, !tbaa !9
  %467 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %468 = getelementptr inbounds %class.Subarray, ptr %467, i32 0, i32 2
  %469 = load i32, ptr %468, align 8, !tbaa !45
  %470 = add i32 %469, 1
  %471 = uitofp i32 %470 to double
  %472 = load double, ptr %44, align 8, !tbaa !9
  %473 = fmul double %471, %472
  store double %473, ptr %49, align 8, !tbaa !9
  %474 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %475 = getelementptr inbounds %class.Subarray, ptr %474, i32 0, i32 2
  %476 = load i32, ptr %475, align 8, !tbaa !45
  %477 = add i32 %476, 1
  %478 = uitofp i32 %477 to double
  %479 = load double, ptr %45, align 8, !tbaa !9
  %480 = fmul double %478, %479
  store double %480, ptr %50, align 8, !tbaa !9
  %481 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 768) #9
  %482 = load double, ptr %48, align 8, !tbaa !9
  %483 = load double, ptr %49, align 8, !tbaa !9
  %484 = load double, ptr %50, align 8, !tbaa !9
  %485 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %486 = load i8, ptr %485, align 8, !tbaa !28, !range !29, !noundef !30
  %487 = trunc i8 %486 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %481, double noundef %482, double noundef %483, double noundef %484, i1 noundef zeroext %487)
          to label %488 unwind label %955

488:                                              ; preds = %405
  %489 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 17
  store ptr %481, ptr %489, align 8, !tbaa !53
  %490 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 17
  %491 = load ptr, ptr %490, align 8, !tbaa !53
  %492 = call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %491, double noundef 0.000000e+00)
  %493 = load double, ptr %27, align 8, !tbaa !9
  %494 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %495 = load i8, ptr %494, align 8, !tbaa !28, !range !29, !noundef !30
  %496 = trunc i8 %495 to i1
  %497 = call noundef double @_Z7tr_R_ondiibbb(double noundef %493, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %496, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %497, ptr %10, align 8, !tbaa !9
  %498 = load i32, ptr %47, align 4, !tbaa !39
  %499 = sitofp i32 %498 to double
  %500 = load double, ptr %27, align 8, !tbaa !9
  %501 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %502 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %503 = load i8, ptr %502, align 8, !tbaa !28, !range !29, !noundef !30
  %504 = trunc i8 %503 to i1
  %505 = call noundef double @_Z8drain_C_diiidbbb(double noundef %500, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %501, i1 noundef zeroext %504, i1 noundef zeroext false, i1 noundef zeroext false)
  %506 = load double, ptr %26, align 8, !tbaa !9
  %507 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %508 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %509 = load i8, ptr %508, align 8, !tbaa !28, !range !29, !noundef !30
  %510 = trunc i8 %509 to i1
  %511 = call noundef double @_Z8drain_C_diiidbbb(double noundef %506, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %507, i1 noundef zeroext %510, i1 noundef zeroext false, i1 noundef zeroext false)
  %512 = load i32, ptr %47, align 4, !tbaa !39
  %513 = sitofp i32 %512 to double
  %514 = fdiv double %511, %513
  %515 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %505, double %514)
  %516 = fmul double %499, %515
  store double %516, ptr %9, align 8, !tbaa !9
  %517 = load double, ptr %42, align 8, !tbaa !9
  %518 = load i32, ptr %47, align 4, !tbaa !39
  %519 = sitofp i32 %518 to double
  %520 = fmul double %517, %519
  store double %520, ptr %11, align 8, !tbaa !9
  %521 = load double, ptr %43, align 8, !tbaa !9
  %522 = load i32, ptr %47, align 4, !tbaa !39
  %523 = sitofp i32 %522 to double
  %524 = fmul double %521, %523
  store double %524, ptr %7, align 8, !tbaa !9
  %525 = load double, ptr %32, align 8, !tbaa !9
  %526 = load double, ptr %33, align 8, !tbaa !9
  %527 = fadd double %525, %526
  %528 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %529 = load i8, ptr %528, align 8, !tbaa !28, !range !29, !noundef !30
  %530 = trunc i8 %529 to i1
  %531 = call noundef double @_Z6gate_Cddbbb(double noundef %527, double noundef 0.000000e+00, i1 noundef zeroext %530, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %531, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %532 = load double, ptr %26, align 8, !tbaa !9
  %533 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %534 = load i8, ptr %533, align 8, !tbaa !28, !range !29, !noundef !30
  %535 = trunc i8 %534 to i1
  %536 = call noundef double @_Z7tr_R_ondiibbb(double noundef %532, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %535, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %536, ptr %68, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #8
  %537 = load double, ptr %7, align 8, !tbaa !9
  store double %537, ptr %69, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #8
  %538 = load double, ptr %11, align 8, !tbaa !9
  %539 = load double, ptr %9, align 8, !tbaa !9
  %540 = fadd double %538, %539
  store double %540, ptr %70, align 8, !tbaa !9
  %541 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 17
  %542 = load ptr, ptr %541, align 8, !tbaa !53
  %543 = getelementptr inbounds %class.Driver, ptr %542, i32 0, i32 8
  %544 = load double, ptr %543, align 8, !tbaa !49
  %545 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 5), align 8, !tbaa !51
  %546 = call double @log(double noundef %545) #8
  %547 = load double, ptr %68, align 8, !tbaa !9
  %548 = load double, ptr %70, align 8, !tbaa !9
  %549 = load double, ptr %69, align 8, !tbaa !9
  %550 = load double, ptr %70, align 8, !tbaa !9
  %551 = fmul double %549, %550
  %552 = fdiv double %551, 2.000000e+00
  %553 = call double @llvm.fmuladd.f64(double %547, double %548, double %552)
  %554 = call double @llvm.fmuladd.f64(double %546, double %553, double %544)
  %555 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 41
  store double %554, ptr %555, align 8, !tbaa !55
  %556 = load double, ptr %10, align 8, !tbaa !9
  %557 = load double, ptr %9, align 8, !tbaa !9
  %558 = load double, ptr %11, align 8, !tbaa !9
  %559 = fdiv double %558, 2.000000e+00
  %560 = fadd double %557, %559
  %561 = load double, ptr %12, align 8, !tbaa !9
  %562 = fadd double %560, %561
  %563 = load double, ptr %7, align 8, !tbaa !9
  %564 = load double, ptr %11, align 8, !tbaa !9
  %565 = fdiv double %564, 2.000000e+00
  %566 = load double, ptr %12, align 8, !tbaa !9
  %567 = fadd double %565, %566
  %568 = fmul double %563, %567
  %569 = call double @llvm.fmuladd.f64(double %556, double %562, double %568)
  store double %569, ptr %8, align 8, !tbaa !9
  %570 = load double, ptr %5, align 8, !tbaa !9
  %571 = load double, ptr %8, align 8, !tbaa !9
  %572 = call noundef double @_Z8horowitzddddi(double noundef %570, double noundef %571, double noundef 3.040000e-01, double noundef 4.200000e-01, i32 noundef 0)
  store double %572, ptr %6, align 8, !tbaa !9
  %573 = load double, ptr %6, align 8, !tbaa !9
  %574 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 39
  %575 = load double, ptr %574, align 8, !tbaa !19
  %576 = fadd double %575, %573
  store double %576, ptr %574, align 8, !tbaa !19
  %577 = load double, ptr %6, align 8, !tbaa !9
  %578 = fdiv double %577, 4.200000e-01
  store double %578, ptr %5, align 8, !tbaa !9
  %579 = load double, ptr %9, align 8, !tbaa !9
  %580 = load double, ptr %11, align 8, !tbaa !9
  %581 = fadd double %579, %580
  %582 = load double, ptr %12, align 8, !tbaa !9
  %583 = fadd double %581, %582
  %584 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %585 = getelementptr inbounds %class.Subarray, ptr %584, i32 0, i32 2
  %586 = load i32, ptr %585, align 8, !tbaa !45
  %587 = add i32 %586, 1
  %588 = uitofp i32 %587 to double
  %589 = fmul double %583, %588
  %590 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %591 = fmul double %589, %590
  %592 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %593 = fmul double %591, %592
  %594 = load double, ptr %46, align 8, !tbaa !9
  %595 = call double @llvm.fmuladd.f64(double %593, double 2.000000e+00, double %594)
  store double %595, ptr %46, align 8, !tbaa !9
  %596 = load double, ptr %32, align 8, !tbaa !9
  %597 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %598 = load i8, ptr %597, align 8, !tbaa !28, !range !29, !noundef !30
  %599 = trunc i8 %598 to i1
  %600 = call noundef double @_Z7tr_R_ondiibbb(double noundef %596, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %599, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %600, ptr %10, align 8, !tbaa !9
  %601 = load double, ptr %32, align 8, !tbaa !9
  %602 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %603 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %604 = load i8, ptr %603, align 8, !tbaa !28, !range !29, !noundef !30
  %605 = trunc i8 %604 to i1
  %606 = call noundef double @_Z8drain_C_diiidbbb(double noundef %601, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %602, i1 noundef zeroext %605, i1 noundef zeroext false, i1 noundef zeroext false)
  %607 = load double, ptr %33, align 8, !tbaa !9
  %608 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %609 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %610 = load i8, ptr %609, align 8, !tbaa !28, !range !29, !noundef !30
  %611 = trunc i8 %610 to i1
  %612 = call noundef double @_Z8drain_C_diiidbbb(double noundef %607, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %608, i1 noundef zeroext %611, i1 noundef zeroext false, i1 noundef zeroext false)
  %613 = call double @llvm.fmuladd.f64(double %612, double 2.000000e+00, double %606)
  store double %613, ptr %9, align 8, !tbaa !9
  %614 = load double, ptr %28, align 8, !tbaa !9
  %615 = load double, ptr %29, align 8, !tbaa !9
  %616 = fadd double %614, %615
  %617 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %618 = load i8, ptr %617, align 8, !tbaa !28, !range !29, !noundef !30
  %619 = trunc i8 %618 to i1
  %620 = call noundef double @_Z6gate_Cddbbb(double noundef %616, double noundef 0.000000e+00, i1 noundef zeroext %619, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %620, ptr %12, align 8, !tbaa !9
  %621 = load double, ptr %10, align 8, !tbaa !9
  %622 = load double, ptr %9, align 8, !tbaa !9
  %623 = load double, ptr %12, align 8, !tbaa !9
  %624 = fadd double %622, %623
  %625 = fmul double %621, %624
  store double %625, ptr %8, align 8, !tbaa !9
  %626 = load double, ptr %5, align 8, !tbaa !9
  %627 = load double, ptr %8, align 8, !tbaa !9
  %628 = call noundef double @_Z8horowitzddddi(double noundef %626, double noundef %627, double noundef 4.200000e-01, double noundef 4.130000e-01, i32 noundef 1)
  store double %628, ptr %6, align 8, !tbaa !9
  %629 = load double, ptr %6, align 8, !tbaa !9
  %630 = fdiv double %629, 5.870000e-01
  store double %630, ptr %5, align 8, !tbaa !9
  %631 = load double, ptr %6, align 8, !tbaa !9
  %632 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 39
  %633 = load double, ptr %632, align 8, !tbaa !19
  %634 = fadd double %633, %631
  store double %634, ptr %632, align 8, !tbaa !19
  %635 = load double, ptr %9, align 8, !tbaa !9
  %636 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %637 = getelementptr inbounds %class.Subarray, ptr %636, i32 0, i32 2
  %638 = load i32, ptr %637, align 8, !tbaa !45
  %639 = add i32 %638, 1
  %640 = uitofp i32 %639 to double
  %641 = load double, ptr %12, align 8, !tbaa !9
  %642 = fmul double %641, 2.000000e+00
  %643 = call double @llvm.fmuladd.f64(double %635, double %640, double %642)
  %644 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %645 = fmul double %643, %644
  %646 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %647 = load double, ptr %46, align 8, !tbaa !9
  %648 = call double @llvm.fmuladd.f64(double %645, double %646, double %647)
  store double %648, ptr %46, align 8, !tbaa !9
  %649 = load double, ptr %28, align 8, !tbaa !9
  %650 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %651 = load i8, ptr %650, align 8, !tbaa !28, !range !29, !noundef !30
  %652 = trunc i8 %651 to i1
  %653 = call noundef double @_Z7tr_R_ondiibbb(double noundef %649, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %652, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %653, ptr %10, align 8, !tbaa !9
  %654 = load double, ptr %28, align 8, !tbaa !9
  %655 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %656 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %657 = load i8, ptr %656, align 8, !tbaa !28, !range !29, !noundef !30
  %658 = trunc i8 %657 to i1
  %659 = call noundef double @_Z8drain_C_diiidbbb(double noundef %654, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %655, i1 noundef zeroext %658, i1 noundef zeroext false, i1 noundef zeroext false)
  %660 = load double, ptr %29, align 8, !tbaa !9
  %661 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %662 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %663 = load i8, ptr %662, align 8, !tbaa !28, !range !29, !noundef !30
  %664 = trunc i8 %663 to i1
  %665 = call noundef double @_Z8drain_C_diiidbbb(double noundef %660, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %661, i1 noundef zeroext %664, i1 noundef zeroext false, i1 noundef zeroext false)
  %666 = fadd double %659, %665
  store double %666, ptr %9, align 8, !tbaa !9
  %667 = load double, ptr %42, align 8, !tbaa !9
  %668 = load i32, ptr %47, align 4, !tbaa !39
  %669 = sitofp i32 %668 to double
  %670 = load double, ptr %44, align 8, !tbaa !9
  %671 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %672 = getelementptr inbounds %class.Subarray, ptr %671, i32 0, i32 2
  %673 = load i32, ptr %672, align 8, !tbaa !45
  %674 = add i32 %673, 1
  %675 = uitofp i32 %674 to double
  %676 = fmul double %670, %675
  %677 = fdiv double %676, 2.000000e+00
  %678 = call double @llvm.fmuladd.f64(double %667, double %669, double %677)
  store double %678, ptr %11, align 8, !tbaa !9
  %679 = load double, ptr %43, align 8, !tbaa !9
  %680 = load i32, ptr %47, align 4, !tbaa !39
  %681 = sitofp i32 %680 to double
  %682 = load double, ptr %45, align 8, !tbaa !9
  %683 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %684 = getelementptr inbounds %class.Subarray, ptr %683, i32 0, i32 2
  %685 = load i32, ptr %684, align 8, !tbaa !45
  %686 = add i32 %685, 1
  %687 = uitofp i32 %686 to double
  %688 = fmul double %682, %687
  %689 = fdiv double %688, 2.000000e+00
  %690 = call double @llvm.fmuladd.f64(double %679, double %681, double %689)
  store double %690, ptr %7, align 8, !tbaa !9
  %691 = load double, ptr %36, align 8, !tbaa !9
  %692 = load double, ptr %37, align 8, !tbaa !9
  %693 = fadd double %691, %692
  %694 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %695 = load i8, ptr %694, align 8, !tbaa !28, !range !29, !noundef !30
  %696 = trunc i8 %695 to i1
  %697 = call noundef double @_Z6gate_Cddbbb(double noundef %693, double noundef 0.000000e+00, i1 noundef zeroext %696, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %697, ptr %12, align 8, !tbaa !9
  %698 = load double, ptr %10, align 8, !tbaa !9
  %699 = load double, ptr %9, align 8, !tbaa !9
  %700 = load double, ptr %11, align 8, !tbaa !9
  %701 = fadd double %699, %700
  %702 = load double, ptr %12, align 8, !tbaa !9
  %703 = fadd double %701, %702
  %704 = load double, ptr %7, align 8, !tbaa !9
  %705 = load double, ptr %11, align 8, !tbaa !9
  %706 = fdiv double %705, 2.000000e+00
  %707 = load double, ptr %12, align 8, !tbaa !9
  %708 = fadd double %706, %707
  %709 = fmul double %704, %708
  %710 = call double @llvm.fmuladd.f64(double %698, double %703, double %709)
  store double %710, ptr %8, align 8, !tbaa !9
  %711 = load double, ptr %5, align 8, !tbaa !9
  %712 = load double, ptr %8, align 8, !tbaa !9
  %713 = call noundef double @_Z8horowitzddddi(double noundef %711, double noundef %712, double noundef 4.130000e-01, double noundef 4.050000e-01, i32 noundef 0)
  store double %713, ptr %6, align 8, !tbaa !9
  %714 = load double, ptr %6, align 8, !tbaa !9
  %715 = fdiv double %714, 4.050000e-01
  store double %715, ptr %5, align 8, !tbaa !9
  %716 = load double, ptr %6, align 8, !tbaa !9
  %717 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 39
  %718 = load double, ptr %717, align 8, !tbaa !19
  %719 = fadd double %718, %716
  store double %719, ptr %717, align 8, !tbaa !19
  %720 = load double, ptr %9, align 8, !tbaa !9
  %721 = load double, ptr %11, align 8, !tbaa !9
  %722 = fadd double %720, %721
  %723 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %724 = getelementptr inbounds %class.Subarray, ptr %723, i32 0, i32 2
  %725 = load i32, ptr %724, align 8, !tbaa !45
  %726 = uitofp i32 %725 to double
  %727 = load double, ptr %12, align 8, !tbaa !9
  %728 = call double @llvm.fmuladd.f64(double %726, double %727, double %722)
  %729 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %730 = fmul double %728, %729
  %731 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %732 = load double, ptr %46, align 8, !tbaa !9
  %733 = call double @llvm.fmuladd.f64(double %730, double %731, double %732)
  store double %733, ptr %46, align 8, !tbaa !9
  %734 = load double, ptr %40, align 8, !tbaa !9
  %735 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %736 = load i8, ptr %735, align 8, !tbaa !28, !range !29, !noundef !30
  %737 = trunc i8 %736 to i1
  %738 = call noundef double @_Z6gate_Cddbbb(double noundef %734, double noundef 0.000000e+00, i1 noundef zeroext %737, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %738, ptr %48, align 8, !tbaa !9
  %739 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %740 = getelementptr inbounds %class.Subarray, ptr %739, i32 0, i32 11
  %741 = load double, ptr %740, align 8, !tbaa !57
  store double %741, ptr %49, align 8, !tbaa !9
  %742 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %743 = getelementptr inbounds %class.Subarray, ptr %742, i32 0, i32 14
  %744 = load double, ptr %743, align 8, !tbaa !58
  store double %744, ptr %50, align 8, !tbaa !9
  %745 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 768) #9
  %746 = load double, ptr %48, align 8, !tbaa !9
  %747 = load double, ptr %49, align 8, !tbaa !9
  %748 = load double, ptr %50, align 8, !tbaa !9
  %749 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %750 = load i8, ptr %749, align 8, !tbaa !28, !range !29, !noundef !30
  %751 = trunc i8 %750 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %745, double noundef %746, double noundef %747, double noundef %748, i1 noundef zeroext %751)
          to label %752 unwind label %959

752:                                              ; preds = %488
  %753 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 20
  store ptr %745, ptr %753, align 8, !tbaa !59
  %754 = load double, ptr %36, align 8, !tbaa !9
  %755 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %756 = load i8, ptr %755, align 8, !tbaa !28, !range !29, !noundef !30
  %757 = trunc i8 %756 to i1
  %758 = call noundef double @_Z7tr_R_ondiibbb(double noundef %754, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %757, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %758, ptr %10, align 8, !tbaa !9
  %759 = load double, ptr %36, align 8, !tbaa !9
  %760 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %761 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %762 = load i8, ptr %761, align 8, !tbaa !28, !range !29, !noundef !30
  %763 = trunc i8 %762 to i1
  %764 = call noundef double @_Z8drain_C_diiidbbb(double noundef %759, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %760, i1 noundef zeroext %763, i1 noundef zeroext false, i1 noundef zeroext false)
  %765 = load double, ptr %37, align 8, !tbaa !9
  %766 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %767 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %768 = load i8, ptr %767, align 8, !tbaa !28, !range !29, !noundef !30
  %769 = trunc i8 %768 to i1
  %770 = call noundef double @_Z8drain_C_diiidbbb(double noundef %765, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %766, i1 noundef zeroext %769, i1 noundef zeroext false, i1 noundef zeroext false)
  %771 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %764, double %770)
  store double %771, ptr %9, align 8, !tbaa !9
  %772 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 20
  %773 = load ptr, ptr %772, align 8, !tbaa !59
  %774 = getelementptr inbounds %class.Driver, ptr %773, i32 0, i32 3
  %775 = getelementptr inbounds [20 x double], ptr %774, i64 0, i64 0
  %776 = load double, ptr %775, align 8, !tbaa !9
  %777 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 20
  %778 = load ptr, ptr %777, align 8, !tbaa !59
  %779 = getelementptr inbounds %class.Driver, ptr %778, i32 0, i32 4
  %780 = getelementptr inbounds [20 x double], ptr %779, i64 0, i64 0
  %781 = load double, ptr %780, align 8, !tbaa !9
  %782 = fadd double %776, %781
  %783 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %784 = load i8, ptr %783, align 8, !tbaa !28, !range !29, !noundef !30
  %785 = trunc i8 %784 to i1
  %786 = call noundef double @_Z6gate_Cddbbb(double noundef %782, double noundef 0.000000e+00, i1 noundef zeroext %785, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %786, ptr %12, align 8, !tbaa !9
  %787 = load double, ptr %10, align 8, !tbaa !9
  %788 = load double, ptr %9, align 8, !tbaa !9
  %789 = load double, ptr %12, align 8, !tbaa !9
  %790 = fadd double %788, %789
  %791 = fmul double %787, %790
  store double %791, ptr %8, align 8, !tbaa !9
  %792 = load double, ptr %5, align 8, !tbaa !9
  %793 = load double, ptr %8, align 8, !tbaa !9
  %794 = call noundef double @_Z8horowitzddddi(double noundef %792, double noundef %793, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %794, ptr %6, align 8, !tbaa !9
  %795 = load double, ptr %6, align 8, !tbaa !9
  %796 = fdiv double %795, 5.000000e-01
  store double %796, ptr %5, align 8, !tbaa !9
  %797 = load double, ptr %6, align 8, !tbaa !9
  %798 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 39
  %799 = load double, ptr %798, align 8, !tbaa !19
  %800 = fadd double %799, %797
  store double %800, ptr %798, align 8, !tbaa !19
  %801 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 20
  %802 = load ptr, ptr %801, align 8, !tbaa !59
  %803 = load double, ptr %5, align 8, !tbaa !9
  %804 = call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %802, double noundef %803)
  store double %804, ptr %5, align 8, !tbaa !9
  %805 = load double, ptr %9, align 8, !tbaa !9
  %806 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %807 = fmul double %805, %806
  %808 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %809 = load double, ptr %46, align 8, !tbaa !9
  %810 = call double @llvm.fmuladd.f64(double %807, double %808, double %809)
  store double %810, ptr %46, align 8, !tbaa !9
  %811 = load double, ptr %41, align 8, !tbaa !9
  %812 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %813 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %814 = load i8, ptr %813, align 8, !tbaa !28, !range !29, !noundef !30
  %815 = trunc i8 %814 to i1
  %816 = call noundef double @_Z8drain_C_diiidbbb(double noundef %811, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %812, i1 noundef zeroext %815, i1 noundef zeroext false, i1 noundef zeroext false)
  %817 = fmul double 2.000000e+00, %816
  store double %817, ptr %9, align 8, !tbaa !9
  %818 = load double, ptr %44, align 8, !tbaa !9
  %819 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %820 = getelementptr inbounds %class.Subarray, ptr %819, i32 0, i32 2
  %821 = load i32, ptr %820, align 8, !tbaa !45
  %822 = uitofp i32 %821 to double
  %823 = fmul double %818, %822
  store double %823, ptr %11, align 8, !tbaa !9
  %824 = load double, ptr %45, align 8, !tbaa !9
  %825 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %826 = getelementptr inbounds %class.Subarray, ptr %825, i32 0, i32 2
  %827 = load i32, ptr %826, align 8, !tbaa !45
  %828 = uitofp i32 %827 to double
  %829 = fmul double %824, %828
  store double %829, ptr %7, align 8, !tbaa !9
  %830 = load double, ptr %40, align 8, !tbaa !9
  %831 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %832 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %833 = load i8, ptr %832, align 8, !tbaa !28, !range !29, !noundef !30
  %834 = trunc i8 %833 to i1
  %835 = call noundef double @_Z8drain_C_diiidbbb(double noundef %830, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %831, i1 noundef zeroext %834, i1 noundef zeroext false, i1 noundef zeroext false)
  %836 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %837 = getelementptr inbounds %class.Subarray, ptr %836, i32 0, i32 2
  %838 = load i32, ptr %837, align 8, !tbaa !45
  %839 = uitofp i32 %838 to double
  %840 = fmul double %835, %839
  store double %840, ptr %12, align 8, !tbaa !9
  %841 = load double, ptr %41, align 8, !tbaa !9
  %842 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %843 = load i8, ptr %842, align 8, !tbaa !28, !range !29, !noundef !30
  %844 = trunc i8 %843 to i1
  %845 = call noundef double @_Z7tr_R_ondiibbb(double noundef %841, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %844, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %845, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %846 = load double, ptr %7, align 8, !tbaa !9
  store double %846, ptr %71, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %847 = load double, ptr %11, align 8, !tbaa !9
  %848 = load double, ptr %9, align 8, !tbaa !9
  %849 = fadd double %847, %848
  store double %849, ptr %72, align 8, !tbaa !9
  %850 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 5), align 8, !tbaa !51
  %851 = call double @log(double noundef %850) #8
  %852 = load double, ptr %10, align 8, !tbaa !9
  %853 = load double, ptr %72, align 8, !tbaa !9
  %854 = load double, ptr %71, align 8, !tbaa !9
  %855 = load double, ptr %72, align 8, !tbaa !9
  %856 = fmul double %854, %855
  %857 = fdiv double %856, 2.000000e+00
  %858 = call double @llvm.fmuladd.f64(double %852, double %853, double %857)
  %859 = fmul double %851, %858
  %860 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 43
  store double %859, ptr %860, align 8, !tbaa !60
  %861 = load double, ptr %9, align 8, !tbaa !9
  %862 = load double, ptr %11, align 8, !tbaa !9
  %863 = fadd double %861, %862
  %864 = load double, ptr %12, align 8, !tbaa !9
  %865 = fadd double %863, %864
  %866 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %867 = fmul double %865, %866
  %868 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %869 = load double, ptr %46, align 8, !tbaa !9
  %870 = call double @llvm.fmuladd.f64(double %867, double %868, double %869)
  store double %870, ptr %46, align 8, !tbaa !9
  %871 = load double, ptr %40, align 8, !tbaa !9
  %872 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %873 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %874 = load i8, ptr %873, align 8, !tbaa !28, !range !29, !noundef !30
  %875 = trunc i8 %874 to i1
  %876 = call noundef double @_Z8drain_C_diiidbbb(double noundef %871, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %872, i1 noundef zeroext %875, i1 noundef zeroext false, i1 noundef zeroext false)
  %877 = fmul double 2.000000e+00, %876
  store double %877, ptr %9, align 8, !tbaa !9
  %878 = load double, ptr %44, align 8, !tbaa !9
  %879 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %880 = getelementptr inbounds %class.Subarray, ptr %879, i32 0, i32 2
  %881 = load i32, ptr %880, align 8, !tbaa !45
  %882 = uitofp i32 %881 to double
  %883 = fmul double %878, %882
  store double %883, ptr %11, align 8, !tbaa !9
  %884 = load double, ptr %45, align 8, !tbaa !9
  %885 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %886 = getelementptr inbounds %class.Subarray, ptr %885, i32 0, i32 2
  %887 = load i32, ptr %886, align 8, !tbaa !45
  %888 = uitofp i32 %887 to double
  %889 = fmul double %884, %888
  store double %889, ptr %7, align 8, !tbaa !9
  %890 = load double, ptr %40, align 8, !tbaa !9
  %891 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !54
  %892 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %893 = load i8, ptr %892, align 8, !tbaa !28, !range !29, !noundef !30
  %894 = trunc i8 %893 to i1
  %895 = call noundef double @_Z8drain_C_diiidbbb(double noundef %890, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %891, i1 noundef zeroext %894, i1 noundef zeroext false, i1 noundef zeroext false)
  %896 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %897 = getelementptr inbounds %class.Subarray, ptr %896, i32 0, i32 2
  %898 = load i32, ptr %897, align 8, !tbaa !45
  %899 = uitofp i32 %898 to double
  %900 = fmul double %895, %899
  store double %900, ptr %12, align 8, !tbaa !9
  %901 = load double, ptr %40, align 8, !tbaa !9
  %902 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 55
  %903 = load i8, ptr %902, align 8, !tbaa !28, !range !29, !noundef !30
  %904 = trunc i8 %903 to i1
  %905 = call noundef double @_Z7tr_R_ondiibbb(double noundef %901, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %904, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %905, ptr %10, align 8, !tbaa !9
  %906 = load double, ptr %10, align 8, !tbaa !9
  %907 = load double, ptr %9, align 8, !tbaa !9
  %908 = load double, ptr %11, align 8, !tbaa !9
  %909 = fdiv double %908, 2.000000e+00
  %910 = fadd double %907, %909
  %911 = load double, ptr %12, align 8, !tbaa !9
  %912 = fadd double %910, %911
  %913 = load double, ptr %7, align 8, !tbaa !9
  %914 = load double, ptr %11, align 8, !tbaa !9
  %915 = fdiv double %914, 2.000000e+00
  %916 = load double, ptr %12, align 8, !tbaa !9
  %917 = fadd double %915, %916
  %918 = fmul double %913, %917
  %919 = call double @llvm.fmuladd.f64(double %906, double %912, double %918)
  store double %919, ptr %8, align 8, !tbaa !9
  %920 = load double, ptr %8, align 8, !tbaa !9
  %921 = call noundef double @_Z8horowitzddddi(double noundef 0.000000e+00, double noundef %920, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 0)
  %922 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 44
  store double %921, ptr %922, align 8, !tbaa !61
  %923 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 56
  %924 = load i8, ptr %923, align 1, !tbaa !62, !range !29, !noundef !30
  %925 = trunc i8 %924 to i1
  br i1 %925, label %926, label %963

926:                                              ; preds = %752
  %927 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 20
  %928 = load ptr, ptr %927, align 8, !tbaa !59
  %929 = getelementptr inbounds %class.Driver, ptr %928, i32 0, i32 8
  %930 = load double, ptr %929, align 8, !tbaa !49
  %931 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 44
  %932 = load double, ptr %931, align 8, !tbaa !61
  %933 = fcmp ogt double %930, %932
  br i1 %933, label %934, label %939

934:                                              ; preds = %926
  %935 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 20
  %936 = load ptr, ptr %935, align 8, !tbaa !59
  %937 = getelementptr inbounds %class.Driver, ptr %936, i32 0, i32 8
  %938 = load double, ptr %937, align 8, !tbaa !49
  br label %942

939:                                              ; preds = %926
  %940 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 44
  %941 = load double, ptr %940, align 8, !tbaa !61
  br label %942

942:                                              ; preds = %939, %934
  %943 = phi double [ %938, %934 ], [ %941, %939 ]
  %944 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 39
  %945 = load double, ptr %944, align 8, !tbaa !19
  %946 = fadd double %945, %943
  store double %946, ptr %944, align 8, !tbaa !19
  br label %963

947:                                              ; preds = %324
  %948 = landingpad { ptr, i32 }
          cleanup
  %949 = extractvalue { ptr, i32 } %948, 0
  store ptr %949, ptr %62, align 8
  %950 = extractvalue { ptr, i32 } %948, 1
  store i32 %950, ptr %63, align 4
  call void @_ZdlPvm(ptr noundef %364, i64 noundef 768) #10
  br label %1218

951:                                              ; preds = %371
  %952 = landingpad { ptr, i32 }
          cleanup
  %953 = extractvalue { ptr, i32 } %952, 0
  store ptr %953, ptr %62, align 8
  %954 = extractvalue { ptr, i32 } %952, 1
  store i32 %954, ptr %63, align 4
  call void @_ZdlPvm(ptr noundef %398, i64 noundef 768) #10
  br label %1218

955:                                              ; preds = %405
  %956 = landingpad { ptr, i32 }
          cleanup
  %957 = extractvalue { ptr, i32 } %956, 0
  store ptr %957, ptr %62, align 8
  %958 = extractvalue { ptr, i32 } %956, 1
  store i32 %958, ptr %63, align 4
  call void @_ZdlPvm(ptr noundef %481, i64 noundef 768) #10
  br label %1217

959:                                              ; preds = %488
  %960 = landingpad { ptr, i32 }
          cleanup
  %961 = extractvalue { ptr, i32 } %960, 0
  store ptr %961, ptr %62, align 8
  %962 = extractvalue { ptr, i32 } %960, 1
  store i32 %962, ptr %63, align 4
  call void @_ZdlPvm(ptr noundef %745, i64 noundef 768) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  br label %1217

963:                                              ; preds = %942, %752
  %964 = load double, ptr %9, align 8, !tbaa !9
  %965 = load double, ptr %11, align 8, !tbaa !9
  %966 = fadd double %964, %965
  %967 = load double, ptr %12, align 8, !tbaa !9
  %968 = fadd double %966, %967
  %969 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %970 = fmul double %968, %969
  %971 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !56
  %972 = load double, ptr %46, align 8, !tbaa !9
  %973 = call double @llvm.fmuladd.f64(double %970, double %971, double %972)
  store double %973, ptr %46, align 8, !tbaa !9
  %974 = load double, ptr %46, align 8, !tbaa !9
  %975 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %976 = getelementptr inbounds %class.powerDef, ptr %975, i32 0, i32 2
  %977 = getelementptr inbounds %class.powerComponents, ptr %976, i32 0, i32 0
  store double %974, ptr %977, align 8, !tbaa !63
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %978 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 2), align 8, !tbaa !64
  %979 = call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %978, double noundef 0.000000e+00, i32 noundef 1, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  store double %979, ptr %73, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %980 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 2), align 8, !tbaa !64
  %981 = call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %980, double noundef 0.000000e+00, i32 noundef 2, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  store double %981, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #8
  %982 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 4), align 8, !tbaa !37
  %983 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 3), align 8, !tbaa !65
  %984 = call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %982, double noundef %983, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %985 = fmul double %984, 2.000000e+00
  store double %985, ptr %75, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  %986 = load double, ptr %27, align 8, !tbaa !9
  %987 = load double, ptr %27, align 8, !tbaa !9
  %988 = call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %986, double noundef %987, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %989 = fmul double %988, 2.000000e+00
  store double %989, ptr %76, align 8, !tbaa !9
  %990 = load double, ptr %75, align 8, !tbaa !9
  %991 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %992 = fmul double %990, %991
  store double %992, ptr %51, align 8, !tbaa !9
  %993 = load double, ptr %76, align 8, !tbaa !9
  %994 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %995 = fmul double %993, %994
  store double %995, ptr %55, align 8, !tbaa !9
  %996 = load double, ptr %73, align 8, !tbaa !9
  %997 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %998 = fmul double %996, %997
  store double %998, ptr %52, align 8, !tbaa !9
  %999 = load double, ptr %74, align 8, !tbaa !9
  %1000 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1001 = fmul double %999, %1000
  store double %1001, ptr %53, align 8, !tbaa !9
  store double 0.000000e+00, ptr %54, align 8, !tbaa !9
  %1002 = load double, ptr %51, align 8, !tbaa !9
  %1003 = load double, ptr %55, align 8, !tbaa !9
  %1004 = fadd double %1002, %1003
  %1005 = load double, ptr %52, align 8, !tbaa !9
  %1006 = fadd double %1004, %1005
  %1007 = load double, ptr %52, align 8, !tbaa !9
  %1008 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 75
  %1009 = load i32, ptr %1008, align 8, !tbaa !67
  %1010 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 77
  %1011 = load i32, ptr %1010, align 8, !tbaa !68
  %1012 = add nsw i32 %1009, %1011
  %1013 = sub nsw i32 %1012, 1
  %1014 = sitofp i32 %1013 to double
  %1015 = call double @llvm.fmuladd.f64(double %1007, double %1014, double %1006)
  %1016 = load double, ptr %53, align 8, !tbaa !9
  %1017 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 76
  %1018 = load i32, ptr %1017, align 4, !tbaa !69
  %1019 = sitofp i32 %1018 to double
  %1020 = call double @llvm.fmuladd.f64(double %1016, double %1019, double %1015)
  %1021 = load double, ptr %54, align 8, !tbaa !9
  %1022 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 78
  %1023 = load i32, ptr %1022, align 4, !tbaa !70
  %1024 = sitofp i32 %1023 to double
  %1025 = call double @llvm.fmuladd.f64(double %1021, double %1024, double %1020)
  %1026 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1027 = getelementptr inbounds %class.powerDef, ptr %1026, i32 0, i32 2
  %1028 = getelementptr inbounds %class.powerComponents, ptr %1027, i32 0, i32 1
  %1029 = load double, ptr %1028, align 8, !tbaa !71
  %1030 = fadd double %1029, %1025
  store double %1030, ptr %1028, align 8, !tbaa !71
  %1031 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1032 = getelementptr inbounds %class.Subarray, ptr %1031, i32 0, i32 2
  %1033 = load i32, ptr %1032, align 8, !tbaa !45
  %1034 = add i32 %1033, 1
  %1035 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1036 = getelementptr inbounds %class.Subarray, ptr %1035, i32 0, i32 4
  %1037 = load i32, ptr %1036, align 8, !tbaa !38
  %1038 = mul i32 %1034, %1037
  %1039 = uitofp i32 %1038 to double
  %1040 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1041 = getelementptr inbounds %class.powerDef, ptr %1040, i32 0, i32 2
  %1042 = getelementptr inbounds %class.powerComponents, ptr %1041, i32 0, i32 1
  %1043 = load double, ptr %1042, align 8, !tbaa !71
  %1044 = fmul double %1043, %1039
  store double %1044, ptr %1042, align 8, !tbaa !71
  %1045 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1046 = getelementptr inbounds %class.Subarray, ptr %1045, i32 0, i32 2
  %1047 = load i32, ptr %1046, align 8, !tbaa !45
  %1048 = add i32 %1047, 1
  %1049 = uitofp i32 %1048 to double
  %1050 = load double, ptr %26, align 8, !tbaa !9
  %1051 = call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef 0.000000e+00, double noundef %1050, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1052 = fmul double %1049, %1051
  %1053 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1054 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1055 = getelementptr inbounds %class.powerDef, ptr %1054, i32 0, i32 2
  %1056 = getelementptr inbounds %class.powerComponents, ptr %1055, i32 0, i32 1
  %1057 = load double, ptr %1056, align 8, !tbaa !71
  %1058 = call double @llvm.fmuladd.f64(double %1052, double %1053, double %1057)
  store double %1058, ptr %1056, align 8, !tbaa !71
  %1059 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1060 = getelementptr inbounds %class.Subarray, ptr %1059, i32 0, i32 2
  %1061 = load i32, ptr %1060, align 8, !tbaa !45
  %1062 = add i32 %1061, 1
  %1063 = uitofp i32 %1062 to double
  %1064 = load double, ptr %32, align 8, !tbaa !9
  %1065 = load double, ptr %33, align 8, !tbaa !9
  %1066 = call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1064, double noundef %1065, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1067 = fmul double %1063, %1066
  %1068 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1069 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1070 = getelementptr inbounds %class.powerDef, ptr %1069, i32 0, i32 2
  %1071 = getelementptr inbounds %class.powerComponents, ptr %1070, i32 0, i32 1
  %1072 = load double, ptr %1071, align 8, !tbaa !71
  %1073 = call double @llvm.fmuladd.f64(double %1067, double %1068, double %1072)
  store double %1073, ptr %1071, align 8, !tbaa !71
  %1074 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1075 = getelementptr inbounds %class.Subarray, ptr %1074, i32 0, i32 2
  %1076 = load i32, ptr %1075, align 8, !tbaa !45
  %1077 = add i32 %1076, 1
  %1078 = uitofp i32 %1077 to double
  %1079 = load double, ptr %36, align 8, !tbaa !9
  %1080 = load double, ptr %37, align 8, !tbaa !9
  %1081 = call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1079, double noundef %1080, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1082 = fmul double %1078, %1081
  %1083 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1084 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1085 = getelementptr inbounds %class.powerDef, ptr %1084, i32 0, i32 2
  %1086 = getelementptr inbounds %class.powerComponents, ptr %1085, i32 0, i32 1
  %1087 = load double, ptr %1086, align 8, !tbaa !71
  %1088 = call double @llvm.fmuladd.f64(double %1082, double %1083, double %1087)
  store double %1088, ptr %1086, align 8, !tbaa !71
  %1089 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1090 = getelementptr inbounds %class.powerDef, ptr %1089, i32 0, i32 2
  %1091 = getelementptr inbounds %class.powerComponents, ptr %1090, i32 0, i32 1
  %1092 = load double, ptr %1091, align 8, !tbaa !71
  %1093 = fadd double %1092, 0.000000e+00
  store double %1093, ptr %1091, align 8, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #8
  %1094 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 2), align 8, !tbaa !64
  %1095 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1094, double noundef 0.000000e+00, i32 noundef 1, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  store double %1095, ptr %77, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %1096 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 4), align 8, !tbaa !37
  %1097 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 3), align 8, !tbaa !65
  %1098 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1096, double noundef %1097, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %1099 = fmul double %1098, 2.000000e+00
  store double %1099, ptr %78, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #8
  %1100 = load double, ptr %27, align 8, !tbaa !9
  %1101 = load double, ptr %27, align 8, !tbaa !9
  %1102 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1100, double noundef %1101, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %1103 = fmul double %1102, 2.000000e+00
  store double %1103, ptr %79, align 8, !tbaa !9
  %1104 = load double, ptr %79, align 8, !tbaa !9
  %1105 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1106 = fmul double %1104, %1105
  store double %1106, ptr %56, align 8, !tbaa !9
  %1107 = load double, ptr %78, align 8, !tbaa !9
  %1108 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1109 = fmul double %1107, %1108
  store double %1109, ptr %57, align 8, !tbaa !9
  %1110 = load double, ptr %77, align 8, !tbaa !9
  %1111 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 45), i32 0, i32 9), align 8, !tbaa !72
  %1112 = fmul double %1110, %1111
  store double %1112, ptr %58, align 8, !tbaa !9
  store double 0.000000e+00, ptr %59, align 8, !tbaa !9
  %1113 = load double, ptr %57, align 8, !tbaa !9
  %1114 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1115 = getelementptr inbounds %class.powerDef, ptr %1114, i32 0, i32 2
  %1116 = getelementptr inbounds %class.powerComponents, ptr %1115, i32 0, i32 2
  %1117 = load double, ptr %1116, align 8, !tbaa !73
  %1118 = fadd double %1117, %1113
  store double %1118, ptr %1116, align 8, !tbaa !73
  %1119 = load double, ptr %56, align 8, !tbaa !9
  %1120 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1121 = getelementptr inbounds %class.powerDef, ptr %1120, i32 0, i32 2
  %1122 = getelementptr inbounds %class.powerComponents, ptr %1121, i32 0, i32 2
  %1123 = load double, ptr %1122, align 8, !tbaa !73
  %1124 = fadd double %1123, %1119
  store double %1124, ptr %1122, align 8, !tbaa !73
  %1125 = load double, ptr %59, align 8, !tbaa !9
  %1126 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 78
  %1127 = load i32, ptr %1126, align 4, !tbaa !70
  %1128 = sitofp i32 %1127 to double
  %1129 = load double, ptr %58, align 8, !tbaa !9
  %1130 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 76
  %1131 = load i32, ptr %1130, align 4, !tbaa !69
  %1132 = sitofp i32 %1131 to double
  %1133 = fmul double %1129, %1132
  %1134 = call double @llvm.fmuladd.f64(double %1125, double %1128, double %1133)
  %1135 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1136 = getelementptr inbounds %class.powerDef, ptr %1135, i32 0, i32 2
  %1137 = getelementptr inbounds %class.powerComponents, ptr %1136, i32 0, i32 2
  %1138 = load double, ptr %1137, align 8, !tbaa !73
  %1139 = fadd double %1138, %1134
  store double %1139, ptr %1137, align 8, !tbaa !73
  %1140 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1141 = getelementptr inbounds %class.Subarray, ptr %1140, i32 0, i32 2
  %1142 = load i32, ptr %1141, align 8, !tbaa !45
  %1143 = add i32 %1142, 1
  %1144 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1145 = getelementptr inbounds %class.Subarray, ptr %1144, i32 0, i32 4
  %1146 = load i32, ptr %1145, align 8, !tbaa !38
  %1147 = mul i32 %1143, %1146
  %1148 = uitofp i32 %1147 to double
  %1149 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1150 = getelementptr inbounds %class.powerDef, ptr %1149, i32 0, i32 2
  %1151 = getelementptr inbounds %class.powerComponents, ptr %1150, i32 0, i32 2
  %1152 = load double, ptr %1151, align 8, !tbaa !73
  %1153 = fmul double %1152, %1148
  store double %1153, ptr %1151, align 8, !tbaa !73
  %1154 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1155 = getelementptr inbounds %class.Subarray, ptr %1154, i32 0, i32 2
  %1156 = load i32, ptr %1155, align 8, !tbaa !45
  %1157 = add i32 %1156, 1
  %1158 = uitofp i32 %1157 to double
  %1159 = load double, ptr %26, align 8, !tbaa !9
  %1160 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef 0.000000e+00, double noundef %1159, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1161 = fmul double %1158, %1160
  %1162 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1163 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1164 = getelementptr inbounds %class.powerDef, ptr %1163, i32 0, i32 2
  %1165 = getelementptr inbounds %class.powerComponents, ptr %1164, i32 0, i32 2
  %1166 = load double, ptr %1165, align 8, !tbaa !73
  %1167 = call double @llvm.fmuladd.f64(double %1161, double %1162, double %1166)
  store double %1167, ptr %1165, align 8, !tbaa !73
  %1168 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1169 = getelementptr inbounds %class.Subarray, ptr %1168, i32 0, i32 2
  %1170 = load i32, ptr %1169, align 8, !tbaa !45
  %1171 = add i32 %1170, 1
  %1172 = uitofp i32 %1171 to double
  %1173 = load double, ptr %32, align 8, !tbaa !9
  %1174 = load double, ptr %33, align 8, !tbaa !9
  %1175 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1173, double noundef %1174, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1176 = fmul double %1172, %1175
  %1177 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1178 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1179 = getelementptr inbounds %class.powerDef, ptr %1178, i32 0, i32 2
  %1180 = getelementptr inbounds %class.powerComponents, ptr %1179, i32 0, i32 2
  %1181 = load double, ptr %1180, align 8, !tbaa !73
  %1182 = call double @llvm.fmuladd.f64(double %1176, double %1177, double %1181)
  store double %1182, ptr %1180, align 8, !tbaa !73
  %1183 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1184 = getelementptr inbounds %class.Subarray, ptr %1183, i32 0, i32 2
  %1185 = load i32, ptr %1184, align 8, !tbaa !45
  %1186 = add i32 %1185, 1
  %1187 = uitofp i32 %1186 to double
  %1188 = load double, ptr %36, align 8, !tbaa !9
  %1189 = load double, ptr %37, align 8, !tbaa !9
  %1190 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1188, double noundef %1189, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1191 = fmul double %1187, %1190
  %1192 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1193 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1194 = getelementptr inbounds %class.powerDef, ptr %1193, i32 0, i32 2
  %1195 = getelementptr inbounds %class.powerComponents, ptr %1194, i32 0, i32 2
  %1196 = load double, ptr %1195, align 8, !tbaa !73
  %1197 = call double @llvm.fmuladd.f64(double %1191, double %1192, double %1196)
  store double %1197, ptr %1195, align 8, !tbaa !73
  %1198 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 45
  %1199 = getelementptr inbounds %class.Subarray, ptr %1198, i32 0, i32 2
  %1200 = load i32, ptr %1199, align 8, !tbaa !45
  %1201 = uitofp i32 %1200 to double
  %1202 = load double, ptr %40, align 8, !tbaa !9
  %1203 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %1202, double noundef 0.000000e+00, i32 noundef 1, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1204 = fmul double %1201, %1203
  %1205 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1206 = load double, ptr %41, align 8, !tbaa !9
  %1207 = call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef 0.000000e+00, double noundef %1206, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %1208 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 49), i32 0, i32 9), align 8, !tbaa !66
  %1209 = fmul double %1207, %1208
  %1210 = call double @llvm.fmuladd.f64(double %1204, double %1205, double %1209)
  %1211 = getelementptr inbounds %class.Mat, ptr %80, i32 0, i32 48
  %1212 = getelementptr inbounds %class.powerDef, ptr %1211, i32 0, i32 2
  %1213 = getelementptr inbounds %class.powerComponents, ptr %1212, i32 0, i32 2
  %1214 = load double, ptr %1213, align 8, !tbaa !73
  %1215 = fadd double %1214, %1210
  store double %1215, ptr %1213, align 8, !tbaa !73
  %1216 = load double, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  ret double %1216

1217:                                             ; preds = %959, %955
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  br label %1218

1218:                                             ; preds = %1217, %951, %947
  call void @llvm.lifetime.end.p0(i64 1, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  br label %1219

1219:                                             ; preds = %1218
  %1220 = load ptr, ptr %62, align 8
  %1221 = load i32, ptr %63, align 4
  %1222 = insertvalue { ptr, i32 } poison, ptr %1220, 0
  %1223 = insertvalue { ptr, i32 } %1222, i32 %1221, 1
  resume { ptr, i32 } %1223
}

declare noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761), double noundef) #2

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

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

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

; Function Attrs: nounwind
declare double @log(double noundef) #7

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 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 #4 = { 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 #5 = { 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 #6 = { 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 #7 = { 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 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin 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, !10, i64 1216}
!12 = !{!"_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, !13, i64 352, !14, i64 360, !14, i64 528, !14, i64 696, !14, i64 864, !14, i64 1032, !15, i64 1200, !15, i64 1264, !15, i64 1328, !16, i64 1392, !17, i64 1416, !17, i64 1464, !17, i64 1512}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_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}
!15 = !{!"_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}
!16 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !10, i64 0, !10, i64 8, !10, i64 16}
!17 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!18 = !{!12, !10, i64 1208}
!19 = !{!20, !10, i64 1816}
!20 = !{!"_ZTS3Mat", !21, i64 0, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376, !6, i64 384, !6, i64 392, !6, i64 400, !6, i64 408, !6, i64 416, !6, i64 424, !6, i64 432, !23, i64 440, !23, i64 560, !23, i64 680, !23, i64 800, !23, i64 920, !23, i64 1040, !23, i64 1160, !23, i64 1280, !23, i64 1400, !23, i64 1520, !23, i64 1640, !10, i64 1760, !10, i64 1768, !10, i64 1776, !10, i64 1784, !10, i64 1792, !10, i64 1800, !10, i64 1808, !10, i64 1816, !10, i64 1824, !10, i64 1832, !10, i64 1840, !10, i64 1848, !10, i64 1856, !25, i64 1864, !23, i64 2288, !23, i64 2408, !23, i64 2528, !10, i64 2648, !26, i64 2656, !26, i64 2660, !10, i64 2664, !22, i64 2672, !22, i64 2696, !27, i64 2720, !27, i64 2721, !27, i64 2722, !27, i64 2723, !26, i64 2724, !23, i64 2728, !10, i64 2848, !10, i64 2856, !10, i64 2864, !10, i64 2872, !10, i64 2880, !10, i64 2888, !23, i64 2896, !26, i64 3016, !26, i64 3020, !26, i64 3024, !26, i64 3028, !10, i64 3032, !26, i64 3040, !26, i64 3044, !26, i64 3048, !26, i64 3052, !26, i64 3056, !26, i64 3060}
!21 = !{!"_ZTS9Component", !22, i64 0, !23, i64 24, !23, i64 144, !10, i64 264, !10, i64 272}
!22 = !{!"_ZTS4Area", !10, i64 0, !10, i64 8, !10, i64 16}
!23 = !{!"_ZTS8powerDef", !24, i64 0, !24, i64 40, !24, i64 80}
!24 = !{!"_ZTS15powerComponents", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!25 = !{!"_ZTS8Subarray", !21, i64 0, !6, i64 280, !26, i64 288, !26, i64 292, !26, i64 296, !26, i64 300, !22, i64 304, !22, i64 328, !27, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !10, i64 408, !10, i64 416}
!26 = !{!"int", !7, i64 0}
!27 = !{!"bool", !7, i64 0}
!28 = !{!20, !27, i64 2720}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!27, !27, i64 0}
!32 = !{!33, !10, i64 56}
!33 = !{!"_ZTS14InputParameter", !26, i64 0, !26, i64 4, !26, i64 8, !26, i64 12, !26, i64 16, !27, i64 20, !26, i64 24, !26, i64 28, !26, i64 32, !26, i64 36, !26, i64 40, !26, i64 44, !10, i64 48, !10, i64 56, !26, i64 64, !26, i64 68, !26, i64 72, !26, i64 76, !26, i64 80, !27, i64 84, !27, i64 85, !27, i64 86, !27, i64 87, !27, i64 88, !26, i64 92, !26, i64 96, !26, i64 100, !26, i64 104, !26, i64 108, !26, i64 112, !26, i64 116, !26, i64 120, !26, i64 124, !26, i64 128, !26, i64 132, !26, i64 136, !26, i64 140, !26, i64 144, !26, i64 148, !34, i64 152, !26, i64 156, !27, i64 160, !26, i64 164, !26, i64 168, !26, i64 172, !26, i64 176, !26, i64 180, !26, i64 184, !26, i64 188, !27, i64 192, !26, i64 196, !26, i64 200, !26, i64 204, !26, i64 208, !26, i64 212, !26, i64 216, !26, i64 220, !26, i64 224, !26, i64 228, !26, i64 232, !26, i64 236, !26, i64 240, !26, i64 244, !26, i64 248, !26, i64 252, !26, i64 256, !26, i64 260, !26, i64 264, !26, i64 268, !26, i64 272, !26, i64 276, !26, i64 280, !26, i64 284, !26, i64 288, !26, i64 292, !26, i64 296, !27, i64 300, !26, i64 304, !26, i64 308, !26, i64 312, !27, i64 316, !27, i64 317, !26, i64 320, !26, i64 324, !27, i64 328, !10, i64 336, !10, i64 344, !27, i64 352, !26, i64 356, !26, i64 360, !27, i64 364}
!34 = !{!"_ZTS9Wire_type", !7, i64 0}
!35 = !{!12, !10, i64 8}
!36 = !{!12, !10, i64 272}
!37 = !{!12, !10, i64 1544}
!38 = !{!20, !26, i64 2160}
!39 = !{!26, !26, i64 0}
!40 = !{!12, !10, i64 280}
!41 = !{!20, !10, i64 2696}
!42 = !{!12, !10, i64 1344}
!43 = !{!12, !10, i64 1336}
!44 = !{!20, !6, i64 416}
!45 = !{!20, !26, i64 2152}
!46 = !{!20, !6, i64 424}
!47 = !{!20, !10, i64 2704}
!48 = !{!20, !10, i64 2280}
!49 = !{!50, !10, i64 632}
!50 = !{!"_ZTS6Driver", !21, i64 0, !26, i64 280, !26, i64 284, !7, i64 288, !7, i64 448, !10, i64 608, !10, i64 616, !10, i64 624, !10, i64 632, !23, i64 640, !27, i64 760}
!51 = !{!12, !10, i64 1552}
!52 = !{!20, !10, i64 1824}
!53 = !{!20, !6, i64 408}
!54 = !{!12, !10, i64 312}
!55 = !{!20, !10, i64 1832}
!56 = !{!12, !10, i64 936}
!57 = !{!20, !10, i64 2240}
!58 = !{!20, !10, i64 2264}
!59 = !{!20, !6, i64 432}
!60 = !{!20, !10, i64 1848}
!61 = !{!20, !10, i64 1856}
!62 = !{!20, !27, i64 2721}
!63 = !{!20, !10, i64 2608}
!64 = !{!12, !10, i64 1528}
!65 = !{!12, !10, i64 1536}
!66 = !{!12, !10, i64 1104}
!67 = !{!20, !26, i64 3048}
!68 = !{!20, !26, i64 3056}
!69 = !{!20, !26, i64 3052}
!70 = !{!20, !26, i64 3060}
!71 = !{!20, !10, i64 2616}
!72 = !{!12, !10, i64 432}
!73 = !{!20, !10, i64 2624}


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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

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

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

declare void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761), double noundef, double noundef, double noundef, i1 noundef zeroext) unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN3Mat17compute_cam_delayEd(ptr noundef nonnull align 8 dereferenceable(3064) %0, double noundef %1) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 2696
  %4 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %5 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1216), align 8, !tbaa !5
  %6 = fmul double %4, %5
  %7 = tail call noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %8 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1216), align 8, !tbaa !5
  %9 = fmul double %7, %8
  %10 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %11 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1208), align 8, !tbaa !15
  %12 = fmul double %10, %11
  %13 = tail call noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24) %3)
  %14 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1208), align 8, !tbaa !15
  %15 = fmul double %13, %14
  %16 = getelementptr inbounds i8, ptr %0, i64 1816
  store double 0.000000e+00, ptr %16, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %0, i64 2720
  %18 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %19 = trunc nuw i8 %18 to i1
  %20 = tail call noundef double @_Z21pmos_to_nmos_sz_ratiobb(i1 noundef zeroext %19, i1 noundef zeroext false)
  %21 = load ptr, ptr @g_ip, align 8, !tbaa !29
  %22 = getelementptr inbounds i8, ptr %21, i64 56
  %23 = load double, ptr %22, align 8, !tbaa !30
  %24 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 272), align 8, !tbaa !33
  %25 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1544), align 8, !tbaa !34
  %26 = fmul double %23, 7.500000e+01
  %27 = fmul double %23, 1.000000e+02
  %28 = fmul double %23, 6.250000e+01
  %29 = fmul double %23, 6.250000e+00
  %30 = fmul double %23, 1.250000e+01
  %31 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 8), align 8, !tbaa !35
  %32 = fmul double %20, %31
  %33 = getelementptr inbounds i8, ptr %0, i64 2160
  %34 = load i32, ptr %33, align 8, !tbaa !36
  %35 = sitofp i32 %34 to double
  %36 = fmul double %35, 5.000000e-01
  %37 = tail call double @llvm.ceil.f64(double %36)
  %38 = fptosi double %37 to i32
  %39 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 280), align 8, !tbaa !37
  %40 = tail call double @llvm.fmuladd.f64(double %24, double 2.000000e+00, double %39)
  %41 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %42 = trunc nuw i8 %41 to i1
  %43 = tail call noundef double @_Z6gate_Cddbbb(double noundef %40, double noundef 0.000000e+00, i1 noundef zeroext %42, i1 noundef zeroext false, i1 noundef zeroext false)
  %44 = fmul double %43, %35
  %45 = load i32, ptr %33, align 8, !tbaa !36
  %46 = sitofp i32 %45 to double
  %47 = load double, ptr %3, align 8, !tbaa !38
  %48 = fmul double %47, %46
  %49 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1344), align 8, !tbaa !39
  %50 = fmul double %48, %49
  %51 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1336), align 8, !tbaa !40
  %52 = fmul double %48, %51
  %53 = tail call noalias noundef nonnull dereferenceable(768) ptr @_Znwm(i64 noundef 768) #7
  %54 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %55 = trunc nuw i8 %54 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %53, double noundef %44, double noundef %50, double noundef %52, i1 noundef zeroext %55)
          to label %56 unwind label %340

56:                                               ; preds = %2
  %57 = getelementptr inbounds i8, ptr %0, i64 416
  store ptr %53, ptr %57, align 8, !tbaa !41
  %58 = getelementptr inbounds i8, ptr %0, i64 2152
  %59 = load i32, ptr %58, align 8, !tbaa !42
  %60 = add i32 %59, 1
  %61 = uitofp i32 %60 to double
  %62 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %63 = trunc nuw i8 %62 to i1
  %64 = tail call noundef double @_Z6gate_Cddbbb(double noundef %25, double noundef 0.000000e+00, i1 noundef zeroext %63, i1 noundef zeroext false, i1 noundef zeroext false)
  %65 = fmul double %64, %61
  %66 = load i32, ptr %58, align 8, !tbaa !42
  %67 = add i32 %66, 1
  %68 = uitofp i32 %67 to double
  %69 = fmul double %9, %68
  %70 = fmul double %15, %68
  %71 = tail call noalias noundef nonnull dereferenceable(768) ptr @_Znwm(i64 noundef 768) #7
  %72 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %73 = trunc nuw i8 %72 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %71, double noundef %65, double noundef %69, double noundef %70, i1 noundef zeroext %73)
          to label %74 unwind label %342

74:                                               ; preds = %56
  %75 = getelementptr inbounds i8, ptr %0, i64 424
  store ptr %71, ptr %75, align 8, !tbaa !43
  %76 = load ptr, ptr %57, align 8, !tbaa !41
  %77 = tail call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %76, double noundef 0.000000e+00)
  %78 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 272), align 8, !tbaa !33
  %79 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %80 = trunc nuw i8 %79 to i1
  %81 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %78, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %80, i1 noundef zeroext false, i1 noundef zeroext false)
  %82 = getelementptr inbounds i8, ptr %0, i64 2704
  %83 = load double, ptr %82, align 8, !tbaa !44
  %84 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1208), align 8, !tbaa !15
  %85 = fmul double %83, %84
  %86 = load i32, ptr %58, align 8, !tbaa !42
  %87 = add i32 %86, 1
  %88 = uitofp i32 %87 to double
  %89 = fmul double %85, %88
  %90 = getelementptr inbounds i8, ptr %0, i64 2280
  %91 = load double, ptr %90, align 8, !tbaa !45
  %92 = load ptr, ptr %57, align 8, !tbaa !41
  %93 = getelementptr inbounds i8, ptr %92, i64 632
  %94 = load double, ptr %93, align 8, !tbaa !46
  %95 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1552), align 8, !tbaa !48
  %96 = tail call double @log(double noundef %95) #8
  %97 = fmul double %91, %89
  %98 = fmul double %97, 5.000000e-01
  %99 = tail call double @llvm.fmuladd.f64(double %81, double %91, double %98)
  %100 = tail call double @llvm.fmuladd.f64(double %96, double %99, double %94)
  %101 = getelementptr inbounds i8, ptr %0, i64 1824
  store double %100, ptr %101, align 8, !tbaa !49
  %102 = load ptr, ptr %75, align 8, !tbaa !43
  %103 = tail call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %102, double noundef %1)
  %104 = load ptr, ptr %75, align 8, !tbaa !43
  %105 = getelementptr inbounds i8, ptr %104, i64 632
  %106 = load double, ptr %105, align 8, !tbaa !46
  %107 = load double, ptr %16, align 8, !tbaa !16
  %108 = fadd double %106, %107
  store double %108, ptr %16, align 8, !tbaa !16
  %109 = load i32, ptr %58, align 8, !tbaa !42
  %110 = add i32 %109, 1
  %111 = uitofp i32 %110 to double
  %112 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %113 = trunc nuw i8 %112 to i1
  %114 = tail call noundef double @_Z6gate_Cddbbb(double noundef %24, double noundef 0.000000e+00, i1 noundef zeroext %113, i1 noundef zeroext false, i1 noundef zeroext false)
  %115 = fmul double %114, %111
  %116 = load i32, ptr %58, align 8, !tbaa !42
  %117 = add i32 %116, 1
  %118 = uitofp i32 %117 to double
  %119 = fmul double %9, %118
  %120 = fmul double %15, %118
  %121 = tail call noalias noundef nonnull dereferenceable(768) ptr @_Znwm(i64 noundef 768) #7
  %122 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %123 = trunc nuw i8 %122 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %121, double noundef %115, double noundef %119, double noundef %120, i1 noundef zeroext %123)
          to label %124 unwind label %344

124:                                              ; preds = %74
  %125 = getelementptr inbounds i8, ptr %0, i64 408
  store ptr %121, ptr %125, align 8, !tbaa !50
  %126 = tail call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %121, double noundef 0.000000e+00)
  %127 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %128 = trunc nuw i8 %127 to i1
  %129 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %25, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %128, i1 noundef zeroext false, i1 noundef zeroext false)
  %130 = sitofp i32 %38 to double
  %131 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %132 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %133 = trunc nuw i8 %132 to i1
  %134 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %25, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %131, i1 noundef zeroext %133, i1 noundef zeroext false, i1 noundef zeroext false)
  %135 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %136 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %137 = trunc nuw i8 %136 to i1
  %138 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %24, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %135, i1 noundef zeroext %137, i1 noundef zeroext false, i1 noundef zeroext false)
  %139 = fdiv double %138, %130
  %140 = tail call double @llvm.fmuladd.f64(double %134, double 2.000000e+00, double %139)
  %141 = fmul double %140, %130
  %142 = fmul double %6, %130
  %143 = fmul double %12, %130
  %144 = fadd double %28, %28
  %145 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %146 = trunc nuw i8 %145 to i1
  %147 = tail call noundef double @_Z6gate_Cddbbb(double noundef %144, double noundef 0.000000e+00, i1 noundef zeroext %146, i1 noundef zeroext false, i1 noundef zeroext false)
  %148 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %149 = trunc nuw i8 %148 to i1
  %150 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %24, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %149, i1 noundef zeroext false, i1 noundef zeroext false)
  %151 = fadd double %142, %141
  %152 = load ptr, ptr %125, align 8, !tbaa !50
  %153 = getelementptr inbounds i8, ptr %152, i64 632
  %154 = load double, ptr %153, align 8, !tbaa !46
  %155 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1552), align 8, !tbaa !48
  %156 = tail call double @log(double noundef %155) #8
  %157 = fmul double %143, %151
  %158 = fmul double %157, 5.000000e-01
  %159 = tail call double @llvm.fmuladd.f64(double %150, double %151, double %158)
  %160 = tail call double @llvm.fmuladd.f64(double %156, double %159, double %154)
  %161 = getelementptr inbounds i8, ptr %0, i64 1832
  store double %160, ptr %161, align 8, !tbaa !52
  %162 = fmul double %142, 5.000000e-01
  %163 = fadd double %162, %141
  %164 = fadd double %147, %163
  %165 = fadd double %162, %147
  %166 = fmul double %143, %165
  %167 = tail call double @llvm.fmuladd.f64(double %129, double %164, double %166)
  %168 = tail call noundef double @_Z8horowitzddddi(double noundef %103, double noundef %167, double noundef 3.040000e-01, double noundef 4.200000e-01, i32 noundef 0)
  %169 = load double, ptr %16, align 8, !tbaa !16
  %170 = fadd double %168, %169
  store double %170, ptr %16, align 8, !tbaa !16
  %171 = fdiv double %168, 4.200000e-01
  %172 = load i32, ptr %58, align 8, !tbaa !42
  %173 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 936), align 8, !tbaa !53
  %174 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %175 = trunc nuw i8 %174 to i1
  %176 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %28, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %175, i1 noundef zeroext false, i1 noundef zeroext false)
  %177 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %178 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %179 = trunc nuw i8 %178 to i1
  %180 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %28, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %177, i1 noundef zeroext %179, i1 noundef zeroext false, i1 noundef zeroext false)
  %181 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %182 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %183 = trunc nuw i8 %182 to i1
  %184 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %28, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %181, i1 noundef zeroext %183, i1 noundef zeroext false, i1 noundef zeroext false)
  %185 = tail call double @llvm.fmuladd.f64(double %184, double 2.000000e+00, double %180)
  %186 = fadd double %26, %27
  %187 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %188 = trunc nuw i8 %187 to i1
  %189 = tail call noundef double @_Z6gate_Cddbbb(double noundef %186, double noundef 0.000000e+00, i1 noundef zeroext %188, i1 noundef zeroext false, i1 noundef zeroext false)
  %190 = fadd double %185, %189
  %191 = fmul double %176, %190
  %192 = tail call noundef double @_Z8horowitzddddi(double noundef %171, double noundef %191, double noundef 4.200000e-01, double noundef 4.130000e-01, i32 noundef 1)
  %193 = fdiv double %192, 5.870000e-01
  %194 = load double, ptr %16, align 8, !tbaa !16
  %195 = fadd double %192, %194
  store double %195, ptr %16, align 8, !tbaa !16
  %196 = load i32, ptr %58, align 8, !tbaa !42
  %197 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 936), align 8, !tbaa !53
  %198 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %199 = trunc nuw i8 %198 to i1
  %200 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %26, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %199, i1 noundef zeroext false, i1 noundef zeroext false)
  %201 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %202 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %203 = trunc nuw i8 %202 to i1
  %204 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %26, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %201, i1 noundef zeroext %203, i1 noundef zeroext false, i1 noundef zeroext false)
  %205 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %206 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %207 = trunc nuw i8 %206 to i1
  %208 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %27, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %205, i1 noundef zeroext %207, i1 noundef zeroext false, i1 noundef zeroext false)
  %209 = fadd double %204, %208
  %210 = load i32, ptr %58, align 8, !tbaa !42
  %211 = add i32 %210, 1
  %212 = uitofp i32 %211 to double
  %213 = fmul double %9, %212
  %214 = fmul double %213, 5.000000e-01
  %215 = tail call double @llvm.fmuladd.f64(double %6, double %130, double %214)
  %216 = fmul double %15, %212
  %217 = fmul double %216, 5.000000e-01
  %218 = tail call double @llvm.fmuladd.f64(double %12, double %130, double %217)
  %219 = fadd double %29, %30
  %220 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %221 = trunc nuw i8 %220 to i1
  %222 = tail call noundef double @_Z6gate_Cddbbb(double noundef %219, double noundef 0.000000e+00, i1 noundef zeroext %221, i1 noundef zeroext false, i1 noundef zeroext false)
  %223 = fadd double %209, %215
  %224 = fadd double %222, %223
  %225 = fmul double %215, 5.000000e-01
  %226 = fadd double %222, %225
  %227 = fmul double %218, %226
  %228 = tail call double @llvm.fmuladd.f64(double %200, double %224, double %227)
  %229 = tail call noundef double @_Z8horowitzddddi(double noundef %193, double noundef %228, double noundef 4.130000e-01, double noundef 4.050000e-01, i32 noundef 0)
  %230 = load double, ptr %16, align 8, !tbaa !16
  %231 = fadd double %229, %230
  store double %231, ptr %16, align 8, !tbaa !16
  %232 = load i32, ptr %58, align 8, !tbaa !42
  %233 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 936), align 8, !tbaa !53
  %234 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %235 = trunc nuw i8 %234 to i1
  %236 = tail call noundef double @_Z6gate_Cddbbb(double noundef %25, double noundef 0.000000e+00, i1 noundef zeroext %235, i1 noundef zeroext false, i1 noundef zeroext false)
  %237 = getelementptr inbounds i8, ptr %0, i64 2240
  %238 = load double, ptr %237, align 8, !tbaa !54
  %239 = getelementptr inbounds i8, ptr %0, i64 2264
  %240 = load double, ptr %239, align 8, !tbaa !55
  %241 = tail call noalias noundef nonnull dereferenceable(768) ptr @_Znwm(i64 noundef 768) #7
  %242 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %243 = trunc nuw i8 %242 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %241, double noundef %236, double noundef %238, double noundef %240, i1 noundef zeroext %243)
          to label %244 unwind label %346

244:                                              ; preds = %124
  %245 = fdiv double %229, 4.050000e-01
  %246 = getelementptr inbounds i8, ptr %0, i64 432
  store ptr %241, ptr %246, align 8, !tbaa !56
  %247 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %248 = trunc nuw i8 %247 to i1
  %249 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %29, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %248, i1 noundef zeroext false, i1 noundef zeroext false)
  %250 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %251 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %252 = trunc nuw i8 %251 to i1
  %253 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %29, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %250, i1 noundef zeroext %252, i1 noundef zeroext false, i1 noundef zeroext false)
  %254 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %255 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %256 = trunc nuw i8 %255 to i1
  %257 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %30, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %254, i1 noundef zeroext %256, i1 noundef zeroext false, i1 noundef zeroext false)
  %258 = tail call double @llvm.fmuladd.f64(double %253, double 2.000000e+00, double %257)
  %259 = load ptr, ptr %246, align 8, !tbaa !56
  %260 = getelementptr inbounds i8, ptr %259, i64 288
  %261 = load double, ptr %260, align 8, !tbaa !57
  %262 = getelementptr inbounds i8, ptr %259, i64 448
  %263 = load double, ptr %262, align 8, !tbaa !57
  %264 = fadd double %261, %263
  %265 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %266 = trunc nuw i8 %265 to i1
  %267 = tail call noundef double @_Z6gate_Cddbbb(double noundef %264, double noundef 0.000000e+00, i1 noundef zeroext %266, i1 noundef zeroext false, i1 noundef zeroext false)
  %268 = fadd double %258, %267
  %269 = fmul double %249, %268
  %270 = tail call noundef double @_Z8horowitzddddi(double noundef %245, double noundef %269, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %271 = fmul double %270, 2.000000e+00
  %272 = load double, ptr %16, align 8, !tbaa !16
  %273 = fadd double %270, %272
  store double %273, ptr %16, align 8, !tbaa !16
  %274 = load ptr, ptr %246, align 8, !tbaa !56
  %275 = tail call noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761) %274, double noundef %271)
  %276 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 936), align 8, !tbaa !53
  %277 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %278 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %279 = trunc nuw i8 %278 to i1
  %280 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %32, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %277, i1 noundef zeroext %279, i1 noundef zeroext false, i1 noundef zeroext false)
  %281 = fmul double %280, 2.000000e+00
  %282 = load i32, ptr %58, align 8, !tbaa !42
  %283 = uitofp i32 %282 to double
  %284 = fmul double %9, %283
  %285 = fmul double %15, %283
  %286 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %287 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %288 = trunc nuw i8 %287 to i1
  %289 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %25, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %286, i1 noundef zeroext %288, i1 noundef zeroext false, i1 noundef zeroext false)
  %290 = load i32, ptr %58, align 8, !tbaa !42
  %291 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %292 = trunc nuw i8 %291 to i1
  %293 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %32, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %292, i1 noundef zeroext false, i1 noundef zeroext false)
  %294 = fadd double %281, %284
  %295 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1552), align 8, !tbaa !48
  %296 = tail call double @log(double noundef %295) #8
  %297 = fmul double %285, %294
  %298 = fmul double %297, 5.000000e-01
  %299 = tail call double @llvm.fmuladd.f64(double %293, double %294, double %298)
  %300 = fmul double %299, %296
  %301 = getelementptr inbounds i8, ptr %0, i64 1848
  store double %300, ptr %301, align 8, !tbaa !58
  %302 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 936), align 8, !tbaa !53
  %303 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %304 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %305 = trunc nuw i8 %304 to i1
  %306 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %25, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %303, i1 noundef zeroext %305, i1 noundef zeroext false, i1 noundef zeroext false)
  %307 = fmul double %306, 2.000000e+00
  %308 = load i32, ptr %58, align 8, !tbaa !42
  %309 = uitofp i32 %308 to double
  %310 = fmul double %9, %309
  %311 = fmul double %15, %309
  %312 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !51
  %313 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %314 = trunc nuw i8 %313 to i1
  %315 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %25, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %312, i1 noundef zeroext %314, i1 noundef zeroext false, i1 noundef zeroext false)
  %316 = load i32, ptr %58, align 8, !tbaa !42
  %317 = uitofp i32 %316 to double
  %318 = fmul double %315, %317
  %319 = load i8, ptr %17, align 8, !tbaa !26, !range !27, !noundef !28
  %320 = trunc nuw i8 %319 to i1
  %321 = tail call noundef double @_Z7tr_R_ondiibbb(double noundef %25, i32 noundef 0, i32 noundef 1, i1 noundef zeroext %320, i1 noundef zeroext false, i1 noundef zeroext false)
  %322 = fmul double %310, 5.000000e-01
  %323 = fadd double %307, %322
  %324 = fadd double %323, %318
  %325 = fadd double %322, %318
  %326 = fmul double %311, %325
  %327 = tail call double @llvm.fmuladd.f64(double %321, double %324, double %326)
  %328 = tail call noundef double @_Z8horowitzddddi(double noundef 0.000000e+00, double noundef %327, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 0)
  %329 = getelementptr inbounds i8, ptr %0, i64 1856
  store double %328, ptr %329, align 8, !tbaa !59
  %330 = getelementptr inbounds i8, ptr %0, i64 2721
  %331 = load i8, ptr %330, align 1, !tbaa !60, !range !27, !noundef !28
  %332 = trunc nuw i8 %331 to i1
  br i1 %332, label %333, label %348

333:                                              ; preds = %244
  %334 = load ptr, ptr %246, align 8, !tbaa !56
  %335 = getelementptr inbounds i8, ptr %334, i64 632
  %336 = load double, ptr %335, align 8, !tbaa !46
  %337 = fcmp ogt double %336, %328
  %. = select i1 %337, double %336, double %328
  %338 = load double, ptr %16, align 8, !tbaa !16
  %339 = fadd double %338, %.
  store double %339, ptr %16, align 8, !tbaa !16
  br label %348

340:                                              ; preds = %2
  %341 = landingpad { ptr, i32 }
          cleanup
  br label %507

342:                                              ; preds = %56
  %343 = landingpad { ptr, i32 }
          cleanup
  br label %507

344:                                              ; preds = %74
  %345 = landingpad { ptr, i32 }
          cleanup
  br label %507

346:                                              ; preds = %124
  %347 = landingpad { ptr, i32 }
          cleanup
  br label %507

348:                                              ; preds = %333, %244
  %349 = uitofp i32 %290 to double
  %350 = fmul double %289, %349
  %351 = fadd double %294, %350
  %352 = fmul double %351, %302
  %353 = fmul double %258, %276
  %354 = uitofp i32 %232 to double
  %355 = tail call double @llvm.fmuladd.f64(double %354, double %222, double %223)
  %356 = fmul double %233, %355
  %357 = add i32 %196, 1
  %358 = uitofp i32 %357 to double
  %359 = fmul double %189, 2.000000e+00
  %360 = tail call double @llvm.fmuladd.f64(double %185, double %358, double %359)
  %361 = fmul double %197, %360
  %362 = fadd double %147, %151
  %363 = add i32 %172, 1
  %364 = uitofp i32 %363 to double
  %365 = fmul double %362, %364
  %366 = fmul double %173, %365
  %367 = fmul double %173, %366
  %368 = tail call double @llvm.fmuladd.f64(double %367, double 2.000000e+00, double 0.000000e+00)
  %369 = tail call double @llvm.fmuladd.f64(double %361, double %197, double %368)
  %370 = tail call double @llvm.fmuladd.f64(double %356, double %233, double %369)
  %371 = tail call double @llvm.fmuladd.f64(double %353, double %276, double %370)
  %372 = tail call double @llvm.fmuladd.f64(double %352, double %302, double %371)
  %373 = fadd double %307, %310
  %374 = fadd double %373, %318
  %375 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 936), align 8, !tbaa !53
  %376 = fmul double %374, %375
  %377 = tail call double @llvm.fmuladd.f64(double %376, double %375, double %372)
  %378 = getelementptr inbounds i8, ptr %0, i64 2608
  store double %377, ptr %378, align 8, !tbaa !61
  %379 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1528), align 8, !tbaa !62
  %380 = tail call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %379, double noundef 0.000000e+00, i32 noundef 1, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %381 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1528), align 8, !tbaa !62
  %382 = tail call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %381, double noundef 0.000000e+00, i32 noundef 2, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %383 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1544), align 8, !tbaa !34
  %384 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1536), align 8, !tbaa !63
  %385 = tail call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %383, double noundef %384, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %386 = fmul double %385, 2.000000e+00
  %387 = tail call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %25, double noundef %25, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %388 = fmul double %387, 2.000000e+00
  %389 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %390 = fmul double %386, %389
  %391 = fmul double %388, %389
  %392 = fmul double %380, %389
  %393 = fmul double %382, %389
  %394 = fadd double %390, %391
  %395 = fadd double %392, %394
  %396 = getelementptr inbounds i8, ptr %0, i64 3048
  %397 = load i32, ptr %396, align 8, !tbaa !65
  %398 = getelementptr inbounds i8, ptr %0, i64 3056
  %399 = load i32, ptr %398, align 8, !tbaa !66
  %400 = add i32 %397, -1
  %401 = add i32 %400, %399
  %402 = sitofp i32 %401 to double
  %403 = tail call double @llvm.fmuladd.f64(double %392, double %402, double %395)
  %404 = getelementptr inbounds i8, ptr %0, i64 3052
  %405 = load i32, ptr %404, align 4, !tbaa !67
  %406 = sitofp i32 %405 to double
  %407 = tail call double @llvm.fmuladd.f64(double %393, double %406, double %403)
  %408 = getelementptr inbounds i8, ptr %0, i64 3060
  %409 = load i32, ptr %408, align 4, !tbaa !68
  %410 = sitofp i32 %409 to double
  %411 = tail call double @llvm.fmuladd.f64(double %410, double 0.000000e+00, double %407)
  %412 = getelementptr inbounds i8, ptr %0, i64 2616
  %413 = load double, ptr %412, align 8, !tbaa !69
  %414 = fadd double %413, %411
  %415 = load i32, ptr %58, align 8, !tbaa !42
  %416 = add i32 %415, 1
  %417 = load i32, ptr %33, align 8, !tbaa !36
  %418 = mul i32 %416, %417
  %419 = uitofp i32 %418 to double
  %420 = fmul double %414, %419
  store double %420, ptr %412, align 8, !tbaa !69
  %421 = uitofp i32 %416 to double
  %422 = tail call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef 0.000000e+00, double noundef %24, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %423 = fmul double %422, %421
  %424 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %425 = load double, ptr %412, align 8, !tbaa !69
  %426 = tail call double @llvm.fmuladd.f64(double %423, double %424, double %425)
  store double %426, ptr %412, align 8, !tbaa !69
  %427 = load i32, ptr %58, align 8, !tbaa !42
  %428 = add i32 %427, 1
  %429 = uitofp i32 %428 to double
  %430 = tail call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %28, double noundef %28, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %431 = fmul double %430, %429
  %432 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %433 = load double, ptr %412, align 8, !tbaa !69
  %434 = tail call double @llvm.fmuladd.f64(double %431, double %432, double %433)
  store double %434, ptr %412, align 8, !tbaa !69
  %435 = load i32, ptr %58, align 8, !tbaa !42
  %436 = add i32 %435, 1
  %437 = uitofp i32 %436 to double
  %438 = tail call noundef double @_Z17cmos_Isub_leakageddi9Gate_typebbb17Half_net_topology(double noundef %29, double noundef %30, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %439 = fmul double %438, %437
  %440 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %441 = load double, ptr %412, align 8, !tbaa !69
  %442 = tail call double @llvm.fmuladd.f64(double %439, double %440, double %441)
  %443 = fadd double %442, 0.000000e+00
  store double %443, ptr %412, align 8, !tbaa !69
  %444 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1528), align 8, !tbaa !62
  %445 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %444, double noundef 0.000000e+00, i32 noundef 1, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %446 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1544), align 8, !tbaa !34
  %447 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1536), align 8, !tbaa !63
  %448 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %446, double noundef %447, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %449 = fmul double %448, 2.000000e+00
  %450 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %25, double noundef %25, i32 noundef 1, i32 noundef 2, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false, i32 noundef 1)
  %451 = fmul double %450, 2.000000e+00
  %452 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %453 = fmul double %451, %452
  %454 = fmul double %449, %452
  %455 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 432), align 8, !tbaa !70
  %456 = fmul double %445, %455
  %457 = getelementptr inbounds i8, ptr %0, i64 2624
  %458 = load double, ptr %457, align 8, !tbaa !71
  %459 = fadd double %454, %458
  %460 = fadd double %453, %459
  %461 = load i32, ptr %408, align 4, !tbaa !68
  %462 = sitofp i32 %461 to double
  %463 = load i32, ptr %404, align 4, !tbaa !67
  %464 = sitofp i32 %463 to double
  %465 = fmul double %456, %464
  %466 = tail call double @llvm.fmuladd.f64(double %462, double 0.000000e+00, double %465)
  %467 = fadd double %460, %466
  %468 = load i32, ptr %58, align 8, !tbaa !42
  %469 = add i32 %468, 1
  %470 = load i32, ptr %33, align 8, !tbaa !36
  %471 = mul i32 %469, %470
  %472 = uitofp i32 %471 to double
  %473 = fmul double %467, %472
  store double %473, ptr %457, align 8, !tbaa !71
  %474 = uitofp i32 %469 to double
  %475 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef 0.000000e+00, double noundef %24, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %476 = fmul double %475, %474
  %477 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %478 = load double, ptr %457, align 8, !tbaa !71
  %479 = tail call double @llvm.fmuladd.f64(double %476, double %477, double %478)
  store double %479, ptr %457, align 8, !tbaa !71
  %480 = load i32, ptr %58, align 8, !tbaa !42
  %481 = add i32 %480, 1
  %482 = uitofp i32 %481 to double
  %483 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %28, double noundef %28, i32 noundef 2, i32 noundef 3, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %484 = fmul double %483, %482
  %485 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %486 = load double, ptr %457, align 8, !tbaa !71
  %487 = tail call double @llvm.fmuladd.f64(double %484, double %485, double %486)
  store double %487, ptr %457, align 8, !tbaa !71
  %488 = load i32, ptr %58, align 8, !tbaa !42
  %489 = add i32 %488, 1
  %490 = uitofp i32 %489 to double
  %491 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %29, double noundef %30, i32 noundef 2, i32 noundef 4, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %492 = fmul double %491, %490
  %493 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %494 = load double, ptr %457, align 8, !tbaa !71
  %495 = tail call double @llvm.fmuladd.f64(double %492, double %493, double %494)
  store double %495, ptr %457, align 8, !tbaa !71
  %496 = load i32, ptr %58, align 8, !tbaa !42
  %497 = uitofp i32 %496 to double
  %498 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef %25, double noundef 0.000000e+00, i32 noundef 1, i32 noundef 0, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %499 = fmul double %498, %497
  %500 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %501 = tail call noundef double @_Z15cmos_Ig_leakageddi9Gate_typebbb17Half_net_topology(double noundef 0.000000e+00, double noundef %32, i32 noundef 1, i32 noundef 1, i1 noundef zeroext false, i1 noundef zeroext false, i1 noundef zeroext false, i32 noundef 1)
  %502 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1104), align 8, !tbaa !64
  %503 = fmul double %501, %502
  %504 = tail call double @llvm.fmuladd.f64(double %499, double %500, double %503)
  %505 = load double, ptr %457, align 8, !tbaa !71
  %506 = fadd double %505, %504
  store double %506, ptr %457, align 8, !tbaa !71
  ret double %275

507:                                              ; preds = %344, %346, %342, %340
  %.sink = phi ptr [ %121, %344 ], [ %241, %346 ], [ %71, %342 ], [ %53, %340 ]
  %.pn.pn = phi { ptr, i32 } [ %345, %344 ], [ %347, %346 ], [ %343, %342 ], [ %341, %340 ]
  tail call void @_ZdlPvm(ptr noundef nonnull %.sink, i64 noundef 768) #9
  resume { ptr, i32 } %.pn.pn
}

declare noundef double @_ZN6Driver13compute_delayEd(ptr noundef nonnull align 8 dereferenceable(761), double noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @log(double noundef) local_unnamed_addr #6

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { 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 #5 = { 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 #6 = { mustprogress nofree nounwind willreturn memory(write) "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 = { builtin allocsize(0) }
attributes #8 = { nounwind }
attributes #9 = { builtin 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, !7, i64 1216}
!6 = !{!"_ZTS19TechnologyParameter", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !7, i64 176, !7, i64 184, !7, i64 192, !7, i64 200, !7, i64 208, !7, i64 216, !7, i64 224, !7, i64 232, !7, i64 240, !7, i64 248, !7, i64 256, !7, i64 264, !7, i64 272, !7, i64 280, !7, i64 288, !7, i64 296, !7, i64 304, !7, i64 312, !7, i64 320, !7, i64 328, !7, i64 336, !7, i64 344, !10, i64 352, !11, i64 360, !11, i64 528, !11, i64 696, !11, i64 864, !11, i64 1032, !12, i64 1200, !12, i64 1264, !12, i64 1328, !13, i64 1392, !14, i64 1416, !14, i64 1464, !14, i64 1512}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160}
!12 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56}
!13 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !7, i64 0, !7, i64 8, !7, i64 16}
!14 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40}
!15 = !{!6, !7, i64 1208}
!16 = !{!17, !7, i64 1816}
!17 = !{!"_ZTS3Mat", !18, i64 0, !22, i64 280, !22, i64 288, !22, i64 296, !22, i64 304, !22, i64 312, !22, i64 320, !22, i64 328, !22, i64 336, !22, i64 344, !22, i64 352, !22, i64 360, !22, i64 368, !22, i64 376, !22, i64 384, !22, i64 392, !22, i64 400, !22, i64 408, !22, i64 416, !22, i64 424, !22, i64 432, !20, i64 440, !20, i64 560, !20, i64 680, !20, i64 800, !20, i64 920, !20, i64 1040, !20, i64 1160, !20, i64 1280, !20, i64 1400, !20, i64 1520, !20, i64 1640, !7, i64 1760, !7, i64 1768, !7, i64 1776, !7, i64 1784, !7, i64 1792, !7, i64 1800, !7, i64 1808, !7, i64 1816, !7, i64 1824, !7, i64 1832, !7, i64 1840, !7, i64 1848, !7, i64 1856, !23, i64 1864, !20, i64 2288, !20, i64 2408, !20, i64 2528, !7, i64 2648, !24, i64 2656, !24, i64 2660, !7, i64 2664, !19, i64 2672, !19, i64 2696, !25, i64 2720, !25, i64 2721, !25, i64 2722, !25, i64 2723, !24, i64 2724, !20, i64 2728, !7, i64 2848, !7, i64 2856, !7, i64 2864, !7, i64 2872, !7, i64 2880, !7, i64 2888, !20, i64 2896, !24, i64 3016, !24, i64 3020, !24, i64 3024, !24, i64 3028, !7, i64 3032, !24, i64 3040, !24, i64 3044, !24, i64 3048, !24, i64 3052, !24, i64 3056, !24, i64 3060}
!18 = !{!"_ZTS9Component", !19, i64 0, !20, i64 24, !20, i64 144, !7, i64 264, !7, i64 272}
!19 = !{!"_ZTS4Area", !7, i64 0, !7, i64 8, !7, i64 16}
!20 = !{!"_ZTS8powerDef", !21, i64 0, !21, i64 40, !21, i64 80}
!21 = !{!"_ZTS15powerComponents", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32}
!22 = !{!"any pointer", !8, i64 0}
!23 = !{!"_ZTS8Subarray", !18, i64 0, !22, i64 280, !24, i64 288, !24, i64 292, !24, i64 296, !24, i64 300, !19, i64 304, !19, i64 328, !25, i64 352, !7, i64 360, !7, i64 368, !7, i64 376, !7, i64 384, !7, i64 392, !7, i64 400, !7, i64 408, !7, i64 416}
!24 = !{!"int", !8, i64 0}
!25 = !{!"bool", !8, i64 0}
!26 = !{!17, !25, i64 2720}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!22, !22, i64 0}
!30 = !{!31, !7, i64 56}
!31 = !{!"_ZTS14InputParameter", !24, i64 0, !24, i64 4, !24, i64 8, !24, i64 12, !24, i64 16, !25, i64 20, !24, i64 24, !24, i64 28, !24, i64 32, !24, i64 36, !24, i64 40, !24, i64 44, !7, i64 48, !7, i64 56, !24, i64 64, !24, i64 68, !24, i64 72, !24, i64 76, !24, i64 80, !25, i64 84, !25, i64 85, !25, i64 86, !25, i64 87, !25, i64 88, !24, i64 92, !24, i64 96, !24, i64 100, !24, i64 104, !24, i64 108, !24, i64 112, !24, i64 116, !24, i64 120, !24, i64 124, !24, i64 128, !24, i64 132, !24, i64 136, !24, i64 140, !24, i64 144, !24, i64 148, !32, i64 152, !24, i64 156, !25, i64 160, !24, i64 164, !24, i64 168, !24, i64 172, !24, i64 176, !24, i64 180, !24, i64 184, !24, i64 188, !25, i64 192, !24, i64 196, !24, i64 200, !24, i64 204, !24, i64 208, !24, i64 212, !24, i64 216, !24, i64 220, !24, i64 224, !24, i64 228, !24, i64 232, !24, i64 236, !24, i64 240, !24, i64 244, !24, i64 248, !24, i64 252, !24, i64 256, !24, i64 260, !24, i64 264, !24, i64 268, !24, i64 272, !24, i64 276, !24, i64 280, !24, i64 284, !24, i64 288, !24, i64 292, !24, i64 296, !25, i64 300, !24, i64 304, !24, i64 308, !24, i64 312, !25, i64 316, !25, i64 317, !24, i64 320, !24, i64 324, !25, i64 328, !7, i64 336, !7, i64 344, !25, i64 352, !24, i64 356, !24, i64 360, !25, i64 364}
!32 = !{!"_ZTS9Wire_type", !8, i64 0}
!33 = !{!6, !7, i64 272}
!34 = !{!6, !7, i64 1544}
!35 = !{!6, !7, i64 8}
!36 = !{!17, !24, i64 2160}
!37 = !{!6, !7, i64 280}
!38 = !{!17, !7, i64 2696}
!39 = !{!6, !7, i64 1344}
!40 = !{!6, !7, i64 1336}
!41 = !{!17, !22, i64 416}
!42 = !{!17, !24, i64 2152}
!43 = !{!17, !22, i64 424}
!44 = !{!17, !7, i64 2704}
!45 = !{!17, !7, i64 2280}
!46 = !{!47, !7, i64 632}
!47 = !{!"_ZTS6Driver", !18, i64 0, !24, i64 280, !24, i64 284, !8, i64 288, !8, i64 448, !7, i64 608, !7, i64 616, !7, i64 624, !7, i64 632, !20, i64 640, !25, i64 760}
!48 = !{!6, !7, i64 1552}
!49 = !{!17, !7, i64 1824}
!50 = !{!17, !22, i64 408}
!51 = !{!6, !7, i64 312}
!52 = !{!17, !7, i64 1832}
!53 = !{!6, !7, i64 936}
!54 = !{!17, !7, i64 2240}
!55 = !{!17, !7, i64 2264}
!56 = !{!17, !22, i64 432}
!57 = !{!7, !7, i64 0}
!58 = !{!17, !7, i64 1848}
!59 = !{!17, !7, i64 1856}
!60 = !{!17, !25, i64 2721}
!61 = !{!17, !7, i64 2608}
!62 = !{!6, !7, i64 1528}
!63 = !{!6, !7, i64 1536}
!64 = !{!6, !7, i64 1104}
!65 = !{!17, !24, i64 3048}
!66 = !{!17, !24, i64 3056}
!67 = !{!17, !24, i64 3052}
!68 = !{!17, !24, i64 3060}
!69 = !{!17, !7, i64 2616}
!70 = !{!6, !7, i64 432}
!71 = !{!17, !7, i64 2624}


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