; LLVM IR from gem5/gem5 :: ext/mcpat/cacti/uca.ll (ZN3UCAC2ERK16DynamicParameter)

; 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.UCA = type { %class.Component, %class.DynamicParameter, %class.Bank, ptr, ptr, ptr, ptr, ptr, %class.powerDef, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%class.Component = type { %class.Area, %class.powerDef, %class.powerDef, double, double }
%class.Area = type { double, double, double }
%class.DynamicParameter = type <{ i8, i8, i8, i8, i32, i32, i32, double, 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, [7 x i8], double, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], double, i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], %class.Area, %class.Area, i8, [7 x i8] }>
%class.Bank = type { %class.Component, ptr, %class.Mat, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32 }
%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.Subarray = type { %class.Component, ptr, i32, i32, i32, i32, %class.Area, %class.Area, i8, double, double, double, double, double, 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 }

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3UCAC2ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(4320) %0, ptr noundef nonnull align 8 dereferenceable(265) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %10 = load ptr, ptr %3, align 8
  call void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %10)
  %11 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %12 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %11, ptr align 8 %12, i64 272, i1 false), !tbaa.struct !9
  %13 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %14 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  invoke void @_ZN4BankC1ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(3416) %13, ptr noundef nonnull align 8 dereferenceable(265) %14)
          to label %15 unwind label %80

15:                                               ; preds = %2
  %16 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 8
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %16)
          to label %17 unwind label %84

17:                                               ; preds = %15
  %18 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 9
  %19 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %20 = getelementptr inbounds %class.InputParameter, ptr %19, i32 0, i32 3
  %21 = load i32, ptr %20, align 4, !tbaa !16
  store i32 %21, ptr %18, align 8, !tbaa !19
  %22 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 23
  store double 0.000000e+00, ptr %22, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %23 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %24 = getelementptr inbounds %class.Component, ptr %23, i32 0, i32 0
  %25 = getelementptr inbounds %class.Area, ptr %24, i32 0, i32 1
  %26 = load double, ptr %25, align 8, !tbaa !30
  %27 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %28 = getelementptr inbounds %class.Component, ptr %27, i32 0, i32 0
  %29 = getelementptr inbounds %class.Area, ptr %28, i32 0, i32 0
  %30 = load double, ptr %29, align 8, !tbaa !31
  %31 = fcmp ogt double %26, %30
  br i1 %31, label %32, label %39

32:                                               ; preds = %17
  %33 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 9
  %34 = load i32, ptr %33, align 8, !tbaa !19
  %35 = zext i32 %34 to i64
  %36 = invoke noundef i32 @_Z5_log2m(i64 noundef %35)
          to label %37 unwind label %88

37:                                               ; preds = %32
  %38 = udiv i32 %36, 2
  br label %52

39:                                               ; preds = %17
  %40 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 9
  %41 = load i32, ptr %40, align 8, !tbaa !19
  %42 = zext i32 %41 to i64
  %43 = invoke noundef i32 @_Z5_log2m(i64 noundef %42)
          to label %44 unwind label %88

44:                                               ; preds = %39
  %45 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 9
  %46 = load i32, ptr %45, align 8, !tbaa !19
  %47 = zext i32 %46 to i64
  %48 = invoke noundef i32 @_Z5_log2m(i64 noundef %47)
          to label %49 unwind label %88

49:                                               ; preds = %44
  %50 = udiv i32 %48, 2
  %51 = sub i32 %43, %50
  br label %52

52:                                               ; preds = %49, %37
  %53 = phi i32 [ %38, %37 ], [ %51, %49 ]
  %54 = shl i32 1, %53
  store i32 %54, ptr %7, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  %55 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 9
  %56 = load i32, ptr %55, align 8, !tbaa !19
  %57 = load i32, ptr %7, align 4, !tbaa !12
  %58 = udiv i32 %56, %57
  store i32 %58, ptr %8, align 4, !tbaa !12
  %59 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %60 = getelementptr inbounds %class.DynamicParameter, ptr %59, i32 0, i32 46
  %61 = load i32, ptr %60, align 8, !tbaa !32
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %92

63:                                               ; preds = %52
  %64 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %65 = getelementptr inbounds %class.DynamicParameter, ptr %64, i32 0, i32 47
  %66 = load i32, ptr %65, align 4, !tbaa !33
  %67 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 15
  store i32 %66, ptr %67, align 8, !tbaa !34
  %68 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %69 = getelementptr inbounds %class.DynamicParameter, ptr %68, i32 0, i32 48
  %70 = load i32, ptr %69, align 8, !tbaa !35
  %71 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 16
  store i32 %70, ptr %71, align 4, !tbaa !36
  %72 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %73 = getelementptr inbounds %class.DynamicParameter, ptr %72, i32 0, i32 49
  %74 = load i32, ptr %73, align 4, !tbaa !37
  %75 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 17
  store i32 %74, ptr %75, align 8, !tbaa !38
  %76 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %77 = getelementptr inbounds %class.DynamicParameter, ptr %76, i32 0, i32 51
  %78 = load i32, ptr %77, align 4, !tbaa !39
  %79 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 18
  store i32 %78, ptr %79, align 4, !tbaa !40
  br label %109

80:                                               ; preds = %2
  %81 = landingpad { ptr, i32 }
          cleanup
  %82 = extractvalue { ptr, i32 } %81, 0
  store ptr %82, ptr %5, align 8
  %83 = extractvalue { ptr, i32 } %81, 1
  store i32 %83, ptr %6, align 4
  br label %489

84:                                               ; preds = %15
  %85 = landingpad { ptr, i32 }
          cleanup
  %86 = extractvalue { ptr, i32 } %85, 0
  store ptr %86, ptr %5, align 8
  %87 = extractvalue { ptr, i32 } %85, 1
  store i32 %87, ptr %6, align 4
  br label %488

88:                                               ; preds = %44, %39, %32
  %89 = landingpad { ptr, i32 }
          cleanup
  %90 = extractvalue { ptr, i32 } %89, 0
  store ptr %90, ptr %5, align 8
  %91 = extractvalue { ptr, i32 } %89, 1
  store i32 %91, ptr %6, align 4
  br label %487

92:                                               ; preds = %52
  %93 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %94 = getelementptr inbounds %class.InputParameter, ptr %93, i32 0, i32 14
  %95 = load i32, ptr %94, align 8, !tbaa !41
  %96 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 15
  store i32 %95, ptr %96, align 8, !tbaa !34
  %97 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %98 = getelementptr inbounds %class.InputParameter, ptr %97, i32 0, i32 15
  %99 = load i32, ptr %98, align 4, !tbaa !42
  %100 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 16
  store i32 %99, ptr %100, align 4, !tbaa !36
  %101 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %102 = getelementptr inbounds %class.InputParameter, ptr %101, i32 0, i32 16
  %103 = load i32, ptr %102, align 8, !tbaa !43
  %104 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 17
  store i32 %103, ptr %104, align 8, !tbaa !38
  %105 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %106 = getelementptr inbounds %class.InputParameter, ptr %105, i32 0, i32 18
  %107 = load i32, ptr %106, align 8, !tbaa !44
  %108 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 18
  store i32 %107, ptr %108, align 4, !tbaa !40
  br label %109

109:                                              ; preds = %92, %63
  %110 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %111 = getelementptr inbounds %class.DynamicParameter, ptr %110, i32 0, i32 15
  %112 = load i32, ptr %111, align 4, !tbaa !45
  %113 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %114 = getelementptr inbounds %class.DynamicParameter, ptr %113, i32 0, i32 16
  %115 = load i32, ptr %114, align 8, !tbaa !46
  %116 = add nsw i32 %112, %115
  %117 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 15
  %118 = load i32, ptr %117, align 8, !tbaa !34
  %119 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 16
  %120 = load i32, ptr %119, align 4, !tbaa !36
  %121 = add nsw i32 %118, %120
  %122 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 17
  %123 = load i32, ptr %122, align 8, !tbaa !38
  %124 = add nsw i32 %121, %123
  %125 = mul nsw i32 %116, %124
  %126 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  store i32 %125, ptr %126, align 4, !tbaa !47
  %127 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %128 = getelementptr inbounds %class.DynamicParameter, ptr %127, i32 0, i32 17
  %129 = load i32, ptr %128, align 4, !tbaa !48
  %130 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 15
  %131 = load i32, ptr %130, align 8, !tbaa !34
  %132 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 17
  %133 = load i32, ptr %132, align 8, !tbaa !38
  %134 = add nsw i32 %131, %133
  %135 = mul nsw i32 %129, %134
  %136 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  store i32 %135, ptr %136, align 8, !tbaa !49
  %137 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %138 = getelementptr inbounds %class.DynamicParameter, ptr %137, i32 0, i32 18
  %139 = load i32, ptr %138, align 8, !tbaa !50
  %140 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 15
  %141 = load i32, ptr %140, align 8, !tbaa !34
  %142 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 16
  %143 = load i32, ptr %142, align 4, !tbaa !36
  %144 = add nsw i32 %141, %143
  %145 = mul nsw i32 %139, %144
  %146 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  store i32 %145, ptr %146, align 4, !tbaa !51
  %147 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %148 = getelementptr inbounds %class.DynamicParameter, ptr %147, i32 0, i32 27
  %149 = load i32, ptr %148, align 4, !tbaa !52
  %150 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 18
  %151 = load i32, ptr %150, align 4, !tbaa !40
  %152 = mul nsw i32 %149, %151
  %153 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 13
  store i32 %152, ptr %153, align 8, !tbaa !53
  %154 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %155 = getelementptr inbounds %class.DynamicParameter, ptr %154, i32 0, i32 28
  %156 = load i32, ptr %155, align 8, !tbaa !54
  %157 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 18
  %158 = load i32, ptr %157, align 4, !tbaa !40
  %159 = mul nsw i32 %156, %158
  %160 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 14
  store i32 %159, ptr %160, align 4, !tbaa !55
  %161 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %162 = getelementptr inbounds %class.DynamicParameter, ptr %161, i32 0, i32 3
  %163 = load i8, ptr %162, align 1, !tbaa !56, !range !57, !noundef !58
  %164 = trunc i8 %163 to i1
  br i1 %164, label %281, label %165

165:                                              ; preds = %109
  %166 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %167 = getelementptr inbounds %class.DynamicParameter, ptr %166, i32 0, i32 2
  %168 = load i8, ptr %167, align 2, !tbaa !59, !range !57, !noundef !58
  %169 = trunc i8 %168 to i1
  br i1 %169, label %281, label %170

170:                                              ; preds = %165
  %171 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %172 = getelementptr inbounds %class.InputParameter, ptr %171, i32 0, i32 76
  %173 = load i8, ptr %172, align 4, !tbaa !60, !range !57, !noundef !58
  %174 = trunc i8 %173 to i1
  br i1 %174, label %175, label %189

175:                                              ; preds = %170
  %176 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %177 = getelementptr inbounds %class.DynamicParameter, ptr %176, i32 0, i32 0
  %178 = load i8, ptr %177, align 8, !tbaa !61, !range !57, !noundef !58
  %179 = trunc i8 %178 to i1
  %180 = zext i1 %179 to i32
  %181 = icmp eq i32 %180, 0
  br i1 %181, label %182, label %189

182:                                              ; preds = %175
  %183 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %184 = getelementptr inbounds %class.InputParameter, ptr %183, i32 0, i32 79
  %185 = load i32, ptr %184, align 8, !tbaa !62
  %186 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %187 = load i32, ptr %186, align 4, !tbaa !51
  %188 = mul i32 %187, %185
  store i32 %188, ptr %186, align 4, !tbaa !51
  br label %189

189:                                              ; preds = %182, %175, %170
  %190 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %191 unwind label %265

191:                                              ; preds = %189
  %192 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %193 = getelementptr inbounds %class.InputParameter, ptr %192, i32 0, i32 39
  %194 = load i32, ptr %193, align 8, !tbaa !63
  %195 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %196 = getelementptr inbounds %class.Component, ptr %195, i32 0, i32 0
  %197 = getelementptr inbounds %class.Area, ptr %196, i32 0, i32 0
  %198 = load double, ptr %197, align 8, !tbaa !31
  %199 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %200 = getelementptr inbounds %class.Component, ptr %199, i32 0, i32 0
  %201 = getelementptr inbounds %class.Area, ptr %200, i32 0, i32 1
  %202 = load double, ptr %201, align 8, !tbaa !30
  %203 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %204 = load i32, ptr %203, align 4, !tbaa !47
  %205 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %206 = load i32, ptr %205, align 8, !tbaa !49
  %207 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %208 = load i32, ptr %207, align 4, !tbaa !51
  %209 = load i32, ptr %7, align 4, !tbaa !12
  %210 = mul nsw i32 %209, 2
  %211 = load i32, ptr %8, align 4, !tbaa !12
  %212 = mul nsw i32 %211, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %190, i32 noundef %194, double noundef %198, double noundef %202, i32 noundef %204, i32 noundef %206, i32 noundef 0, i32 noundef %208, i32 noundef 0, i32 noundef %210, i32 noundef %212, i32 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %213 unwind label %269

213:                                              ; preds = %191
  %214 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 3
  store ptr %190, ptr %214, align 8, !tbaa !64
  %215 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %216 unwind label %265

216:                                              ; preds = %213
  %217 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %218 = getelementptr inbounds %class.InputParameter, ptr %217, i32 0, i32 39
  %219 = load i32, ptr %218, align 8, !tbaa !63
  %220 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %221 = getelementptr inbounds %class.Component, ptr %220, i32 0, i32 0
  %222 = getelementptr inbounds %class.Area, ptr %221, i32 0, i32 0
  %223 = load double, ptr %222, align 8, !tbaa !31
  %224 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %225 = getelementptr inbounds %class.Component, ptr %224, i32 0, i32 0
  %226 = getelementptr inbounds %class.Area, ptr %225, i32 0, i32 1
  %227 = load double, ptr %226, align 8, !tbaa !30
  %228 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %229 = load i32, ptr %228, align 4, !tbaa !47
  %230 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %231 = load i32, ptr %230, align 8, !tbaa !49
  %232 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %233 = load i32, ptr %232, align 4, !tbaa !51
  %234 = load i32, ptr %7, align 4, !tbaa !12
  %235 = mul nsw i32 %234, 2
  %236 = load i32, ptr %8, align 4, !tbaa !12
  %237 = mul nsw i32 %236, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %215, i32 noundef %219, double noundef %223, double noundef %227, i32 noundef %229, i32 noundef %231, i32 noundef 0, i32 noundef %233, i32 noundef 0, i32 noundef %235, i32 noundef %237, i32 noundef 1, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %238 unwind label %273

238:                                              ; preds = %216
  %239 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 4
  store ptr %215, ptr %239, align 8, !tbaa !65
  %240 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %241 unwind label %265

241:                                              ; preds = %238
  %242 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %243 = getelementptr inbounds %class.InputParameter, ptr %242, i32 0, i32 39
  %244 = load i32, ptr %243, align 8, !tbaa !63
  %245 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %246 = getelementptr inbounds %class.Component, ptr %245, i32 0, i32 0
  %247 = getelementptr inbounds %class.Area, ptr %246, i32 0, i32 0
  %248 = load double, ptr %247, align 8, !tbaa !31
  %249 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %250 = getelementptr inbounds %class.Component, ptr %249, i32 0, i32 0
  %251 = getelementptr inbounds %class.Area, ptr %250, i32 0, i32 1
  %252 = load double, ptr %251, align 8, !tbaa !30
  %253 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %254 = load i32, ptr %253, align 4, !tbaa !47
  %255 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %256 = load i32, ptr %255, align 8, !tbaa !49
  %257 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %258 = load i32, ptr %257, align 4, !tbaa !51
  %259 = load i32, ptr %7, align 4, !tbaa !12
  %260 = mul nsw i32 %259, 2
  %261 = load i32, ptr %8, align 4, !tbaa !12
  %262 = mul nsw i32 %261, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %240, i32 noundef %244, double noundef %248, double noundef %252, i32 noundef %254, i32 noundef %256, i32 noundef 0, i32 noundef %258, i32 noundef 0, i32 noundef %260, i32 noundef %262, i32 noundef 2, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %263 unwind label %277

263:                                              ; preds = %241
  %264 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 5
  store ptr %240, ptr %264, align 8, !tbaa !66
  br label %447

265:                                              ; preds = %447, %396, %367, %338, %309, %281, %238, %213, %189
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %5, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %6, align 4
  br label %486

269:                                              ; preds = %191
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %5, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %190, i64 noundef 544) #9
  br label %486

273:                                              ; preds = %216
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %5, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %215, i64 noundef 544) #9
  br label %486

277:                                              ; preds = %241
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %5, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %240, i64 noundef 544) #9
  br label %486

281:                                              ; preds = %165, %109
  %282 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %283 unwind label %265

283:                                              ; preds = %281
  %284 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %285 = getelementptr inbounds %class.InputParameter, ptr %284, i32 0, i32 39
  %286 = load i32, ptr %285, align 8, !tbaa !63
  %287 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %288 = getelementptr inbounds %class.Component, ptr %287, i32 0, i32 0
  %289 = getelementptr inbounds %class.Area, ptr %288, i32 0, i32 0
  %290 = load double, ptr %289, align 8, !tbaa !31
  %291 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %292 = getelementptr inbounds %class.Component, ptr %291, i32 0, i32 0
  %293 = getelementptr inbounds %class.Area, ptr %292, i32 0, i32 1
  %294 = load double, ptr %293, align 8, !tbaa !30
  %295 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %296 = load i32, ptr %295, align 4, !tbaa !47
  %297 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %298 = load i32, ptr %297, align 8, !tbaa !49
  %299 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 13
  %300 = load i32, ptr %299, align 8, !tbaa !53
  %301 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %302 = load i32, ptr %301, align 4, !tbaa !51
  %303 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 14
  %304 = load i32, ptr %303, align 4, !tbaa !55
  %305 = load i32, ptr %7, align 4, !tbaa !12
  %306 = mul nsw i32 %305, 2
  %307 = load i32, ptr %8, align 4, !tbaa !12
  %308 = mul nsw i32 %307, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %282, i32 noundef %286, double noundef %290, double noundef %294, i32 noundef %296, i32 noundef %298, i32 noundef %300, i32 noundef %302, i32 noundef %304, i32 noundef %306, i32 noundef %308, i32 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %309 unwind label %427

309:                                              ; preds = %283
  %310 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 3
  store ptr %282, ptr %310, align 8, !tbaa !64
  %311 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %312 unwind label %265

312:                                              ; preds = %309
  %313 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %314 = getelementptr inbounds %class.InputParameter, ptr %313, i32 0, i32 39
  %315 = load i32, ptr %314, align 8, !tbaa !63
  %316 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %317 = getelementptr inbounds %class.Component, ptr %316, i32 0, i32 0
  %318 = getelementptr inbounds %class.Area, ptr %317, i32 0, i32 0
  %319 = load double, ptr %318, align 8, !tbaa !31
  %320 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %321 = getelementptr inbounds %class.Component, ptr %320, i32 0, i32 0
  %322 = getelementptr inbounds %class.Area, ptr %321, i32 0, i32 1
  %323 = load double, ptr %322, align 8, !tbaa !30
  %324 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %325 = load i32, ptr %324, align 4, !tbaa !47
  %326 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %327 = load i32, ptr %326, align 8, !tbaa !49
  %328 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 13
  %329 = load i32, ptr %328, align 8, !tbaa !53
  %330 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %331 = load i32, ptr %330, align 4, !tbaa !51
  %332 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 14
  %333 = load i32, ptr %332, align 4, !tbaa !55
  %334 = load i32, ptr %7, align 4, !tbaa !12
  %335 = mul nsw i32 %334, 2
  %336 = load i32, ptr %8, align 4, !tbaa !12
  %337 = mul nsw i32 %336, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %311, i32 noundef %315, double noundef %319, double noundef %323, i32 noundef %325, i32 noundef %327, i32 noundef %329, i32 noundef %331, i32 noundef %333, i32 noundef %335, i32 noundef %337, i32 noundef 1, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %338 unwind label %431

338:                                              ; preds = %312
  %339 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 4
  store ptr %311, ptr %339, align 8, !tbaa !65
  %340 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %341 unwind label %265

341:                                              ; preds = %338
  %342 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %343 = getelementptr inbounds %class.InputParameter, ptr %342, i32 0, i32 39
  %344 = load i32, ptr %343, align 8, !tbaa !63
  %345 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %346 = getelementptr inbounds %class.Component, ptr %345, i32 0, i32 0
  %347 = getelementptr inbounds %class.Area, ptr %346, i32 0, i32 0
  %348 = load double, ptr %347, align 8, !tbaa !31
  %349 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %350 = getelementptr inbounds %class.Component, ptr %349, i32 0, i32 0
  %351 = getelementptr inbounds %class.Area, ptr %350, i32 0, i32 1
  %352 = load double, ptr %351, align 8, !tbaa !30
  %353 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %354 = load i32, ptr %353, align 4, !tbaa !47
  %355 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %356 = load i32, ptr %355, align 8, !tbaa !49
  %357 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 13
  %358 = load i32, ptr %357, align 8, !tbaa !53
  %359 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %360 = load i32, ptr %359, align 4, !tbaa !51
  %361 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 14
  %362 = load i32, ptr %361, align 4, !tbaa !55
  %363 = load i32, ptr %7, align 4, !tbaa !12
  %364 = mul nsw i32 %363, 2
  %365 = load i32, ptr %8, align 4, !tbaa !12
  %366 = mul nsw i32 %365, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %340, i32 noundef %344, double noundef %348, double noundef %352, i32 noundef %354, i32 noundef %356, i32 noundef %358, i32 noundef %360, i32 noundef %362, i32 noundef %364, i32 noundef %366, i32 noundef 2, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %367 unwind label %435

367:                                              ; preds = %341
  %368 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 5
  store ptr %340, ptr %368, align 8, !tbaa !66
  %369 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %370 unwind label %265

370:                                              ; preds = %367
  %371 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %372 = getelementptr inbounds %class.InputParameter, ptr %371, i32 0, i32 39
  %373 = load i32, ptr %372, align 8, !tbaa !63
  %374 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %375 = getelementptr inbounds %class.Component, ptr %374, i32 0, i32 0
  %376 = getelementptr inbounds %class.Area, ptr %375, i32 0, i32 0
  %377 = load double, ptr %376, align 8, !tbaa !31
  %378 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %379 = getelementptr inbounds %class.Component, ptr %378, i32 0, i32 0
  %380 = getelementptr inbounds %class.Area, ptr %379, i32 0, i32 1
  %381 = load double, ptr %380, align 8, !tbaa !30
  %382 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %383 = load i32, ptr %382, align 4, !tbaa !47
  %384 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %385 = load i32, ptr %384, align 8, !tbaa !49
  %386 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 13
  %387 = load i32, ptr %386, align 8, !tbaa !53
  %388 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %389 = load i32, ptr %388, align 4, !tbaa !51
  %390 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 14
  %391 = load i32, ptr %390, align 4, !tbaa !55
  %392 = load i32, ptr %7, align 4, !tbaa !12
  %393 = mul nsw i32 %392, 2
  %394 = load i32, ptr %8, align 4, !tbaa !12
  %395 = mul nsw i32 %394, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %369, i32 noundef %373, double noundef %377, double noundef %381, i32 noundef %383, i32 noundef %385, i32 noundef %387, i32 noundef %389, i32 noundef %391, i32 noundef %393, i32 noundef %395, i32 noundef 1, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %396 unwind label %439

396:                                              ; preds = %370
  %397 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 6
  store ptr %369, ptr %397, align 8, !tbaa !67
  %398 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 544) #8
          to label %399 unwind label %265

399:                                              ; preds = %396
  %400 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %401 = getelementptr inbounds %class.InputParameter, ptr %400, i32 0, i32 39
  %402 = load i32, ptr %401, align 8, !tbaa !63
  %403 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %404 = getelementptr inbounds %class.Component, ptr %403, i32 0, i32 0
  %405 = getelementptr inbounds %class.Area, ptr %404, i32 0, i32 0
  %406 = load double, ptr %405, align 8, !tbaa !31
  %407 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %408 = getelementptr inbounds %class.Component, ptr %407, i32 0, i32 0
  %409 = getelementptr inbounds %class.Area, ptr %408, i32 0, i32 1
  %410 = load double, ptr %409, align 8, !tbaa !30
  %411 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 10
  %412 = load i32, ptr %411, align 4, !tbaa !47
  %413 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 11
  %414 = load i32, ptr %413, align 8, !tbaa !49
  %415 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 13
  %416 = load i32, ptr %415, align 8, !tbaa !53
  %417 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 12
  %418 = load i32, ptr %417, align 4, !tbaa !51
  %419 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 14
  %420 = load i32, ptr %419, align 4, !tbaa !55
  %421 = load i32, ptr %7, align 4, !tbaa !12
  %422 = mul nsw i32 %421, 2
  %423 = load i32, ptr %8, align 4, !tbaa !12
  %424 = mul nsw i32 %423, 2
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %398, i32 noundef %402, double noundef %406, double noundef %410, i32 noundef %412, i32 noundef %414, i32 noundef %416, i32 noundef %418, i32 noundef %420, i32 noundef %422, i32 noundef %424, i32 noundef 2, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %425 unwind label %443

425:                                              ; preds = %399
  %426 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 7
  store ptr %398, ptr %426, align 8, !tbaa !68
  br label %447

427:                                              ; preds = %283
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %5, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %282, i64 noundef 544) #9
  br label %486

431:                                              ; preds = %312
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %5, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %311, i64 noundef 544) #9
  br label %486

435:                                              ; preds = %341
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %5, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %340, i64 noundef 544) #9
  br label %486

439:                                              ; preds = %370
  %440 = landingpad { ptr, i32 }
          cleanup
  %441 = extractvalue { ptr, i32 } %440, 0
  store ptr %441, ptr %5, align 8
  %442 = extractvalue { ptr, i32 } %440, 1
  store i32 %442, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %369, i64 noundef 544) #9
  br label %486

443:                                              ; preds = %399
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %5, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %398, i64 noundef 544) #9
  br label %486

447:                                              ; preds = %425, %263
  %448 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 4
  %449 = load ptr, ptr %448, align 8, !tbaa !65
  %450 = getelementptr inbounds %class.Component, ptr %449, i32 0, i32 0
  %451 = getelementptr inbounds %class.Area, ptr %450, i32 0, i32 0
  %452 = load double, ptr %451, align 8, !tbaa !31
  %453 = getelementptr inbounds %class.Component, ptr %10, i32 0, i32 0
  %454 = getelementptr inbounds %class.Area, ptr %453, i32 0, i32 0
  store double %452, ptr %454, align 8, !tbaa !31
  %455 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 4
  %456 = load ptr, ptr %455, align 8, !tbaa !65
  %457 = getelementptr inbounds %class.Component, ptr %456, i32 0, i32 0
  %458 = getelementptr inbounds %class.Area, ptr %457, i32 0, i32 1
  %459 = load double, ptr %458, align 8, !tbaa !30
  %460 = getelementptr inbounds %class.Component, ptr %10, i32 0, i32 0
  %461 = getelementptr inbounds %class.Area, ptr %460, i32 0, i32 1
  store double %459, ptr %461, align 8, !tbaa !30
  %462 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 2
  %463 = getelementptr inbounds %class.Bank, ptr %462, i32 0, i32 2
  %464 = getelementptr inbounds %class.Mat, ptr %463, i32 0, i32 45
  %465 = invoke noundef double @_ZN8Subarray19get_total_cell_areaEv(ptr noundef nonnull align 8 dereferenceable(424) %464)
          to label %466 unwind label %265

466:                                              ; preds = %447
  %467 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 1
  %468 = getelementptr inbounds %class.DynamicParameter, ptr %467, i32 0, i32 5
  %469 = load i32, ptr %468, align 8, !tbaa !69
  %470 = sitofp i32 %469 to double
  %471 = fmul double %465, %470
  %472 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %473 = getelementptr inbounds %class.InputParameter, ptr %472, i32 0, i32 3
  %474 = load i32, ptr %473, align 4, !tbaa !16
  %475 = uitofp i32 %474 to double
  %476 = fmul double %471, %475
  %477 = getelementptr inbounds %class.UCA, ptr %10, i32 0, i32 19
  store double %476, ptr %477, align 8, !tbaa !70
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  store double 0.000000e+00, ptr %9, align 8, !tbaa !14
  %478 = load double, ptr %9, align 8, !tbaa !14
  %479 = invoke noundef double @_ZN3UCA14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(4320) %10, double noundef %478)
          to label %480 unwind label %482

480:                                              ; preds = %466
  invoke void @_ZN3UCA20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(4320) %10)
          to label %481 unwind label %482

481:                                              ; preds = %480
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  ret void

482:                                              ; preds = %480, %466
  %483 = landingpad { ptr, i32 }
          cleanup
  %484 = extractvalue { ptr, i32 } %483, 0
  store ptr %484, ptr %5, align 8
  %485 = extractvalue { ptr, i32 } %483, 1
  store i32 %485, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %486

486:                                              ; preds = %482, %443, %439, %435, %431, %427, %277, %273, %269, %265
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  br label %487

487:                                              ; preds = %486, %88
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  br label %488

488:                                              ; preds = %487, %84
  call void @_ZN4BankD1Ev(ptr noundef nonnull align 8 dereferenceable(3416) %13) #7
  br label %489

489:                                              ; preds = %488, %80
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280) %10) #7
  br label %490

490:                                              ; preds = %489
  %491 = load ptr, ptr %5, align 8
  %492 = load i32, ptr %6, align 4
  %493 = insertvalue { ptr, i32 } poison, ptr %491, 0
  %494 = insertvalue { ptr, i32 } %493, i32 %492, 1
  resume { ptr, i32 } %494
}

declare void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280)) unnamed_addr #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

declare void @_ZN4BankC1ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(3416), ptr noundef nonnull align 8 dereferenceable(265)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #0 align 2

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

declare noundef i32 @_Z5_log2m(i64 noundef) #1

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

declare void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544), i32 noundef, double noundef, double noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, ptr noundef) unnamed_addr #1

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

declare noundef double @_ZN8Subarray19get_total_cell_areaEv(ptr noundef nonnull align 8 dereferenceable(424)) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN3UCA14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(4320), double noundef) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3UCA20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(4320)) #0 align 2

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

; Function Attrs: nounwind
declare void @_ZN4BankD1Ev(ptr noundef nonnull align 8 dereferenceable(3416)) unnamed_addr #6

; Function Attrs: nounwind
declare void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280)) unnamed_addr #6

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { builtin allocsize(0) }
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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{i64 0, i64 1, !10, i64 1, i64 1, !10, i64 2, i64 1, !10, i64 3, i64 1, !10, i64 4, i64 4, !12, i64 8, i64 4, !12, i64 12, i64 4, !12, i64 16, i64 8, !14, i64 24, i64 4, !12, i64 28, i64 4, !12, i64 32, i64 4, !12, i64 36, i64 4, !12, i64 40, i64 4, !12, i64 44, i64 4, !12, i64 48, i64 4, !12, i64 52, i64 4, !12, i64 56, i64 4, !12, i64 60, i64 4, !12, i64 64, i64 4, !12, i64 68, i64 4, !12, i64 72, i64 4, !12, i64 76, i64 4, !12, i64 80, i64 4, !12, i64 84, i64 4, !12, i64 88, i64 4, !12, i64 92, i64 4, !12, i64 96, i64 4, !12, i64 100, i64 4, !12, i64 104, i64 4, !12, i64 108, i64 4, !12, i64 112, i64 4, !12, i64 116, i64 4, !12, i64 120, i64 1, !10, i64 128, i64 8, !14, i64 136, i64 4, !12, i64 140, i64 4, !12, i64 144, i64 4, !12, i64 148, i64 4, !12, i64 152, i64 4, !12, i64 156, i64 4, !12, i64 160, i64 4, !12, i64 164, i64 4, !12, i64 168, i64 4, !12, i64 176, i64 8, !14, i64 184, i64 4, !12, i64 188, i64 4, !12, i64 192, i64 4, !12, i64 196, i64 4, !12, i64 200, i64 4, !12, i64 204, i64 4, !12, i64 208, i64 4, !12, i64 212, i64 1, !10, i64 216, i64 8, !14, i64 224, i64 8, !14, i64 232, i64 8, !14, i64 240, i64 8, !14, i64 248, i64 8, !14, i64 256, i64 8, !14, i64 264, i64 1, !10}
!10 = !{!11, !11, i64 0}
!11 = !{!"bool", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!17, !13, i64 12}
!17 = !{!"_ZTS14InputParameter", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !11, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !15, i64 48, !15, i64 56, !13, i64 64, !13, i64 68, !13, i64 72, !13, i64 76, !13, i64 80, !11, i64 84, !11, i64 85, !11, i64 86, !11, i64 87, !11, i64 88, !13, i64 92, !13, i64 96, !13, i64 100, !13, i64 104, !13, i64 108, !13, i64 112, !13, i64 116, !13, i64 120, !13, i64 124, !13, i64 128, !13, i64 132, !13, i64 136, !13, i64 140, !13, i64 144, !13, i64 148, !18, i64 152, !13, i64 156, !11, i64 160, !13, i64 164, !13, i64 168, !13, i64 172, !13, i64 176, !13, i64 180, !13, i64 184, !13, i64 188, !11, i64 192, !13, i64 196, !13, i64 200, !13, i64 204, !13, i64 208, !13, i64 212, !13, i64 216, !13, i64 220, !13, i64 224, !13, i64 228, !13, i64 232, !13, i64 236, !13, i64 240, !13, i64 244, !13, i64 248, !13, i64 252, !13, i64 256, !13, i64 260, !13, i64 264, !13, i64 268, !13, i64 272, !13, i64 276, !13, i64 280, !13, i64 284, !13, i64 288, !13, i64 292, !13, i64 296, !11, i64 300, !13, i64 304, !13, i64 308, !13, i64 312, !11, i64 316, !11, i64 317, !13, i64 320, !13, i64 324, !11, i64 328, !15, i64 336, !15, i64 344, !11, i64 352, !13, i64 356, !13, i64 360, !11, i64 364}
!18 = !{!"_ZTS9Wire_type", !7, i64 0}
!19 = !{!20, !13, i64 4128}
!20 = !{!"_ZTS3UCA", !21, i64 0, !25, i64 280, !26, i64 552, !6, i64 3968, !6, i64 3976, !6, i64 3984, !6, i64 3992, !6, i64 4000, !23, i64 4008, !13, i64 4128, !13, i64 4132, !13, i64 4136, !13, i64 4140, !13, i64 4144, !13, i64 4148, !13, i64 4152, !13, i64 4156, !13, i64 4160, !13, i64 4164, !15, i64 4168, !15, i64 4176, !15, i64 4184, !15, i64 4192, !15, i64 4200, !15, i64 4208, !15, i64 4216, !15, i64 4224, !15, i64 4232, !15, i64 4240, !15, i64 4248, !15, i64 4256, !15, i64 4264, !15, i64 4272, !15, i64 4280, !15, i64 4288, !15, i64 4296, !15, i64 4304, !15, i64 4312}
!21 = !{!"_ZTS9Component", !22, i64 0, !23, i64 24, !23, i64 144, !15, i64 264, !15, i64 272}
!22 = !{!"_ZTS4Area", !15, i64 0, !15, i64 8, !15, i64 16}
!23 = !{!"_ZTS8powerDef", !24, i64 0, !24, i64 40, !24, i64 80}
!24 = !{!"_ZTS15powerComponents", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32}
!25 = !{!"_ZTS16DynamicParameter", !11, i64 0, !11, i64 1, !11, i64 2, !11, i64 3, !13, i64 4, !13, i64 8, !13, i64 12, !15, i64 16, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !13, i64 76, !13, i64 80, !13, i64 84, !13, i64 88, !13, i64 92, !13, i64 96, !13, i64 100, !13, i64 104, !13, i64 108, !13, i64 112, !13, i64 116, !11, i64 120, !15, i64 128, !13, i64 136, !13, i64 140, !13, i64 144, !13, i64 148, !13, i64 152, !13, i64 156, !13, i64 160, !13, i64 164, !13, i64 168, !15, i64 176, !13, i64 184, !13, i64 188, !13, i64 192, !13, i64 196, !13, i64 200, !13, i64 204, !13, i64 208, !11, i64 212, !22, i64 216, !22, i64 240, !11, i64 264}
!26 = !{!"_ZTS4Bank", !21, i64 0, !6, i64 280, !27, i64 288, !6, i64 3352, !6, i64 3360, !6, i64 3368, !6, i64 3376, !6, i64 3384, !13, i64 3392, !13, i64 3396, !13, i64 3400, !13, i64 3404, !13, i64 3408, !13, i64 3412}
!27 = !{!"_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, !15, i64 1760, !15, i64 1768, !15, i64 1776, !15, i64 1784, !15, i64 1792, !15, i64 1800, !15, i64 1808, !15, i64 1816, !15, i64 1824, !15, i64 1832, !15, i64 1840, !15, i64 1848, !15, i64 1856, !28, i64 1864, !23, i64 2288, !23, i64 2408, !23, i64 2528, !15, i64 2648, !13, i64 2656, !13, i64 2660, !15, i64 2664, !22, i64 2672, !22, i64 2696, !11, i64 2720, !11, i64 2721, !11, i64 2722, !11, i64 2723, !13, i64 2724, !23, i64 2728, !15, i64 2848, !15, i64 2856, !15, i64 2864, !15, i64 2872, !15, i64 2880, !15, i64 2888, !23, i64 2896, !13, i64 3016, !13, i64 3020, !13, i64 3024, !13, i64 3028, !15, i64 3032, !13, i64 3040, !13, i64 3044, !13, i64 3048, !13, i64 3052, !13, i64 3056, !13, i64 3060}
!28 = !{!"_ZTS8Subarray", !21, i64 0, !6, i64 280, !13, i64 288, !13, i64 292, !13, i64 296, !13, i64 300, !22, i64 304, !22, i64 328, !11, i64 352, !15, i64 360, !15, i64 368, !15, i64 376, !15, i64 384, !15, i64 392, !15, i64 400, !15, i64 408, !15, i64 416}
!29 = !{!20, !15, i64 4200}
!30 = !{!21, !15, i64 8}
!31 = !{!21, !15, i64 0}
!32 = !{!20, !13, i64 464}
!33 = !{!20, !13, i64 468}
!34 = !{!20, !13, i64 4152}
!35 = !{!20, !13, i64 472}
!36 = !{!20, !13, i64 4156}
!37 = !{!20, !13, i64 476}
!38 = !{!20, !13, i64 4160}
!39 = !{!20, !13, i64 484}
!40 = !{!20, !13, i64 4164}
!41 = !{!17, !13, i64 64}
!42 = !{!17, !13, i64 68}
!43 = !{!17, !13, i64 72}
!44 = !{!17, !13, i64 80}
!45 = !{!20, !13, i64 332}
!46 = !{!20, !13, i64 336}
!47 = !{!20, !13, i64 4132}
!48 = !{!20, !13, i64 340}
!49 = !{!20, !13, i64 4136}
!50 = !{!20, !13, i64 344}
!51 = !{!20, !13, i64 4140}
!52 = !{!20, !13, i64 380}
!53 = !{!20, !13, i64 4144}
!54 = !{!20, !13, i64 384}
!55 = !{!20, !13, i64 4148}
!56 = !{!20, !11, i64 283}
!57 = !{i8 0, i8 2}
!58 = !{}
!59 = !{!20, !11, i64 282}
!60 = !{!17, !11, i64 300}
!61 = !{!20, !11, i64 280}
!62 = !{!17, !13, i64 312}
!63 = !{!17, !18, i64 152}
!64 = !{!20, !6, i64 3968}
!65 = !{!20, !6, i64 3976}
!66 = !{!20, !6, i64 3984}
!67 = !{!20, !6, i64 3992}
!68 = !{!20, !6, i64 4000}
!69 = !{!20, !13, i64 288}
!70 = !{!20, !15, i64 4168}


; 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 global %class.TechnologyParameter, align 8

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3UCAC2ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(4320) %0, ptr nocapture noundef nonnull readonly align 8 dereferenceable(265) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  tail call void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %0)
  %3 = getelementptr inbounds i8, ptr %0, i64 280
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(272) %3, ptr noundef nonnull align 8 dereferenceable(272) %1, i64 272, i1 false), !tbaa.struct !5
  %4 = getelementptr inbounds i8, ptr %0, i64 552
  invoke void @_ZN4BankC1ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(3416) %4, ptr noundef nonnull align 8 dereferenceable(265) %3)
          to label %5 unwind label %42

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 4008
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %6)
          to label %7 unwind label %44

7:                                                ; preds = %5
  %8 = getelementptr inbounds i8, ptr %0, i64 4128
  %9 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %10 = getelementptr inbounds i8, ptr %9, i64 12
  %11 = load i32, ptr %10, align 4, !tbaa !16
  store i32 %11, ptr %8, align 8, !tbaa !19
  %12 = getelementptr inbounds i8, ptr %0, i64 4200
  store double 0.000000e+00, ptr %12, align 8, !tbaa !29
  %13 = getelementptr inbounds i8, ptr %0, i64 560
  %14 = load double, ptr %13, align 8, !tbaa !30
  %15 = load double, ptr %4, align 8, !tbaa !31
  %16 = fcmp ogt double %14, %15
  %17 = zext i32 %11 to i64
  br i1 %16, label %18, label %22

18:                                               ; preds = %7
  %19 = invoke noundef i32 @_Z5_log2m(i64 noundef %17)
          to label %20 unwind label %46

20:                                               ; preds = %18
  %21 = lshr i32 %19, 1
  br label %31

22:                                               ; preds = %7
  %23 = invoke noundef i32 @_Z5_log2m(i64 noundef %17)
          to label %24 unwind label %46

24:                                               ; preds = %22
  %25 = load i32, ptr %8, align 8, !tbaa !19
  %26 = zext i32 %25 to i64
  %27 = invoke noundef i32 @_Z5_log2m(i64 noundef %26)
          to label %28 unwind label %46

28:                                               ; preds = %24
  %29 = lshr i32 %27, 1
  %30 = sub i32 %23, %29
  br label %31

31:                                               ; preds = %28, %20
  %32 = phi i32 [ %21, %20 ], [ %30, %28 ]
  %33 = load i32, ptr %8, align 8, !tbaa !19
  %34 = lshr i32 %33, %32
  %35 = getelementptr inbounds i8, ptr %0, i64 464
  %36 = load i32, ptr %35, align 8, !tbaa !32
  %.not = icmp eq i32 %36, 0
  br i1 %.not, label %48, label %37

37:                                               ; preds = %31
  %38 = getelementptr inbounds i8, ptr %0, i64 468
  %39 = getelementptr inbounds i8, ptr %0, i64 472
  %40 = getelementptr inbounds i8, ptr %0, i64 476
  %41 = getelementptr inbounds i8, ptr %0, i64 484
  br label %54

42:                                               ; preds = %2
  %43 = landingpad { ptr, i32 }
          cleanup
  br label %245

44:                                               ; preds = %5
  %45 = landingpad { ptr, i32 }
          cleanup
  br label %244

46:                                               ; preds = %24, %22, %18
  %47 = landingpad { ptr, i32 }
          cleanup
  br label %244

48:                                               ; preds = %31
  %49 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %50 = getelementptr inbounds i8, ptr %49, i64 64
  %51 = getelementptr inbounds i8, ptr %49, i64 68
  %52 = getelementptr inbounds i8, ptr %49, i64 72
  %53 = getelementptr inbounds i8, ptr %49, i64 80
  br label %54

54:                                               ; preds = %48, %37
  %.sink32.in = phi ptr [ %50, %48 ], [ %38, %37 ]
  %.sink31.in = phi ptr [ %51, %48 ], [ %39, %37 ]
  %.sink30.in = phi ptr [ %52, %48 ], [ %40, %37 ]
  %.sink.in = phi ptr [ %53, %48 ], [ %41, %37 ]
  %.sink = load i32, ptr %.sink.in, align 4, !tbaa !10
  %.sink30 = load i32, ptr %.sink30.in, align 4, !tbaa !10
  %.sink31 = load i32, ptr %.sink31.in, align 4, !tbaa !10
  %.sink32 = load i32, ptr %.sink32.in, align 4, !tbaa !10
  %55 = getelementptr inbounds i8, ptr %0, i64 4152
  store i32 %.sink32, ptr %55, align 8
  %56 = getelementptr inbounds i8, ptr %0, i64 4156
  store i32 %.sink31, ptr %56, align 4
  %57 = getelementptr inbounds i8, ptr %0, i64 4160
  store i32 %.sink30, ptr %57, align 8
  %58 = getelementptr inbounds i8, ptr %0, i64 4164
  store i32 %.sink, ptr %58, align 4
  %59 = getelementptr inbounds i8, ptr %0, i64 332
  %60 = load i32, ptr %59, align 4, !tbaa !33
  %61 = getelementptr inbounds i8, ptr %0, i64 336
  %62 = load i32, ptr %61, align 8, !tbaa !34
  %63 = add nsw i32 %62, %60
  %64 = add nsw i32 %.sink31, %.sink32
  %65 = add nsw i32 %64, %.sink30
  %66 = mul nsw i32 %65, %63
  %67 = getelementptr inbounds i8, ptr %0, i64 4132
  store i32 %66, ptr %67, align 4, !tbaa !35
  %68 = getelementptr inbounds i8, ptr %0, i64 340
  %69 = load i32, ptr %68, align 4, !tbaa !36
  %70 = add nsw i32 %.sink30, %.sink32
  %71 = mul nsw i32 %69, %70
  %72 = getelementptr inbounds i8, ptr %0, i64 4136
  store i32 %71, ptr %72, align 8, !tbaa !37
  %73 = getelementptr inbounds i8, ptr %0, i64 344
  %74 = load i32, ptr %73, align 8, !tbaa !38
  %75 = mul nsw i32 %74, %64
  %76 = getelementptr inbounds i8, ptr %0, i64 4140
  store i32 %75, ptr %76, align 4, !tbaa !39
  %77 = getelementptr inbounds i8, ptr %0, i64 380
  %78 = load i32, ptr %77, align 4, !tbaa !40
  %79 = mul nsw i32 %.sink, %78
  %80 = getelementptr inbounds i8, ptr %0, i64 4144
  store i32 %79, ptr %80, align 8, !tbaa !41
  %81 = getelementptr inbounds i8, ptr %0, i64 384
  %82 = load i32, ptr %81, align 8, !tbaa !42
  %83 = mul nsw i32 %82, %.sink
  %84 = getelementptr inbounds i8, ptr %0, i64 4148
  store i32 %83, ptr %84, align 4, !tbaa !43
  %85 = getelementptr inbounds i8, ptr %0, i64 283
  %86 = load i8, ptr %85, align 1, !tbaa !44, !range !45, !noundef !46
  %87 = trunc nuw i8 %86 to i1
  br i1 %87, label %145, label %88

88:                                               ; preds = %54
  %89 = getelementptr inbounds i8, ptr %0, i64 282
  %90 = load i8, ptr %89, align 2, !tbaa !47, !range !45, !noundef !46
  %91 = trunc nuw i8 %90 to i1
  br i1 %91, label %145, label %92

92:                                               ; preds = %88
  %93 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %94 = getelementptr inbounds i8, ptr %93, i64 300
  %95 = load i8, ptr %94, align 4, !tbaa !48, !range !45, !noundef !46
  %96 = trunc nuw i8 %95 to i1
  %97 = load i8, ptr %3, align 8, !range !45
  %98 = icmp eq i8 %97, 0
  %or.cond = select i1 %96, i1 %98, i1 false
  br i1 %or.cond, label %99, label %103

99:                                               ; preds = %92
  %100 = getelementptr inbounds i8, ptr %93, i64 312
  %101 = load i32, ptr %100, align 8, !tbaa !49
  %102 = mul i32 %101, %75
  store i32 %102, ptr %76, align 4, !tbaa !39
  br label %103

103:                                              ; preds = %99, %92
  %104 = phi i32 [ %102, %99 ], [ %75, %92 ]
  %105 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %106 unwind label %137

106:                                              ; preds = %103
  %107 = getelementptr inbounds i8, ptr %93, i64 152
  %108 = load i32, ptr %107, align 8, !tbaa !50
  %109 = load double, ptr %4, align 8, !tbaa !31
  %110 = load double, ptr %13, align 8, !tbaa !30
  %111 = shl i32 2, %32
  %112 = shl nsw i32 %34, 1
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %105, i32 noundef %108, double noundef %109, double noundef %110, i32 noundef %66, i32 noundef %71, i32 noundef 0, i32 noundef %104, i32 noundef 0, i32 noundef %111, i32 noundef %112, i32 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %113 unwind label %139

113:                                              ; preds = %106
  %114 = getelementptr inbounds i8, ptr %0, i64 3968
  store ptr %105, ptr %114, align 8, !tbaa !51
  %115 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %116 unwind label %137

116:                                              ; preds = %113
  %117 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %118 = getelementptr inbounds i8, ptr %117, i64 152
  %119 = load i32, ptr %118, align 8, !tbaa !50
  %120 = load double, ptr %4, align 8, !tbaa !31
  %121 = load double, ptr %13, align 8, !tbaa !30
  %122 = load i32, ptr %67, align 4, !tbaa !35
  %123 = load i32, ptr %72, align 8, !tbaa !37
  %124 = load i32, ptr %76, align 4, !tbaa !39
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %115, i32 noundef %119, double noundef %120, double noundef %121, i32 noundef %122, i32 noundef %123, i32 noundef 0, i32 noundef %124, i32 noundef 0, i32 noundef %111, i32 noundef %112, i32 noundef 1, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %125 unwind label %141

125:                                              ; preds = %116
  %126 = getelementptr inbounds i8, ptr %0, i64 3976
  store ptr %115, ptr %126, align 8, !tbaa !52
  %127 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %128 unwind label %137

128:                                              ; preds = %125
  %129 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %130 = getelementptr inbounds i8, ptr %129, i64 152
  %131 = load i32, ptr %130, align 8, !tbaa !50
  %132 = load double, ptr %4, align 8, !tbaa !31
  %133 = load double, ptr %13, align 8, !tbaa !30
  %134 = load i32, ptr %67, align 4, !tbaa !35
  %135 = load i32, ptr %72, align 8, !tbaa !37
  %136 = load i32, ptr %76, align 4, !tbaa !39
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %127, i32 noundef %131, double noundef %132, double noundef %133, i32 noundef %134, i32 noundef %135, i32 noundef 0, i32 noundef %136, i32 noundef 0, i32 noundef %111, i32 noundef %112, i32 noundef 2, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %221 unwind label %143

137:                                              ; preds = %221, %197, %183, %169, %155, %145, %125, %113, %103
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %244

139:                                              ; preds = %106
  %140 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %105, i64 noundef 544) #7
  br label %244

141:                                              ; preds = %116
  %142 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %115, i64 noundef 544) #7
  br label %244

143:                                              ; preds = %128
  %144 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %127, i64 noundef 544) #7
  br label %244

145:                                              ; preds = %88, %54
  %146 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %147 unwind label %137

147:                                              ; preds = %145
  %148 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %149 = getelementptr inbounds i8, ptr %148, i64 152
  %150 = load i32, ptr %149, align 8, !tbaa !50
  %151 = load double, ptr %4, align 8, !tbaa !31
  %152 = load double, ptr %13, align 8, !tbaa !30
  %153 = shl i32 2, %32
  %154 = shl nsw i32 %34, 1
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %146, i32 noundef %150, double noundef %151, double noundef %152, i32 noundef %66, i32 noundef %71, i32 noundef %79, i32 noundef %75, i32 noundef %83, i32 noundef %153, i32 noundef %154, i32 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %155 unwind label %211

155:                                              ; preds = %147
  %156 = getelementptr inbounds i8, ptr %0, i64 3968
  store ptr %146, ptr %156, align 8, !tbaa !51
  %157 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %158 unwind label %137

158:                                              ; preds = %155
  %159 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %160 = getelementptr inbounds i8, ptr %159, i64 152
  %161 = load i32, ptr %160, align 8, !tbaa !50
  %162 = load double, ptr %4, align 8, !tbaa !31
  %163 = load double, ptr %13, align 8, !tbaa !30
  %164 = load i32, ptr %67, align 4, !tbaa !35
  %165 = load i32, ptr %72, align 8, !tbaa !37
  %166 = load i32, ptr %80, align 8, !tbaa !41
  %167 = load i32, ptr %76, align 4, !tbaa !39
  %168 = load i32, ptr %84, align 4, !tbaa !43
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %157, i32 noundef %161, double noundef %162, double noundef %163, i32 noundef %164, i32 noundef %165, i32 noundef %166, i32 noundef %167, i32 noundef %168, i32 noundef %153, i32 noundef %154, i32 noundef 1, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %169 unwind label %213

169:                                              ; preds = %158
  %170 = getelementptr inbounds i8, ptr %0, i64 3976
  store ptr %157, ptr %170, align 8, !tbaa !52
  %171 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %172 unwind label %137

172:                                              ; preds = %169
  %173 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %174 = getelementptr inbounds i8, ptr %173, i64 152
  %175 = load i32, ptr %174, align 8, !tbaa !50
  %176 = load double, ptr %4, align 8, !tbaa !31
  %177 = load double, ptr %13, align 8, !tbaa !30
  %178 = load i32, ptr %67, align 4, !tbaa !35
  %179 = load i32, ptr %72, align 8, !tbaa !37
  %180 = load i32, ptr %80, align 8, !tbaa !41
  %181 = load i32, ptr %76, align 4, !tbaa !39
  %182 = load i32, ptr %84, align 4, !tbaa !43
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %171, i32 noundef %175, double noundef %176, double noundef %177, i32 noundef %178, i32 noundef %179, i32 noundef %180, i32 noundef %181, i32 noundef %182, i32 noundef %153, i32 noundef %154, i32 noundef 2, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %183 unwind label %215

183:                                              ; preds = %172
  %184 = getelementptr inbounds i8, ptr %0, i64 3984
  store ptr %171, ptr %184, align 8, !tbaa !53
  %185 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %186 unwind label %137

186:                                              ; preds = %183
  %187 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %188 = getelementptr inbounds i8, ptr %187, i64 152
  %189 = load i32, ptr %188, align 8, !tbaa !50
  %190 = load double, ptr %4, align 8, !tbaa !31
  %191 = load double, ptr %13, align 8, !tbaa !30
  %192 = load i32, ptr %67, align 4, !tbaa !35
  %193 = load i32, ptr %72, align 8, !tbaa !37
  %194 = load i32, ptr %80, align 8, !tbaa !41
  %195 = load i32, ptr %76, align 4, !tbaa !39
  %196 = load i32, ptr %84, align 4, !tbaa !43
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %185, i32 noundef %189, double noundef %190, double noundef %191, i32 noundef %192, i32 noundef %193, i32 noundef %194, i32 noundef %195, i32 noundef %196, i32 noundef %153, i32 noundef %154, i32 noundef 1, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %197 unwind label %217

197:                                              ; preds = %186
  %198 = getelementptr inbounds i8, ptr %0, i64 3992
  store ptr %185, ptr %198, align 8, !tbaa !54
  %199 = invoke noalias noundef nonnull dereferenceable(544) ptr @_Znwm(i64 noundef 544) #6
          to label %200 unwind label %137

200:                                              ; preds = %197
  %201 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %202 = getelementptr inbounds i8, ptr %201, i64 152
  %203 = load i32, ptr %202, align 8, !tbaa !50
  %204 = load double, ptr %4, align 8, !tbaa !31
  %205 = load double, ptr %13, align 8, !tbaa !30
  %206 = load i32, ptr %67, align 4, !tbaa !35
  %207 = load i32, ptr %72, align 8, !tbaa !37
  %208 = load i32, ptr %80, align 8, !tbaa !41
  %209 = load i32, ptr %76, align 4, !tbaa !39
  %210 = load i32, ptr %84, align 4, !tbaa !43
  invoke void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544) %199, i32 noundef %203, double noundef %204, double noundef %205, i32 noundef %206, i32 noundef %207, i32 noundef %208, i32 noundef %209, i32 noundef %210, i32 noundef %153, i32 noundef %154, i32 noundef 2, i1 noundef zeroext true, i1 noundef zeroext false, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %221 unwind label %219

211:                                              ; preds = %147
  %212 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %146, i64 noundef 544) #7
  br label %244

213:                                              ; preds = %158
  %214 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %157, i64 noundef 544) #7
  br label %244

215:                                              ; preds = %172
  %216 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %171, i64 noundef 544) #7
  br label %244

217:                                              ; preds = %186
  %218 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %185, i64 noundef 544) #7
  br label %244

219:                                              ; preds = %200
  %220 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %199, i64 noundef 544) #7
  br label %244

221:                                              ; preds = %200, %128
  %.sink35 = phi i64 [ 3984, %128 ], [ 4000, %200 ]
  %.sink33 = phi ptr [ %127, %128 ], [ %199, %200 ]
  %222 = getelementptr inbounds i8, ptr %0, i64 %.sink35
  store ptr %.sink33, ptr %222, align 8, !tbaa !14
  %223 = getelementptr inbounds i8, ptr %0, i64 3976
  %224 = load ptr, ptr %223, align 8, !tbaa !52
  %225 = load <2 x double>, ptr %224, align 8, !tbaa !12
  store <2 x double> %225, ptr %0, align 8, !tbaa !12
  %226 = getelementptr inbounds i8, ptr %0, i64 2704
  %227 = invoke noundef double @_ZN8Subarray19get_total_cell_areaEv(ptr noundef nonnull align 8 dereferenceable(424) %226)
          to label %228 unwind label %137

228:                                              ; preds = %221
  %229 = getelementptr inbounds i8, ptr %0, i64 288
  %230 = load i32, ptr %229, align 8, !tbaa !55
  %231 = sitofp i32 %230 to double
  %232 = fmul double %227, %231
  %233 = load ptr, ptr @g_ip, align 8, !tbaa !14
  %234 = getelementptr inbounds i8, ptr %233, i64 12
  %235 = load i32, ptr %234, align 4, !tbaa !16
  %236 = uitofp i32 %235 to double
  %237 = fmul double %232, %236
  %238 = getelementptr inbounds i8, ptr %0, i64 4168
  store double %237, ptr %238, align 8, !tbaa !56
  %239 = invoke noundef double @_ZN3UCA14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(4320) %0, double noundef 0.000000e+00)
          to label %240 unwind label %242

240:                                              ; preds = %228
  invoke void @_ZN3UCA20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(4320) %0)
          to label %241 unwind label %242

241:                                              ; preds = %240
  ret void

242:                                              ; preds = %240, %228
  %243 = landingpad { ptr, i32 }
          cleanup
  br label %244

244:                                              ; preds = %46, %242, %219, %217, %215, %213, %211, %143, %141, %139, %137, %44
  %.pn.pn.pn = phi { ptr, i32 } [ %45, %44 ], [ %47, %46 ], [ %243, %242 ], [ %138, %137 ], [ %220, %219 ], [ %218, %217 ], [ %216, %215 ], [ %214, %213 ], [ %212, %211 ], [ %144, %143 ], [ %142, %141 ], [ %140, %139 ]
  tail call void @_ZN4BankD1Ev(ptr noundef nonnull align 8 dereferenceable(3416) %4) #8
  br label %245

245:                                              ; preds = %244, %42
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %244 ], [ %43, %42 ]
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280) %0) #8
  resume { ptr, i32 } %.pn.pn.pn.pn
}

declare void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280)) unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

declare void @_ZN4BankC1ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(3416), ptr noundef nonnull align 8 dereferenceable(265)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #0 align 2

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

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

declare void @_ZN6Htree2C1E9Wire_typeddiiiiiii10Htree_typebbPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(544), i32 noundef, double noundef, double noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, ptr noundef) unnamed_addr #1

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

declare noundef double @_ZN8Subarray19get_total_cell_areaEv(ptr noundef nonnull align 8 dereferenceable(424)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN3UCA14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(4320), double noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3UCA20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(4320)) local_unnamed_addr #0 align 2

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { 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 = { builtin allocsize(0) }
attributes #7 = { builtin nounwind }
attributes #8 = { 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 = !{i64 0, i64 1, !6, i64 1, i64 1, !6, i64 2, i64 1, !6, i64 3, i64 1, !6, i64 4, i64 4, !10, i64 8, i64 4, !10, i64 12, i64 4, !10, i64 16, i64 8, !12, i64 24, i64 4, !10, i64 28, i64 4, !10, i64 32, i64 4, !10, i64 36, i64 4, !10, i64 40, i64 4, !10, i64 44, i64 4, !10, i64 48, i64 4, !10, i64 52, i64 4, !10, i64 56, i64 4, !10, i64 60, i64 4, !10, i64 64, i64 4, !10, i64 68, i64 4, !10, i64 72, i64 4, !10, i64 76, i64 4, !10, i64 80, i64 4, !10, i64 84, i64 4, !10, i64 88, i64 4, !10, i64 92, i64 4, !10, i64 96, i64 4, !10, i64 100, i64 4, !10, i64 104, i64 4, !10, i64 108, i64 4, !10, i64 112, i64 4, !10, i64 116, i64 4, !10, i64 120, i64 1, !6, i64 128, i64 8, !12, i64 136, i64 4, !10, i64 140, i64 4, !10, i64 144, i64 4, !10, i64 148, i64 4, !10, i64 152, i64 4, !10, i64 156, i64 4, !10, i64 160, i64 4, !10, i64 164, i64 4, !10, i64 168, i64 4, !10, i64 176, i64 8, !12, i64 184, i64 4, !10, i64 188, i64 4, !10, i64 192, i64 4, !10, i64 196, i64 4, !10, i64 200, i64 4, !10, i64 204, i64 4, !10, i64 208, i64 4, !10, i64 212, i64 1, !6, i64 216, i64 8, !12, i64 224, i64 8, !12, i64 232, i64 8, !12, i64 240, i64 8, !12, i64 248, i64 8, !12, i64 256, i64 8, !12, i64 264, i64 1, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !8, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"any pointer", !8, i64 0}
!16 = !{!17, !11, i64 12}
!17 = !{!"_ZTS14InputParameter", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !7, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !13, i64 48, !13, i64 56, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !7, i64 84, !7, i64 85, !7, i64 86, !7, i64 87, !7, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !18, i64 152, !11, i64 156, !7, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !7, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !7, i64 300, !11, i64 304, !11, i64 308, !11, i64 312, !7, i64 316, !7, i64 317, !11, i64 320, !11, i64 324, !7, i64 328, !13, i64 336, !13, i64 344, !7, i64 352, !11, i64 356, !11, i64 360, !7, i64 364}
!18 = !{!"_ZTS9Wire_type", !8, i64 0}
!19 = !{!20, !11, i64 4128}
!20 = !{!"_ZTS3UCA", !21, i64 0, !25, i64 280, !26, i64 552, !15, i64 3968, !15, i64 3976, !15, i64 3984, !15, i64 3992, !15, i64 4000, !23, i64 4008, !11, i64 4128, !11, i64 4132, !11, i64 4136, !11, i64 4140, !11, i64 4144, !11, i64 4148, !11, i64 4152, !11, i64 4156, !11, i64 4160, !11, i64 4164, !13, i64 4168, !13, i64 4176, !13, i64 4184, !13, i64 4192, !13, i64 4200, !13, i64 4208, !13, i64 4216, !13, i64 4224, !13, i64 4232, !13, i64 4240, !13, i64 4248, !13, i64 4256, !13, i64 4264, !13, i64 4272, !13, i64 4280, !13, i64 4288, !13, i64 4296, !13, i64 4304, !13, i64 4312}
!21 = !{!"_ZTS9Component", !22, i64 0, !23, i64 24, !23, i64 144, !13, i64 264, !13, i64 272}
!22 = !{!"_ZTS4Area", !13, i64 0, !13, i64 8, !13, i64 16}
!23 = !{!"_ZTS8powerDef", !24, i64 0, !24, i64 40, !24, i64 80}
!24 = !{!"_ZTS15powerComponents", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!25 = !{!"_ZTS16DynamicParameter", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !11, i64 4, !11, i64 8, !11, i64 12, !13, i64 16, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !7, i64 120, !13, i64 128, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !13, i64 176, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !7, i64 212, !22, i64 216, !22, i64 240, !7, i64 264}
!26 = !{!"_ZTS4Bank", !21, i64 0, !15, i64 280, !27, i64 288, !15, i64 3352, !15, i64 3360, !15, i64 3368, !15, i64 3376, !15, i64 3384, !11, i64 3392, !11, i64 3396, !11, i64 3400, !11, i64 3404, !11, i64 3408, !11, i64 3412}
!27 = !{!"_ZTS3Mat", !21, i64 0, !15, i64 280, !15, i64 288, !15, i64 296, !15, i64 304, !15, i64 312, !15, i64 320, !15, i64 328, !15, i64 336, !15, i64 344, !15, i64 352, !15, i64 360, !15, i64 368, !15, i64 376, !15, i64 384, !15, i64 392, !15, i64 400, !15, i64 408, !15, i64 416, !15, i64 424, !15, 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, !13, i64 1760, !13, i64 1768, !13, i64 1776, !13, i64 1784, !13, i64 1792, !13, i64 1800, !13, i64 1808, !13, i64 1816, !13, i64 1824, !13, i64 1832, !13, i64 1840, !13, i64 1848, !13, i64 1856, !28, i64 1864, !23, i64 2288, !23, i64 2408, !23, i64 2528, !13, i64 2648, !11, i64 2656, !11, i64 2660, !13, i64 2664, !22, i64 2672, !22, i64 2696, !7, i64 2720, !7, i64 2721, !7, i64 2722, !7, i64 2723, !11, i64 2724, !23, i64 2728, !13, i64 2848, !13, i64 2856, !13, i64 2864, !13, i64 2872, !13, i64 2880, !13, i64 2888, !23, i64 2896, !11, i64 3016, !11, i64 3020, !11, i64 3024, !11, i64 3028, !13, i64 3032, !11, i64 3040, !11, i64 3044, !11, i64 3048, !11, i64 3052, !11, i64 3056, !11, i64 3060}
!28 = !{!"_ZTS8Subarray", !21, i64 0, !15, i64 280, !11, i64 288, !11, i64 292, !11, i64 296, !11, i64 300, !22, i64 304, !22, i64 328, !7, i64 352, !13, i64 360, !13, i64 368, !13, i64 376, !13, i64 384, !13, i64 392, !13, i64 400, !13, i64 408, !13, i64 416}
!29 = !{!20, !13, i64 4200}
!30 = !{!21, !13, i64 8}
!31 = !{!21, !13, i64 0}
!32 = !{!20, !11, i64 464}
!33 = !{!20, !11, i64 332}
!34 = !{!20, !11, i64 336}
!35 = !{!20, !11, i64 4132}
!36 = !{!20, !11, i64 340}
!37 = !{!20, !11, i64 4136}
!38 = !{!20, !11, i64 344}
!39 = !{!20, !11, i64 4140}
!40 = !{!20, !11, i64 380}
!41 = !{!20, !11, i64 4144}
!42 = !{!20, !11, i64 384}
!43 = !{!20, !11, i64 4148}
!44 = !{!20, !7, i64 283}
!45 = !{i8 0, i8 2}
!46 = !{}
!47 = !{!20, !7, i64 282}
!48 = !{!17, !7, i64 300}
!49 = !{!17, !11, i64 312}
!50 = !{!17, !18, i64 152}
!51 = !{!20, !15, i64 3968}
!52 = !{!20, !15, i64 3976}
!53 = !{!20, !15, i64 3984}
!54 = !{!20, !15, i64 3992}
!55 = !{!20, !11, i64 288}
!56 = !{!20, !13, i64 4168}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass