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

; 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.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 }
%class.Htree2 = type { %class.Component, double, double, double, %class.powerDef, double, double, i32, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i8, i8, i32, double, double, ptr }

@g_ip = external global ptr, align 8
@.str = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv = external hidden unnamed_addr constant [33 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3UCA20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(4320) %0) #0 align 2 {
  %2 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %3 = load ptr, ptr %2, align 8
  %4 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  call void @_ZN4Bank20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(3416) %4)
  %5 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %6 = getelementptr inbounds %class.Component, ptr %5, i32 0, i32 1
  %7 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %8 = call noundef nonnull align 8 dereferenceable(120) ptr @_ZN8powerDefaSERKS_(ptr noundef nonnull align 8 dereferenceable(120) %7, ptr noundef nonnull align 8 dereferenceable(120) %6)
  %9 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 3
  %10 = load ptr, ptr %9, align 8, !tbaa !9
  %11 = getelementptr inbounds %class.Component, ptr %10, i32 0, i32 1
  %12 = getelementptr inbounds %class.powerDef, ptr %11, i32 0, i32 0
  %13 = getelementptr inbounds %class.powerComponents, ptr %12, i32 0, i32 0
  %14 = load double, ptr %13, align 8, !tbaa !22
  %15 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 5
  %16 = load ptr, ptr %15, align 8, !tbaa !23
  %17 = getelementptr inbounds %class.Component, ptr %16, i32 0, i32 1
  %18 = getelementptr inbounds %class.powerDef, ptr %17, i32 0, i32 0
  %19 = getelementptr inbounds %class.powerComponents, ptr %18, i32 0, i32 0
  %20 = load double, ptr %19, align 8, !tbaa !22
  %21 = fadd double %14, %20
  %22 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %23 = getelementptr inbounds %class.powerDef, ptr %22, i32 0, i32 0
  %24 = getelementptr inbounds %class.powerComponents, ptr %23, i32 0, i32 0
  store double %21, ptr %24, align 8, !tbaa !24
  %25 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 3
  %26 = load ptr, ptr %25, align 8, !tbaa !9
  %27 = getelementptr inbounds %class.Component, ptr %26, i32 0, i32 1
  %28 = getelementptr inbounds %class.powerDef, ptr %27, i32 0, i32 0
  %29 = getelementptr inbounds %class.powerComponents, ptr %28, i32 0, i32 0
  %30 = load double, ptr %29, align 8, !tbaa !22
  %31 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 4
  %32 = load ptr, ptr %31, align 8, !tbaa !25
  %33 = getelementptr inbounds %class.Component, ptr %32, i32 0, i32 1
  %34 = getelementptr inbounds %class.powerDef, ptr %33, i32 0, i32 0
  %35 = getelementptr inbounds %class.powerComponents, ptr %34, i32 0, i32 0
  %36 = load double, ptr %35, align 8, !tbaa !22
  %37 = fadd double %30, %36
  %38 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %39 = getelementptr inbounds %class.powerDef, ptr %38, i32 0, i32 1
  %40 = getelementptr inbounds %class.powerComponents, ptr %39, i32 0, i32 0
  store double %37, ptr %40, align 8, !tbaa !26
  %41 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %42 = getelementptr inbounds %class.DynamicParameter, ptr %41, i32 0, i32 3
  %43 = load i8, ptr %42, align 1, !tbaa !27, !range !28, !noundef !29
  %44 = trunc i8 %43 to i1
  br i1 %44, label %50, label %45

45:                                               ; preds = %1
  %46 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %47 = getelementptr inbounds %class.DynamicParameter, ptr %46, i32 0, i32 2
  %48 = load i8, ptr %47, align 2, !tbaa !30, !range !28, !noundef !29
  %49 = trunc i8 %48 to i1
  br i1 %49, label %50, label %67

50:                                               ; preds = %45, %1
  %51 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 6
  %52 = load ptr, ptr %51, align 8, !tbaa !31
  %53 = getelementptr inbounds %class.Component, ptr %52, i32 0, i32 1
  %54 = getelementptr inbounds %class.powerDef, ptr %53, i32 0, i32 2
  %55 = getelementptr inbounds %class.powerComponents, ptr %54, i32 0, i32 0
  %56 = load double, ptr %55, align 8, !tbaa !32
  %57 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 7
  %58 = load ptr, ptr %57, align 8, !tbaa !33
  %59 = getelementptr inbounds %class.Component, ptr %58, i32 0, i32 1
  %60 = getelementptr inbounds %class.powerDef, ptr %59, i32 0, i32 2
  %61 = getelementptr inbounds %class.powerComponents, ptr %60, i32 0, i32 0
  %62 = load double, ptr %61, align 8, !tbaa !32
  %63 = fadd double %56, %62
  %64 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %65 = getelementptr inbounds %class.powerDef, ptr %64, i32 0, i32 2
  %66 = getelementptr inbounds %class.powerComponents, ptr %65, i32 0, i32 0
  store double %63, ptr %66, align 8, !tbaa !34
  br label %67

67:                                               ; preds = %50, %45
  %68 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 3
  %69 = load ptr, ptr %68, align 8, !tbaa !9
  %70 = getelementptr inbounds %class.Component, ptr %69, i32 0, i32 1
  %71 = getelementptr inbounds %class.powerDef, ptr %70, i32 0, i32 0
  %72 = getelementptr inbounds %class.powerComponents, ptr %71, i32 0, i32 1
  %73 = load double, ptr %72, align 8, !tbaa !35
  %74 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 4
  %75 = load ptr, ptr %74, align 8, !tbaa !25
  %76 = getelementptr inbounds %class.Component, ptr %75, i32 0, i32 1
  %77 = getelementptr inbounds %class.powerDef, ptr %76, i32 0, i32 0
  %78 = getelementptr inbounds %class.powerComponents, ptr %77, i32 0, i32 1
  %79 = load double, ptr %78, align 8, !tbaa !35
  %80 = fadd double %73, %79
  %81 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 5
  %82 = load ptr, ptr %81, align 8, !tbaa !23
  %83 = getelementptr inbounds %class.Component, ptr %82, i32 0, i32 1
  %84 = getelementptr inbounds %class.powerDef, ptr %83, i32 0, i32 0
  %85 = getelementptr inbounds %class.powerComponents, ptr %84, i32 0, i32 1
  %86 = load double, ptr %85, align 8, !tbaa !35
  %87 = fadd double %80, %86
  %88 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %89 = getelementptr inbounds %class.powerDef, ptr %88, i32 0, i32 0
  %90 = getelementptr inbounds %class.powerComponents, ptr %89, i32 0, i32 1
  %91 = load double, ptr %90, align 8, !tbaa !36
  %92 = fadd double %91, %87
  store double %92, ptr %90, align 8, !tbaa !36
  %93 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 3
  %94 = load ptr, ptr %93, align 8, !tbaa !9
  %95 = getelementptr inbounds %class.Component, ptr %94, i32 0, i32 1
  %96 = getelementptr inbounds %class.powerDef, ptr %95, i32 0, i32 0
  %97 = getelementptr inbounds %class.powerComponents, ptr %96, i32 0, i32 2
  %98 = load double, ptr %97, align 8, !tbaa !37
  %99 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 4
  %100 = load ptr, ptr %99, align 8, !tbaa !25
  %101 = getelementptr inbounds %class.Component, ptr %100, i32 0, i32 1
  %102 = getelementptr inbounds %class.powerDef, ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds %class.powerComponents, ptr %102, i32 0, i32 2
  %104 = load double, ptr %103, align 8, !tbaa !37
  %105 = fadd double %98, %104
  %106 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 5
  %107 = load ptr, ptr %106, align 8, !tbaa !23
  %108 = getelementptr inbounds %class.Component, ptr %107, i32 0, i32 1
  %109 = getelementptr inbounds %class.powerDef, ptr %108, i32 0, i32 0
  %110 = getelementptr inbounds %class.powerComponents, ptr %109, i32 0, i32 2
  %111 = load double, ptr %110, align 8, !tbaa !37
  %112 = fadd double %105, %111
  %113 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %114 = getelementptr inbounds %class.powerDef, ptr %113, i32 0, i32 0
  %115 = getelementptr inbounds %class.powerComponents, ptr %114, i32 0, i32 2
  %116 = load double, ptr %115, align 8, !tbaa !38
  %117 = fadd double %116, %112
  store double %117, ptr %115, align 8, !tbaa !38
  %118 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %119 = getelementptr inbounds %class.DynamicParameter, ptr %118, i32 0, i32 3
  %120 = load i8, ptr %119, align 1, !tbaa !27, !range !28, !noundef !29
  %121 = trunc i8 %120 to i1
  br i1 %121, label %127, label %122

122:                                              ; preds = %67
  %123 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %124 = getelementptr inbounds %class.DynamicParameter, ptr %123, i32 0, i32 2
  %125 = load i8, ptr %124, align 2, !tbaa !30, !range !28, !noundef !29
  %126 = trunc i8 %125 to i1
  br i1 %126, label %127, label %164

127:                                              ; preds = %122, %67
  %128 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 6
  %129 = load ptr, ptr %128, align 8, !tbaa !31
  %130 = getelementptr inbounds %class.Component, ptr %129, i32 0, i32 1
  %131 = getelementptr inbounds %class.powerDef, ptr %130, i32 0, i32 0
  %132 = getelementptr inbounds %class.powerComponents, ptr %131, i32 0, i32 1
  %133 = load double, ptr %132, align 8, !tbaa !35
  %134 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 7
  %135 = load ptr, ptr %134, align 8, !tbaa !33
  %136 = getelementptr inbounds %class.Component, ptr %135, i32 0, i32 1
  %137 = getelementptr inbounds %class.powerDef, ptr %136, i32 0, i32 0
  %138 = getelementptr inbounds %class.powerComponents, ptr %137, i32 0, i32 1
  %139 = load double, ptr %138, align 8, !tbaa !35
  %140 = fadd double %133, %139
  %141 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %142 = getelementptr inbounds %class.powerDef, ptr %141, i32 0, i32 0
  %143 = getelementptr inbounds %class.powerComponents, ptr %142, i32 0, i32 1
  %144 = load double, ptr %143, align 8, !tbaa !36
  %145 = fadd double %144, %140
  store double %145, ptr %143, align 8, !tbaa !36
  %146 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 6
  %147 = load ptr, ptr %146, align 8, !tbaa !31
  %148 = getelementptr inbounds %class.Component, ptr %147, i32 0, i32 1
  %149 = getelementptr inbounds %class.powerDef, ptr %148, i32 0, i32 0
  %150 = getelementptr inbounds %class.powerComponents, ptr %149, i32 0, i32 2
  %151 = load double, ptr %150, align 8, !tbaa !37
  %152 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 7
  %153 = load ptr, ptr %152, align 8, !tbaa !33
  %154 = getelementptr inbounds %class.Component, ptr %153, i32 0, i32 1
  %155 = getelementptr inbounds %class.powerDef, ptr %154, i32 0, i32 0
  %156 = getelementptr inbounds %class.powerComponents, ptr %155, i32 0, i32 2
  %157 = load double, ptr %156, align 8, !tbaa !37
  %158 = fadd double %151, %157
  %159 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %160 = getelementptr inbounds %class.powerDef, ptr %159, i32 0, i32 0
  %161 = getelementptr inbounds %class.powerComponents, ptr %160, i32 0, i32 2
  %162 = load double, ptr %161, align 8, !tbaa !38
  %163 = fadd double %162, %158
  store double %163, ptr %161, align 8, !tbaa !38
  br label %164

164:                                              ; preds = %127, %122
  %165 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %166 = getelementptr inbounds %class.powerDef, ptr %165, i32 0, i32 2
  %167 = getelementptr inbounds %class.powerComponents, ptr %166, i32 0, i32 0
  %168 = load double, ptr %167, align 8, !tbaa !34
  %169 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %170 = getelementptr inbounds %class.powerDef, ptr %169, i32 0, i32 2
  %171 = getelementptr inbounds %class.powerComponents, ptr %170, i32 0, i32 0
  %172 = load double, ptr %171, align 8, !tbaa !32
  %173 = fadd double %172, %168
  store double %173, ptr %171, align 8, !tbaa !32
  %174 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %175 = getelementptr inbounds %class.powerDef, ptr %174, i32 0, i32 0
  %176 = getelementptr inbounds %class.powerComponents, ptr %175, i32 0, i32 0
  %177 = load double, ptr %176, align 8, !tbaa !24
  %178 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %179 = getelementptr inbounds %class.powerDef, ptr %178, i32 0, i32 0
  %180 = getelementptr inbounds %class.powerComponents, ptr %179, i32 0, i32 0
  %181 = load double, ptr %180, align 8, !tbaa !22
  %182 = fadd double %181, %177
  store double %182, ptr %180, align 8, !tbaa !22
  %183 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %184 = getelementptr inbounds %class.powerDef, ptr %183, i32 0, i32 0
  %185 = getelementptr inbounds %class.powerComponents, ptr %184, i32 0, i32 1
  %186 = load double, ptr %185, align 8, !tbaa !36
  %187 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %188 = getelementptr inbounds %class.powerDef, ptr %187, i32 0, i32 0
  %189 = getelementptr inbounds %class.powerComponents, ptr %188, i32 0, i32 1
  %190 = load double, ptr %189, align 8, !tbaa !35
  %191 = fadd double %190, %186
  store double %191, ptr %189, align 8, !tbaa !35
  %192 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %193 = getelementptr inbounds %class.powerDef, ptr %192, i32 0, i32 0
  %194 = getelementptr inbounds %class.powerComponents, ptr %193, i32 0, i32 2
  %195 = load double, ptr %194, align 8, !tbaa !38
  %196 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %197 = getelementptr inbounds %class.powerDef, ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds %class.powerComponents, ptr %197, i32 0, i32 2
  %199 = load double, ptr %198, align 8, !tbaa !37
  %200 = fadd double %199, %195
  store double %200, ptr %198, align 8, !tbaa !37
  %201 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %202 = getelementptr inbounds %class.powerDef, ptr %201, i32 0, i32 0
  %203 = getelementptr inbounds %class.powerComponents, ptr %202, i32 0, i32 0
  %204 = load double, ptr %203, align 8, !tbaa !22
  %205 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %206 = getelementptr inbounds %class.Bank, ptr %205, i32 0, i32 2
  %207 = getelementptr inbounds %class.Mat, ptr %206, i32 0, i32 46
  %208 = getelementptr inbounds %class.powerDef, ptr %207, i32 0, i32 0
  %209 = getelementptr inbounds %class.powerComponents, ptr %208, i32 0, i32 0
  %210 = load double, ptr %209, align 8, !tbaa !39
  %211 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %212 = getelementptr inbounds %class.DynamicParameter, ptr %211, i32 0, i32 30
  %213 = load i32, ptr %212, align 8, !tbaa !40
  %214 = sitofp i32 %213 to double
  %215 = fneg double %210
  %216 = call double @llvm.fmuladd.f64(double %215, double %214, double %204)
  %217 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %218 = getelementptr inbounds %class.Bank, ptr %217, i32 0, i32 2
  %219 = getelementptr inbounds %class.Mat, ptr %218, i32 0, i32 46
  %220 = getelementptr inbounds %class.powerDef, ptr %219, i32 0, i32 1
  %221 = getelementptr inbounds %class.powerComponents, ptr %220, i32 0, i32 0
  %222 = load double, ptr %221, align 8, !tbaa !41
  %223 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %224 = getelementptr inbounds %class.DynamicParameter, ptr %223, i32 0, i32 30
  %225 = load i32, ptr %224, align 8, !tbaa !40
  %226 = sitofp i32 %225 to double
  %227 = call double @llvm.fmuladd.f64(double %222, double %226, double %216)
  %228 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %229 = getelementptr inbounds %class.powerDef, ptr %228, i32 0, i32 0
  %230 = getelementptr inbounds %class.powerComponents, ptr %229, i32 0, i32 0
  %231 = load double, ptr %230, align 8, !tbaa !24
  %232 = fsub double %227, %231
  %233 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %234 = getelementptr inbounds %class.powerDef, ptr %233, i32 0, i32 1
  %235 = getelementptr inbounds %class.powerComponents, ptr %234, i32 0, i32 0
  %236 = load double, ptr %235, align 8, !tbaa !26
  %237 = fadd double %232, %236
  %238 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %239 = getelementptr inbounds %class.Bank, ptr %238, i32 0, i32 4
  %240 = load ptr, ptr %239, align 8, !tbaa !42
  %241 = getelementptr inbounds %class.Component, ptr %240, i32 0, i32 1
  %242 = getelementptr inbounds %class.powerDef, ptr %241, i32 0, i32 0
  %243 = getelementptr inbounds %class.powerComponents, ptr %242, i32 0, i32 0
  %244 = load double, ptr %243, align 8, !tbaa !22
  %245 = fadd double %237, %244
  %246 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %247 = getelementptr inbounds %class.Bank, ptr %246, i32 0, i32 5
  %248 = load ptr, ptr %247, align 8, !tbaa !43
  %249 = getelementptr inbounds %class.Component, ptr %248, i32 0, i32 1
  %250 = getelementptr inbounds %class.powerDef, ptr %249, i32 0, i32 0
  %251 = getelementptr inbounds %class.powerComponents, ptr %250, i32 0, i32 0
  %252 = load double, ptr %251, align 8, !tbaa !22
  %253 = fsub double %245, %252
  %254 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %255 = getelementptr inbounds %class.powerDef, ptr %254, i32 0, i32 1
  %256 = getelementptr inbounds %class.powerComponents, ptr %255, i32 0, i32 0
  store double %253, ptr %256, align 8, !tbaa !44
  %257 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %258 = getelementptr inbounds %class.DynamicParameter, ptr %257, i32 0, i32 32
  %259 = load i8, ptr %258, align 8, !tbaa !45, !range !28, !noundef !29
  %260 = trunc i8 %259 to i1
  %261 = zext i1 %260 to i32
  %262 = icmp eq i32 %261, 0
  br i1 %262, label %263, label %280

263:                                              ; preds = %164
  %264 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %265 = getelementptr inbounds %class.Bank, ptr %264, i32 0, i32 2
  %266 = getelementptr inbounds %class.Mat, ptr %265, i32 0, i32 60
  %267 = getelementptr inbounds %class.powerDef, ptr %266, i32 0, i32 0
  %268 = getelementptr inbounds %class.powerComponents, ptr %267, i32 0, i32 0
  %269 = load double, ptr %268, align 8, !tbaa !46
  %270 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %271 = getelementptr inbounds %class.DynamicParameter, ptr %270, i32 0, i32 30
  %272 = load i32, ptr %271, align 8, !tbaa !40
  %273 = sitofp i32 %272 to double
  %274 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %275 = getelementptr inbounds %class.powerDef, ptr %274, i32 0, i32 1
  %276 = getelementptr inbounds %class.powerComponents, ptr %275, i32 0, i32 0
  %277 = load double, ptr %276, align 8, !tbaa !44
  %278 = fneg double %269
  %279 = call double @llvm.fmuladd.f64(double %278, double %273, double %277)
  store double %279, ptr %276, align 8, !tbaa !44
  br label %280

280:                                              ; preds = %263, %164
  %281 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %282 = getelementptr inbounds %class.powerDef, ptr %281, i32 0, i32 0
  %283 = getelementptr inbounds %class.powerComponents, ptr %282, i32 0, i32 0
  %284 = load double, ptr %283, align 8, !tbaa !22
  %285 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 20
  store double %284, ptr %285, align 8, !tbaa !47
  %286 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %287 = getelementptr inbounds %class.powerDef, ptr %286, i32 0, i32 0
  %288 = getelementptr inbounds %class.powerComponents, ptr %287, i32 0, i32 0
  %289 = load double, ptr %288, align 8, !tbaa !22
  %290 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %291 = getelementptr inbounds %class.Bank, ptr %290, i32 0, i32 2
  %292 = getelementptr inbounds %class.Mat, ptr %291, i32 0, i32 10
  %293 = load ptr, ptr %292, align 8, !tbaa !48
  %294 = getelementptr inbounds %class.Component, ptr %293, i32 0, i32 1
  %295 = getelementptr inbounds %class.powerDef, ptr %294, i32 0, i32 0
  %296 = getelementptr inbounds %class.powerComponents, ptr %295, i32 0, i32 0
  %297 = load double, ptr %296, align 8, !tbaa !22
  %298 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %299 = getelementptr inbounds %class.Bank, ptr %298, i32 0, i32 2
  %300 = getelementptr inbounds %class.Mat, ptr %299, i32 0, i32 21
  %301 = getelementptr inbounds %class.powerDef, ptr %300, i32 0, i32 0
  %302 = getelementptr inbounds %class.powerComponents, ptr %301, i32 0, i32 0
  %303 = load double, ptr %302, align 8, !tbaa !49
  %304 = fadd double %297, %303
  %305 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %306 = getelementptr inbounds %class.Bank, ptr %305, i32 0, i32 2
  %307 = getelementptr inbounds %class.Mat, ptr %306, i32 0, i32 26
  %308 = getelementptr inbounds %class.powerDef, ptr %307, i32 0, i32 0
  %309 = getelementptr inbounds %class.powerComponents, ptr %308, i32 0, i32 0
  %310 = load double, ptr %309, align 8, !tbaa !50
  %311 = fadd double %304, %310
  %312 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %313 = getelementptr inbounds %class.Bank, ptr %312, i32 0, i32 2
  %314 = getelementptr inbounds %class.Mat, ptr %313, i32 0, i32 60
  %315 = getelementptr inbounds %class.powerDef, ptr %314, i32 0, i32 0
  %316 = getelementptr inbounds %class.powerComponents, ptr %315, i32 0, i32 0
  %317 = load double, ptr %316, align 8, !tbaa !46
  %318 = fadd double %311, %317
  %319 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %320 = getelementptr inbounds %class.Bank, ptr %319, i32 0, i32 2
  %321 = getelementptr inbounds %class.Mat, ptr %320, i32 0, i32 46
  %322 = getelementptr inbounds %class.powerDef, ptr %321, i32 0, i32 0
  %323 = getelementptr inbounds %class.powerComponents, ptr %322, i32 0, i32 0
  %324 = load double, ptr %323, align 8, !tbaa !39
  %325 = fadd double %318, %324
  %326 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %327 = getelementptr inbounds %class.DynamicParameter, ptr %326, i32 0, i32 30
  %328 = load i32, ptr %327, align 8, !tbaa !40
  %329 = sitofp i32 %328 to double
  %330 = fneg double %325
  %331 = call double @llvm.fmuladd.f64(double %330, double %329, double %289)
  %332 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 21
  store double %331, ptr %332, align 8, !tbaa !51
  %333 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %334 = getelementptr inbounds %class.InputParameter, ptr %333, i32 0, i32 33
  %335 = load i32, ptr %334, align 8, !tbaa !52
  %336 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %337 = getelementptr inbounds %class.InputParameter, ptr %336, i32 0, i32 34
  %338 = load i32, ptr %337, align 4, !tbaa !55
  %339 = udiv i32 %335, %338
  %340 = icmp ugt i32 %339, 1
  br i1 %340, label %341, label %349

341:                                              ; preds = %280
  %342 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %343 = getelementptr inbounds %class.InputParameter, ptr %342, i32 0, i32 33
  %344 = load i32, ptr %343, align 8, !tbaa !52
  %345 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %346 = getelementptr inbounds %class.InputParameter, ptr %345, i32 0, i32 34
  %347 = load i32, ptr %346, align 4, !tbaa !55
  %348 = udiv i32 %344, %347
  br label %350

349:                                              ; preds = %280
  br label %350

350:                                              ; preds = %349, %341
  %351 = phi i32 [ %348, %341 ], [ 1, %349 ]
  %352 = sub i32 %351, 1
  %353 = uitofp i32 %352 to double
  %354 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %355 = getelementptr inbounds %class.Bank, ptr %354, i32 0, i32 2
  %356 = getelementptr inbounds %class.Mat, ptr %355, i32 0, i32 12
  %357 = load ptr, ptr %356, align 8, !tbaa !56
  %358 = getelementptr inbounds %class.Component, ptr %357, i32 0, i32 1
  %359 = getelementptr inbounds %class.powerDef, ptr %358, i32 0, i32 0
  %360 = getelementptr inbounds %class.powerComponents, ptr %359, i32 0, i32 0
  %361 = load double, ptr %360, align 8, !tbaa !22
  %362 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %363 = getelementptr inbounds %class.Bank, ptr %362, i32 0, i32 2
  %364 = getelementptr inbounds %class.Mat, ptr %363, i32 0, i32 13
  %365 = load ptr, ptr %364, align 8, !tbaa !57
  %366 = getelementptr inbounds %class.Component, ptr %365, i32 0, i32 1
  %367 = getelementptr inbounds %class.powerDef, ptr %366, i32 0, i32 0
  %368 = getelementptr inbounds %class.powerComponents, ptr %367, i32 0, i32 0
  %369 = load double, ptr %368, align 8, !tbaa !22
  %370 = fadd double %361, %369
  %371 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %372 = getelementptr inbounds %class.Bank, ptr %371, i32 0, i32 2
  %373 = getelementptr inbounds %class.Mat, ptr %372, i32 0, i32 23
  %374 = getelementptr inbounds %class.powerDef, ptr %373, i32 0, i32 0
  %375 = getelementptr inbounds %class.powerComponents, ptr %374, i32 0, i32 0
  %376 = load double, ptr %375, align 8, !tbaa !58
  %377 = fadd double %370, %376
  %378 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %379 = getelementptr inbounds %class.Bank, ptr %378, i32 0, i32 2
  %380 = getelementptr inbounds %class.Mat, ptr %379, i32 0, i32 24
  %381 = getelementptr inbounds %class.powerDef, ptr %380, i32 0, i32 0
  %382 = getelementptr inbounds %class.powerComponents, ptr %381, i32 0, i32 0
  %383 = load double, ptr %382, align 8, !tbaa !59
  %384 = fadd double %377, %383
  %385 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %386 = getelementptr inbounds %class.Bank, ptr %385, i32 0, i32 2
  %387 = getelementptr inbounds %class.Mat, ptr %386, i32 0, i32 27
  %388 = getelementptr inbounds %class.powerDef, ptr %387, i32 0, i32 0
  %389 = getelementptr inbounds %class.powerComponents, ptr %388, i32 0, i32 0
  %390 = load double, ptr %389, align 8, !tbaa !60
  %391 = fadd double %384, %390
  %392 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %393 = getelementptr inbounds %class.DynamicParameter, ptr %392, i32 0, i32 30
  %394 = load i32, ptr %393, align 8, !tbaa !40
  %395 = sitofp i32 %394 to double
  %396 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %397 = getelementptr inbounds %class.Bank, ptr %396, i32 0, i32 5
  %398 = load ptr, ptr %397, align 8, !tbaa !43
  %399 = getelementptr inbounds %class.Component, ptr %398, i32 0, i32 1
  %400 = getelementptr inbounds %class.powerDef, ptr %399, i32 0, i32 0
  %401 = getelementptr inbounds %class.powerComponents, ptr %400, i32 0, i32 0
  %402 = load double, ptr %401, align 8, !tbaa !22
  %403 = call double @llvm.fmuladd.f64(double %391, double %395, double %402)
  %404 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %405 = getelementptr inbounds %class.powerDef, ptr %404, i32 0, i32 0
  %406 = getelementptr inbounds %class.powerComponents, ptr %405, i32 0, i32 0
  %407 = load double, ptr %406, align 8, !tbaa !24
  %408 = fadd double %403, %407
  %409 = fmul double %353, %408
  %410 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 22
  store double %409, ptr %410, align 8, !tbaa !61
  %411 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 22
  %412 = load double, ptr %411, align 8, !tbaa !61
  %413 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 20
  %414 = load double, ptr %413, align 8, !tbaa !47
  %415 = fadd double %414, %412
  store double %415, ptr %413, align 8, !tbaa !47
  %416 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 22
  %417 = load double, ptr %416, align 8, !tbaa !61
  %418 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 21
  %419 = load double, ptr %418, align 8, !tbaa !51
  %420 = fadd double %419, %417
  store double %420, ptr %418, align 8, !tbaa !51
  %421 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 3
  %422 = load ptr, ptr %421, align 8, !tbaa !9
  %423 = getelementptr inbounds %class.Component, ptr %422, i32 0, i32 1
  %424 = getelementptr inbounds %class.powerDef, ptr %423, i32 0, i32 0
  %425 = getelementptr inbounds %class.powerComponents, ptr %424, i32 0, i32 0
  %426 = load double, ptr %425, align 8, !tbaa !22
  %427 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %428 = getelementptr inbounds %class.Bank, ptr %427, i32 0, i32 3
  %429 = load ptr, ptr %428, align 8, !tbaa !62
  %430 = getelementptr inbounds %class.Htree2, ptr %429, i32 0, i32 4
  %431 = getelementptr inbounds %class.powerDef, ptr %430, i32 0, i32 0
  %432 = getelementptr inbounds %class.powerComponents, ptr %431, i32 0, i32 0
  %433 = load double, ptr %432, align 8, !tbaa !63
  %434 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %435 = getelementptr inbounds %class.Bank, ptr %434, i32 0, i32 12
  %436 = load i32, ptr %435, align 8, !tbaa !66
  %437 = sitofp i32 %436 to double
  %438 = call double @llvm.fmuladd.f64(double %433, double %437, double %426)
  %439 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %440 = getelementptr inbounds %class.Bank, ptr %439, i32 0, i32 2
  %441 = getelementptr inbounds %class.Mat, ptr %440, i32 0, i32 10
  %442 = load ptr, ptr %441, align 8, !tbaa !48
  %443 = getelementptr inbounds %class.Component, ptr %442, i32 0, i32 1
  %444 = getelementptr inbounds %class.powerDef, ptr %443, i32 0, i32 0
  %445 = getelementptr inbounds %class.powerComponents, ptr %444, i32 0, i32 0
  %446 = load double, ptr %445, align 8, !tbaa !22
  %447 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %448 = getelementptr inbounds %class.Bank, ptr %447, i32 0, i32 2
  %449 = getelementptr inbounds %class.Mat, ptr %448, i32 0, i32 21
  %450 = getelementptr inbounds %class.powerDef, ptr %449, i32 0, i32 0
  %451 = getelementptr inbounds %class.powerComponents, ptr %450, i32 0, i32 0
  %452 = load double, ptr %451, align 8, !tbaa !49
  %453 = fadd double %446, %452
  %454 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %455 = getelementptr inbounds %class.Bank, ptr %454, i32 0, i32 2
  %456 = getelementptr inbounds %class.Mat, ptr %455, i32 0, i32 60
  %457 = getelementptr inbounds %class.powerDef, ptr %456, i32 0, i32 0
  %458 = getelementptr inbounds %class.powerComponents, ptr %457, i32 0, i32 0
  %459 = load double, ptr %458, align 8, !tbaa !46
  %460 = fadd double %453, %459
  %461 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %462 = getelementptr inbounds %class.DynamicParameter, ptr %461, i32 0, i32 30
  %463 = load i32, ptr %462, align 8, !tbaa !40
  %464 = sitofp i32 %463 to double
  %465 = call double @llvm.fmuladd.f64(double %460, double %464, double %438)
  %466 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 24
  store double %465, ptr %466, align 8, !tbaa !67
  %467 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 3
  %468 = load ptr, ptr %467, align 8, !tbaa !9
  %469 = getelementptr inbounds %class.Component, ptr %468, i32 0, i32 1
  %470 = getelementptr inbounds %class.powerDef, ptr %469, i32 0, i32 0
  %471 = getelementptr inbounds %class.powerComponents, ptr %470, i32 0, i32 0
  %472 = load double, ptr %471, align 8, !tbaa !22
  %473 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %474 = getelementptr inbounds %class.Bank, ptr %473, i32 0, i32 3
  %475 = load ptr, ptr %474, align 8, !tbaa !62
  %476 = getelementptr inbounds %class.Htree2, ptr %475, i32 0, i32 4
  %477 = getelementptr inbounds %class.powerDef, ptr %476, i32 0, i32 0
  %478 = getelementptr inbounds %class.powerComponents, ptr %477, i32 0, i32 0
  %479 = load double, ptr %478, align 8, !tbaa !63
  %480 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %481 = getelementptr inbounds %class.Bank, ptr %480, i32 0, i32 13
  %482 = load i32, ptr %481, align 4, !tbaa !68
  %483 = sitofp i32 %482 to double
  %484 = call double @llvm.fmuladd.f64(double %479, double %483, double %472)
  %485 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %486 = getelementptr inbounds %class.Bank, ptr %485, i32 0, i32 2
  %487 = getelementptr inbounds %class.Mat, ptr %486, i32 0, i32 12
  %488 = load ptr, ptr %487, align 8, !tbaa !56
  %489 = getelementptr inbounds %class.Component, ptr %488, i32 0, i32 1
  %490 = getelementptr inbounds %class.powerDef, ptr %489, i32 0, i32 0
  %491 = getelementptr inbounds %class.powerComponents, ptr %490, i32 0, i32 0
  %492 = load double, ptr %491, align 8, !tbaa !22
  %493 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %494 = getelementptr inbounds %class.Bank, ptr %493, i32 0, i32 2
  %495 = getelementptr inbounds %class.Mat, ptr %494, i32 0, i32 13
  %496 = load ptr, ptr %495, align 8, !tbaa !57
  %497 = getelementptr inbounds %class.Component, ptr %496, i32 0, i32 1
  %498 = getelementptr inbounds %class.powerDef, ptr %497, i32 0, i32 0
  %499 = getelementptr inbounds %class.powerComponents, ptr %498, i32 0, i32 0
  %500 = load double, ptr %499, align 8, !tbaa !22
  %501 = fadd double %492, %500
  %502 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %503 = getelementptr inbounds %class.Bank, ptr %502, i32 0, i32 2
  %504 = getelementptr inbounds %class.Mat, ptr %503, i32 0, i32 23
  %505 = getelementptr inbounds %class.powerDef, ptr %504, i32 0, i32 0
  %506 = getelementptr inbounds %class.powerComponents, ptr %505, i32 0, i32 0
  %507 = load double, ptr %506, align 8, !tbaa !58
  %508 = fadd double %501, %507
  %509 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %510 = getelementptr inbounds %class.Bank, ptr %509, i32 0, i32 2
  %511 = getelementptr inbounds %class.Mat, ptr %510, i32 0, i32 24
  %512 = getelementptr inbounds %class.powerDef, ptr %511, i32 0, i32 0
  %513 = getelementptr inbounds %class.powerComponents, ptr %512, i32 0, i32 0
  %514 = load double, ptr %513, align 8, !tbaa !59
  %515 = fadd double %508, %514
  %516 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %517 = getelementptr inbounds %class.Bank, ptr %516, i32 0, i32 2
  %518 = getelementptr inbounds %class.Mat, ptr %517, i32 0, i32 27
  %519 = getelementptr inbounds %class.powerDef, ptr %518, i32 0, i32 0
  %520 = getelementptr inbounds %class.powerComponents, ptr %519, i32 0, i32 0
  %521 = load double, ptr %520, align 8, !tbaa !60
  %522 = fadd double %515, %521
  %523 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %524 = getelementptr inbounds %class.DynamicParameter, ptr %523, i32 0, i32 30
  %525 = load i32, ptr %524, align 8, !tbaa !40
  %526 = sitofp i32 %525 to double
  %527 = call double @llvm.fmuladd.f64(double %522, double %526, double %484)
  %528 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %529 = getelementptr inbounds %class.Bank, ptr %528, i32 0, i32 5
  %530 = load ptr, ptr %529, align 8, !tbaa !43
  %531 = getelementptr inbounds %class.Component, ptr %530, i32 0, i32 1
  %532 = getelementptr inbounds %class.powerDef, ptr %531, i32 0, i32 0
  %533 = getelementptr inbounds %class.powerComponents, ptr %532, i32 0, i32 0
  %534 = load double, ptr %533, align 8, !tbaa !22
  %535 = fadd double %527, %534
  %536 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 4
  %537 = load ptr, ptr %536, align 8, !tbaa !25
  %538 = getelementptr inbounds %class.Component, ptr %537, i32 0, i32 1
  %539 = getelementptr inbounds %class.powerDef, ptr %538, i32 0, i32 0
  %540 = getelementptr inbounds %class.powerComponents, ptr %539, i32 0, i32 0
  %541 = load double, ptr %540, align 8, !tbaa !22
  %542 = fadd double %535, %541
  %543 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %544 = getelementptr inbounds %class.InputParameter, ptr %543, i32 0, i32 33
  %545 = load i32, ptr %544, align 8, !tbaa !52
  %546 = uitofp i32 %545 to double
  %547 = fmul double %542, %546
  %548 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 25
  store double %547, ptr %548, align 8, !tbaa !69
  %549 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 3
  %550 = load ptr, ptr %549, align 8, !tbaa !9
  %551 = getelementptr inbounds %class.Component, ptr %550, i32 0, i32 1
  %552 = getelementptr inbounds %class.powerDef, ptr %551, i32 0, i32 0
  %553 = getelementptr inbounds %class.powerComponents, ptr %552, i32 0, i32 0
  %554 = load double, ptr %553, align 8, !tbaa !22
  %555 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %556 = getelementptr inbounds %class.Bank, ptr %555, i32 0, i32 3
  %557 = load ptr, ptr %556, align 8, !tbaa !62
  %558 = getelementptr inbounds %class.Htree2, ptr %557, i32 0, i32 4
  %559 = getelementptr inbounds %class.powerDef, ptr %558, i32 0, i32 0
  %560 = getelementptr inbounds %class.powerComponents, ptr %559, i32 0, i32 0
  %561 = load double, ptr %560, align 8, !tbaa !63
  %562 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %563 = getelementptr inbounds %class.Bank, ptr %562, i32 0, i32 13
  %564 = load i32, ptr %563, align 4, !tbaa !68
  %565 = sitofp i32 %564 to double
  %566 = call double @llvm.fmuladd.f64(double %561, double %565, double %554)
  %567 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 4
  %568 = load ptr, ptr %567, align 8, !tbaa !25
  %569 = getelementptr inbounds %class.Component, ptr %568, i32 0, i32 1
  %570 = getelementptr inbounds %class.powerDef, ptr %569, i32 0, i32 0
  %571 = getelementptr inbounds %class.powerComponents, ptr %570, i32 0, i32 0
  %572 = load double, ptr %571, align 8, !tbaa !22
  %573 = fadd double %566, %572
  %574 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %575 = getelementptr inbounds %class.Bank, ptr %574, i32 0, i32 4
  %576 = load ptr, ptr %575, align 8, !tbaa !42
  %577 = getelementptr inbounds %class.Component, ptr %576, i32 0, i32 1
  %578 = getelementptr inbounds %class.powerDef, ptr %577, i32 0, i32 0
  %579 = getelementptr inbounds %class.powerComponents, ptr %578, i32 0, i32 0
  %580 = load double, ptr %579, align 8, !tbaa !22
  %581 = fadd double %573, %580
  %582 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %583 = getelementptr inbounds %class.Bank, ptr %582, i32 0, i32 2
  %584 = getelementptr inbounds %class.Mat, ptr %583, i32 0, i32 12
  %585 = load ptr, ptr %584, align 8, !tbaa !56
  %586 = getelementptr inbounds %class.Component, ptr %585, i32 0, i32 1
  %587 = getelementptr inbounds %class.powerDef, ptr %586, i32 0, i32 0
  %588 = getelementptr inbounds %class.powerComponents, ptr %587, i32 0, i32 0
  %589 = load double, ptr %588, align 8, !tbaa !22
  %590 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %591 = getelementptr inbounds %class.Bank, ptr %590, i32 0, i32 2
  %592 = getelementptr inbounds %class.Mat, ptr %591, i32 0, i32 13
  %593 = load ptr, ptr %592, align 8, !tbaa !57
  %594 = getelementptr inbounds %class.Component, ptr %593, i32 0, i32 1
  %595 = getelementptr inbounds %class.powerDef, ptr %594, i32 0, i32 0
  %596 = getelementptr inbounds %class.powerComponents, ptr %595, i32 0, i32 0
  %597 = load double, ptr %596, align 8, !tbaa !22
  %598 = fadd double %589, %597
  %599 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %600 = getelementptr inbounds %class.Bank, ptr %599, i32 0, i32 2
  %601 = getelementptr inbounds %class.Mat, ptr %600, i32 0, i32 23
  %602 = getelementptr inbounds %class.powerDef, ptr %601, i32 0, i32 0
  %603 = getelementptr inbounds %class.powerComponents, ptr %602, i32 0, i32 0
  %604 = load double, ptr %603, align 8, !tbaa !58
  %605 = fadd double %598, %604
  %606 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %607 = getelementptr inbounds %class.Bank, ptr %606, i32 0, i32 2
  %608 = getelementptr inbounds %class.Mat, ptr %607, i32 0, i32 24
  %609 = getelementptr inbounds %class.powerDef, ptr %608, i32 0, i32 0
  %610 = getelementptr inbounds %class.powerComponents, ptr %609, i32 0, i32 0
  %611 = load double, ptr %610, align 8, !tbaa !59
  %612 = fadd double %605, %611
  %613 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %614 = getelementptr inbounds %class.DynamicParameter, ptr %613, i32 0, i32 30
  %615 = load i32, ptr %614, align 8, !tbaa !40
  %616 = sitofp i32 %615 to double
  %617 = call double @llvm.fmuladd.f64(double %612, double %616, double %581)
  %618 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %619 = getelementptr inbounds %class.InputParameter, ptr %618, i32 0, i32 33
  %620 = load i32, ptr %619, align 8, !tbaa !52
  %621 = uitofp i32 %620 to double
  %622 = fmul double %617, %621
  %623 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 26
  store double %622, ptr %623, align 8, !tbaa !70
  %624 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %625 = getelementptr inbounds %class.Bank, ptr %624, i32 0, i32 2
  %626 = getelementptr inbounds %class.Mat, ptr %625, i32 0, i32 46
  %627 = getelementptr inbounds %class.powerDef, ptr %626, i32 0, i32 0
  %628 = getelementptr inbounds %class.powerComponents, ptr %627, i32 0, i32 0
  %629 = load double, ptr %628, align 8, !tbaa !39
  %630 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %631 = getelementptr inbounds %class.Bank, ptr %630, i32 0, i32 2
  %632 = getelementptr inbounds %class.Mat, ptr %631, i32 0, i32 26
  %633 = getelementptr inbounds %class.powerDef, ptr %632, i32 0, i32 0
  %634 = getelementptr inbounds %class.powerComponents, ptr %633, i32 0, i32 0
  %635 = load double, ptr %634, align 8, !tbaa !50
  %636 = fadd double %629, %635
  %637 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %638 = getelementptr inbounds %class.DynamicParameter, ptr %637, i32 0, i32 30
  %639 = load i32, ptr %638, align 8, !tbaa !40
  %640 = sitofp i32 %639 to double
  %641 = fmul double %636, %640
  %642 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 27
  store double %641, ptr %642, align 8, !tbaa !71
  %643 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %644 = getelementptr inbounds %class.Bank, ptr %643, i32 0, i32 2
  %645 = getelementptr inbounds %class.Mat, ptr %644, i32 0, i32 10
  %646 = load ptr, ptr %645, align 8, !tbaa !48
  %647 = getelementptr inbounds %class.Component, ptr %646, i32 0, i32 1
  %648 = getelementptr inbounds %class.powerDef, ptr %647, i32 0, i32 0
  %649 = getelementptr inbounds %class.powerComponents, ptr %648, i32 0, i32 1
  %650 = load double, ptr %649, align 8, !tbaa !35
  %651 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %652 = getelementptr inbounds %class.Bank, ptr %651, i32 0, i32 2
  %653 = getelementptr inbounds %class.Mat, ptr %652, i32 0, i32 11
  %654 = load ptr, ptr %653, align 8, !tbaa !72
  %655 = getelementptr inbounds %class.Component, ptr %654, i32 0, i32 1
  %656 = getelementptr inbounds %class.powerDef, ptr %655, i32 0, i32 0
  %657 = getelementptr inbounds %class.powerComponents, ptr %656, i32 0, i32 1
  %658 = load double, ptr %657, align 8, !tbaa !35
  %659 = fadd double %650, %658
  %660 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %661 = getelementptr inbounds %class.Bank, ptr %660, i32 0, i32 2
  %662 = getelementptr inbounds %class.Mat, ptr %661, i32 0, i32 12
  %663 = load ptr, ptr %662, align 8, !tbaa !56
  %664 = getelementptr inbounds %class.Component, ptr %663, i32 0, i32 1
  %665 = getelementptr inbounds %class.powerDef, ptr %664, i32 0, i32 0
  %666 = getelementptr inbounds %class.powerComponents, ptr %665, i32 0, i32 1
  %667 = load double, ptr %666, align 8, !tbaa !35
  %668 = fadd double %659, %667
  %669 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %670 = getelementptr inbounds %class.Bank, ptr %669, i32 0, i32 2
  %671 = getelementptr inbounds %class.Mat, ptr %670, i32 0, i32 13
  %672 = load ptr, ptr %671, align 8, !tbaa !57
  %673 = getelementptr inbounds %class.Component, ptr %672, i32 0, i32 1
  %674 = getelementptr inbounds %class.powerDef, ptr %673, i32 0, i32 0
  %675 = getelementptr inbounds %class.powerComponents, ptr %674, i32 0, i32 1
  %676 = load double, ptr %675, align 8, !tbaa !35
  %677 = fadd double %668, %676
  %678 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %679 = getelementptr inbounds %class.Bank, ptr %678, i32 0, i32 2
  %680 = getelementptr inbounds %class.Mat, ptr %679, i32 0, i32 21
  %681 = getelementptr inbounds %class.powerDef, ptr %680, i32 0, i32 0
  %682 = getelementptr inbounds %class.powerComponents, ptr %681, i32 0, i32 1
  %683 = load double, ptr %682, align 8, !tbaa !73
  %684 = fadd double %677, %683
  %685 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %686 = getelementptr inbounds %class.Bank, ptr %685, i32 0, i32 2
  %687 = getelementptr inbounds %class.Mat, ptr %686, i32 0, i32 22
  %688 = getelementptr inbounds %class.powerDef, ptr %687, i32 0, i32 0
  %689 = getelementptr inbounds %class.powerComponents, ptr %688, i32 0, i32 1
  %690 = load double, ptr %689, align 8, !tbaa !74
  %691 = fadd double %684, %690
  %692 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %693 = getelementptr inbounds %class.Bank, ptr %692, i32 0, i32 2
  %694 = getelementptr inbounds %class.Mat, ptr %693, i32 0, i32 23
  %695 = getelementptr inbounds %class.powerDef, ptr %694, i32 0, i32 0
  %696 = getelementptr inbounds %class.powerComponents, ptr %695, i32 0, i32 1
  %697 = load double, ptr %696, align 8, !tbaa !75
  %698 = fadd double %691, %697
  %699 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %700 = getelementptr inbounds %class.Bank, ptr %699, i32 0, i32 2
  %701 = getelementptr inbounds %class.Mat, ptr %700, i32 0, i32 24
  %702 = getelementptr inbounds %class.powerDef, ptr %701, i32 0, i32 0
  %703 = getelementptr inbounds %class.powerComponents, ptr %702, i32 0, i32 1
  %704 = load double, ptr %703, align 8, !tbaa !76
  %705 = fadd double %698, %704
  %706 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %707 = getelementptr inbounds %class.Bank, ptr %706, i32 0, i32 2
  %708 = getelementptr inbounds %class.Mat, ptr %707, i32 0, i32 62
  %709 = load double, ptr %708, align 8, !tbaa !77
  %710 = fadd double %705, %709
  %711 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %712 = getelementptr inbounds %class.DynamicParameter, ptr %711, i32 0, i32 30
  %713 = load i32, ptr %712, align 8, !tbaa !40
  %714 = sitofp i32 %713 to double
  %715 = fmul double %710, %714
  %716 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 28
  store double %715, ptr %716, align 8, !tbaa !78
  %717 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %718 = getelementptr inbounds %class.Bank, ptr %717, i32 0, i32 2
  %719 = getelementptr inbounds %class.Mat, ptr %718, i32 0, i32 10
  %720 = load ptr, ptr %719, align 8, !tbaa !48
  %721 = getelementptr inbounds %class.Component, ptr %720, i32 0, i32 1
  %722 = getelementptr inbounds %class.powerDef, ptr %721, i32 0, i32 0
  %723 = getelementptr inbounds %class.powerComponents, ptr %722, i32 0, i32 2
  %724 = load double, ptr %723, align 8, !tbaa !37
  %725 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %726 = getelementptr inbounds %class.Bank, ptr %725, i32 0, i32 2
  %727 = getelementptr inbounds %class.Mat, ptr %726, i32 0, i32 11
  %728 = load ptr, ptr %727, align 8, !tbaa !72
  %729 = getelementptr inbounds %class.Component, ptr %728, i32 0, i32 1
  %730 = getelementptr inbounds %class.powerDef, ptr %729, i32 0, i32 0
  %731 = getelementptr inbounds %class.powerComponents, ptr %730, i32 0, i32 2
  %732 = load double, ptr %731, align 8, !tbaa !37
  %733 = fadd double %724, %732
  %734 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %735 = getelementptr inbounds %class.Bank, ptr %734, i32 0, i32 2
  %736 = getelementptr inbounds %class.Mat, ptr %735, i32 0, i32 12
  %737 = load ptr, ptr %736, align 8, !tbaa !56
  %738 = getelementptr inbounds %class.Component, ptr %737, i32 0, i32 1
  %739 = getelementptr inbounds %class.powerDef, ptr %738, i32 0, i32 0
  %740 = getelementptr inbounds %class.powerComponents, ptr %739, i32 0, i32 2
  %741 = load double, ptr %740, align 8, !tbaa !37
  %742 = fadd double %733, %741
  %743 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %744 = getelementptr inbounds %class.Bank, ptr %743, i32 0, i32 2
  %745 = getelementptr inbounds %class.Mat, ptr %744, i32 0, i32 13
  %746 = load ptr, ptr %745, align 8, !tbaa !57
  %747 = getelementptr inbounds %class.Component, ptr %746, i32 0, i32 1
  %748 = getelementptr inbounds %class.powerDef, ptr %747, i32 0, i32 0
  %749 = getelementptr inbounds %class.powerComponents, ptr %748, i32 0, i32 2
  %750 = load double, ptr %749, align 8, !tbaa !37
  %751 = fadd double %742, %750
  %752 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %753 = getelementptr inbounds %class.Bank, ptr %752, i32 0, i32 2
  %754 = getelementptr inbounds %class.Mat, ptr %753, i32 0, i32 21
  %755 = getelementptr inbounds %class.powerDef, ptr %754, i32 0, i32 0
  %756 = getelementptr inbounds %class.powerComponents, ptr %755, i32 0, i32 2
  %757 = load double, ptr %756, align 8, !tbaa !79
  %758 = fadd double %751, %757
  %759 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %760 = getelementptr inbounds %class.Bank, ptr %759, i32 0, i32 2
  %761 = getelementptr inbounds %class.Mat, ptr %760, i32 0, i32 22
  %762 = getelementptr inbounds %class.powerDef, ptr %761, i32 0, i32 0
  %763 = getelementptr inbounds %class.powerComponents, ptr %762, i32 0, i32 2
  %764 = load double, ptr %763, align 8, !tbaa !80
  %765 = fadd double %758, %764
  %766 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %767 = getelementptr inbounds %class.Bank, ptr %766, i32 0, i32 2
  %768 = getelementptr inbounds %class.Mat, ptr %767, i32 0, i32 23
  %769 = getelementptr inbounds %class.powerDef, ptr %768, i32 0, i32 0
  %770 = getelementptr inbounds %class.powerComponents, ptr %769, i32 0, i32 2
  %771 = load double, ptr %770, align 8, !tbaa !81
  %772 = fadd double %765, %771
  %773 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %774 = getelementptr inbounds %class.Bank, ptr %773, i32 0, i32 2
  %775 = getelementptr inbounds %class.Mat, ptr %774, i32 0, i32 24
  %776 = getelementptr inbounds %class.powerDef, ptr %775, i32 0, i32 0
  %777 = getelementptr inbounds %class.powerComponents, ptr %776, i32 0, i32 2
  %778 = load double, ptr %777, align 8, !tbaa !82
  %779 = fadd double %772, %778
  %780 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %781 = getelementptr inbounds %class.DynamicParameter, ptr %780, i32 0, i32 30
  %782 = load i32, ptr %781, align 8, !tbaa !40
  %783 = sitofp i32 %782 to double
  %784 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 28
  %785 = load double, ptr %784, align 8, !tbaa !78
  %786 = call double @llvm.fmuladd.f64(double %779, double %783, double %785)
  store double %786, ptr %784, align 8, !tbaa !78
  %787 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %788 = getelementptr inbounds %class.Bank, ptr %787, i32 0, i32 2
  %789 = getelementptr inbounds %class.Mat, ptr %788, i32 0, i32 10
  %790 = load ptr, ptr %789, align 8, !tbaa !48
  %791 = getelementptr inbounds %class.Component, ptr %790, i32 0, i32 1
  %792 = getelementptr inbounds %class.powerDef, ptr %791, i32 0, i32 0
  %793 = getelementptr inbounds %class.powerComponents, ptr %792, i32 0, i32 1
  %794 = load double, ptr %793, align 8, !tbaa !35
  %795 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %796 = getelementptr inbounds %class.Bank, ptr %795, i32 0, i32 2
  %797 = getelementptr inbounds %class.Mat, ptr %796, i32 0, i32 11
  %798 = load ptr, ptr %797, align 8, !tbaa !72
  %799 = getelementptr inbounds %class.Component, ptr %798, i32 0, i32 1
  %800 = getelementptr inbounds %class.powerDef, ptr %799, i32 0, i32 0
  %801 = getelementptr inbounds %class.powerComponents, ptr %800, i32 0, i32 1
  %802 = load double, ptr %801, align 8, !tbaa !35
  %803 = fadd double %794, %802
  %804 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %805 = getelementptr inbounds %class.Bank, ptr %804, i32 0, i32 2
  %806 = getelementptr inbounds %class.Mat, ptr %805, i32 0, i32 12
  %807 = load ptr, ptr %806, align 8, !tbaa !56
  %808 = getelementptr inbounds %class.Component, ptr %807, i32 0, i32 1
  %809 = getelementptr inbounds %class.powerDef, ptr %808, i32 0, i32 0
  %810 = getelementptr inbounds %class.powerComponents, ptr %809, i32 0, i32 1
  %811 = load double, ptr %810, align 8, !tbaa !35
  %812 = fadd double %803, %811
  %813 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %814 = getelementptr inbounds %class.Bank, ptr %813, i32 0, i32 2
  %815 = getelementptr inbounds %class.Mat, ptr %814, i32 0, i32 13
  %816 = load ptr, ptr %815, align 8, !tbaa !57
  %817 = getelementptr inbounds %class.Component, ptr %816, i32 0, i32 1
  %818 = getelementptr inbounds %class.powerDef, ptr %817, i32 0, i32 0
  %819 = getelementptr inbounds %class.powerComponents, ptr %818, i32 0, i32 1
  %820 = load double, ptr %819, align 8, !tbaa !35
  %821 = fadd double %812, %820
  %822 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %823 = getelementptr inbounds %class.Bank, ptr %822, i32 0, i32 2
  %824 = getelementptr inbounds %class.Mat, ptr %823, i32 0, i32 21
  %825 = getelementptr inbounds %class.powerDef, ptr %824, i32 0, i32 0
  %826 = getelementptr inbounds %class.powerComponents, ptr %825, i32 0, i32 1
  %827 = load double, ptr %826, align 8, !tbaa !73
  %828 = fadd double %821, %827
  %829 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %830 = getelementptr inbounds %class.Bank, ptr %829, i32 0, i32 2
  %831 = getelementptr inbounds %class.Mat, ptr %830, i32 0, i32 22
  %832 = getelementptr inbounds %class.powerDef, ptr %831, i32 0, i32 0
  %833 = getelementptr inbounds %class.powerComponents, ptr %832, i32 0, i32 1
  %834 = load double, ptr %833, align 8, !tbaa !74
  %835 = fadd double %828, %834
  %836 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %837 = getelementptr inbounds %class.Bank, ptr %836, i32 0, i32 2
  %838 = getelementptr inbounds %class.Mat, ptr %837, i32 0, i32 23
  %839 = getelementptr inbounds %class.powerDef, ptr %838, i32 0, i32 0
  %840 = getelementptr inbounds %class.powerComponents, ptr %839, i32 0, i32 1
  %841 = load double, ptr %840, align 8, !tbaa !75
  %842 = fadd double %835, %841
  %843 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %844 = getelementptr inbounds %class.Bank, ptr %843, i32 0, i32 2
  %845 = getelementptr inbounds %class.Mat, ptr %844, i32 0, i32 24
  %846 = getelementptr inbounds %class.powerDef, ptr %845, i32 0, i32 0
  %847 = getelementptr inbounds %class.powerComponents, ptr %846, i32 0, i32 1
  %848 = load double, ptr %847, align 8, !tbaa !76
  %849 = fadd double %842, %848
  %850 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %851 = getelementptr inbounds %class.Bank, ptr %850, i32 0, i32 2
  %852 = getelementptr inbounds %class.Mat, ptr %851, i32 0, i32 63
  %853 = load double, ptr %852, align 8, !tbaa !83
  %854 = fadd double %849, %853
  %855 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %856 = getelementptr inbounds %class.DynamicParameter, ptr %855, i32 0, i32 30
  %857 = load i32, ptr %856, align 8, !tbaa !40
  %858 = sitofp i32 %857 to double
  %859 = fmul double %854, %858
  %860 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 29
  store double %859, ptr %860, align 8, !tbaa !84
  %861 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %862 = getelementptr inbounds %class.Bank, ptr %861, i32 0, i32 2
  %863 = getelementptr inbounds %class.Mat, ptr %862, i32 0, i32 10
  %864 = load ptr, ptr %863, align 8, !tbaa !48
  %865 = getelementptr inbounds %class.Component, ptr %864, i32 0, i32 1
  %866 = getelementptr inbounds %class.powerDef, ptr %865, i32 0, i32 0
  %867 = getelementptr inbounds %class.powerComponents, ptr %866, i32 0, i32 2
  %868 = load double, ptr %867, align 8, !tbaa !37
  %869 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %870 = getelementptr inbounds %class.Bank, ptr %869, i32 0, i32 2
  %871 = getelementptr inbounds %class.Mat, ptr %870, i32 0, i32 11
  %872 = load ptr, ptr %871, align 8, !tbaa !72
  %873 = getelementptr inbounds %class.Component, ptr %872, i32 0, i32 1
  %874 = getelementptr inbounds %class.powerDef, ptr %873, i32 0, i32 0
  %875 = getelementptr inbounds %class.powerComponents, ptr %874, i32 0, i32 2
  %876 = load double, ptr %875, align 8, !tbaa !37
  %877 = fadd double %868, %876
  %878 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %879 = getelementptr inbounds %class.Bank, ptr %878, i32 0, i32 2
  %880 = getelementptr inbounds %class.Mat, ptr %879, i32 0, i32 12
  %881 = load ptr, ptr %880, align 8, !tbaa !56
  %882 = getelementptr inbounds %class.Component, ptr %881, i32 0, i32 1
  %883 = getelementptr inbounds %class.powerDef, ptr %882, i32 0, i32 0
  %884 = getelementptr inbounds %class.powerComponents, ptr %883, i32 0, i32 2
  %885 = load double, ptr %884, align 8, !tbaa !37
  %886 = fadd double %877, %885
  %887 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %888 = getelementptr inbounds %class.Bank, ptr %887, i32 0, i32 2
  %889 = getelementptr inbounds %class.Mat, ptr %888, i32 0, i32 13
  %890 = load ptr, ptr %889, align 8, !tbaa !57
  %891 = getelementptr inbounds %class.Component, ptr %890, i32 0, i32 1
  %892 = getelementptr inbounds %class.powerDef, ptr %891, i32 0, i32 0
  %893 = getelementptr inbounds %class.powerComponents, ptr %892, i32 0, i32 2
  %894 = load double, ptr %893, align 8, !tbaa !37
  %895 = fadd double %886, %894
  %896 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %897 = getelementptr inbounds %class.Bank, ptr %896, i32 0, i32 2
  %898 = getelementptr inbounds %class.Mat, ptr %897, i32 0, i32 21
  %899 = getelementptr inbounds %class.powerDef, ptr %898, i32 0, i32 0
  %900 = getelementptr inbounds %class.powerComponents, ptr %899, i32 0, i32 2
  %901 = load double, ptr %900, align 8, !tbaa !79
  %902 = fadd double %895, %901
  %903 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %904 = getelementptr inbounds %class.Bank, ptr %903, i32 0, i32 2
  %905 = getelementptr inbounds %class.Mat, ptr %904, i32 0, i32 22
  %906 = getelementptr inbounds %class.powerDef, ptr %905, i32 0, i32 0
  %907 = getelementptr inbounds %class.powerComponents, ptr %906, i32 0, i32 2
  %908 = load double, ptr %907, align 8, !tbaa !80
  %909 = fadd double %902, %908
  %910 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %911 = getelementptr inbounds %class.Bank, ptr %910, i32 0, i32 2
  %912 = getelementptr inbounds %class.Mat, ptr %911, i32 0, i32 23
  %913 = getelementptr inbounds %class.powerDef, ptr %912, i32 0, i32 0
  %914 = getelementptr inbounds %class.powerComponents, ptr %913, i32 0, i32 2
  %915 = load double, ptr %914, align 8, !tbaa !81
  %916 = fadd double %909, %915
  %917 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %918 = getelementptr inbounds %class.Bank, ptr %917, i32 0, i32 2
  %919 = getelementptr inbounds %class.Mat, ptr %918, i32 0, i32 24
  %920 = getelementptr inbounds %class.powerDef, ptr %919, i32 0, i32 0
  %921 = getelementptr inbounds %class.powerComponents, ptr %920, i32 0, i32 2
  %922 = load double, ptr %921, align 8, !tbaa !82
  %923 = fadd double %916, %922
  %924 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %925 = getelementptr inbounds %class.DynamicParameter, ptr %924, i32 0, i32 30
  %926 = load i32, ptr %925, align 8, !tbaa !40
  %927 = sitofp i32 %926 to double
  %928 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 29
  %929 = load double, ptr %928, align 8, !tbaa !84
  %930 = call double @llvm.fmuladd.f64(double %923, double %927, double %929)
  store double %930, ptr %928, align 8, !tbaa !84
  %931 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %932 = getelementptr inbounds %class.powerDef, ptr %931, i32 0, i32 0
  %933 = getelementptr inbounds %class.powerComponents, ptr %932, i32 0, i32 1
  %934 = load double, ptr %933, align 8, !tbaa !36
  %935 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %936 = getelementptr inbounds %class.Bank, ptr %935, i32 0, i32 3
  %937 = load ptr, ptr %936, align 8, !tbaa !62
  %938 = getelementptr inbounds %class.Component, ptr %937, i32 0, i32 1
  %939 = getelementptr inbounds %class.powerDef, ptr %938, i32 0, i32 0
  %940 = getelementptr inbounds %class.powerComponents, ptr %939, i32 0, i32 1
  %941 = load double, ptr %940, align 8, !tbaa !35
  %942 = fadd double %934, %941
  %943 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %944 = getelementptr inbounds %class.Bank, ptr %943, i32 0, i32 4
  %945 = load ptr, ptr %944, align 8, !tbaa !42
  %946 = getelementptr inbounds %class.Component, ptr %945, i32 0, i32 1
  %947 = getelementptr inbounds %class.powerDef, ptr %946, i32 0, i32 0
  %948 = getelementptr inbounds %class.powerComponents, ptr %947, i32 0, i32 1
  %949 = load double, ptr %948, align 8, !tbaa !35
  %950 = fadd double %942, %949
  %951 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %952 = getelementptr inbounds %class.Bank, ptr %951, i32 0, i32 5
  %953 = load ptr, ptr %952, align 8, !tbaa !43
  %954 = getelementptr inbounds %class.Component, ptr %953, i32 0, i32 1
  %955 = getelementptr inbounds %class.powerDef, ptr %954, i32 0, i32 0
  %956 = getelementptr inbounds %class.powerComponents, ptr %955, i32 0, i32 1
  %957 = load double, ptr %956, align 8, !tbaa !35
  %958 = fadd double %950, %957
  %959 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 30
  store double %958, ptr %959, align 8, !tbaa !85
  %960 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %961 = getelementptr inbounds %class.powerDef, ptr %960, i32 0, i32 0
  %962 = getelementptr inbounds %class.powerComponents, ptr %961, i32 0, i32 2
  %963 = load double, ptr %962, align 8, !tbaa !38
  %964 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %965 = getelementptr inbounds %class.Bank, ptr %964, i32 0, i32 3
  %966 = load ptr, ptr %965, align 8, !tbaa !62
  %967 = getelementptr inbounds %class.Component, ptr %966, i32 0, i32 1
  %968 = getelementptr inbounds %class.powerDef, ptr %967, i32 0, i32 0
  %969 = getelementptr inbounds %class.powerComponents, ptr %968, i32 0, i32 2
  %970 = load double, ptr %969, align 8, !tbaa !37
  %971 = fadd double %963, %970
  %972 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %973 = getelementptr inbounds %class.Bank, ptr %972, i32 0, i32 4
  %974 = load ptr, ptr %973, align 8, !tbaa !42
  %975 = getelementptr inbounds %class.Component, ptr %974, i32 0, i32 1
  %976 = getelementptr inbounds %class.powerDef, ptr %975, i32 0, i32 0
  %977 = getelementptr inbounds %class.powerComponents, ptr %976, i32 0, i32 2
  %978 = load double, ptr %977, align 8, !tbaa !37
  %979 = fadd double %971, %978
  %980 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %981 = getelementptr inbounds %class.Bank, ptr %980, i32 0, i32 5
  %982 = load ptr, ptr %981, align 8, !tbaa !43
  %983 = getelementptr inbounds %class.Component, ptr %982, i32 0, i32 1
  %984 = getelementptr inbounds %class.powerDef, ptr %983, i32 0, i32 0
  %985 = getelementptr inbounds %class.powerComponents, ptr %984, i32 0, i32 2
  %986 = load double, ptr %985, align 8, !tbaa !37
  %987 = fadd double %979, %986
  %988 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 30
  %989 = load double, ptr %988, align 8, !tbaa !85
  %990 = fadd double %989, %987
  store double %990, ptr %988, align 8, !tbaa !85
  %991 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %992 = getelementptr inbounds %class.DynamicParameter, ptr %991, i32 0, i32 3
  %993 = load i8, ptr %992, align 1, !tbaa !27, !range !28, !noundef !29
  %994 = trunc i8 %993 to i1
  br i1 %994, label %1000, label %995

995:                                              ; preds = %350
  %996 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %997 = getelementptr inbounds %class.DynamicParameter, ptr %996, i32 0, i32 2
  %998 = load i8, ptr %997, align 2, !tbaa !30, !range !28, !noundef !29
  %999 = trunc i8 %998 to i1
  br i1 %999, label %1000, label %1033

1000:                                             ; preds = %995, %350
  %1001 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 6
  %1002 = load ptr, ptr %1001, align 8, !tbaa !31
  %1003 = getelementptr inbounds %class.Component, ptr %1002, i32 0, i32 1
  %1004 = getelementptr inbounds %class.powerDef, ptr %1003, i32 0, i32 0
  %1005 = getelementptr inbounds %class.powerComponents, ptr %1004, i32 0, i32 1
  %1006 = load double, ptr %1005, align 8, !tbaa !35
  %1007 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 7
  %1008 = load ptr, ptr %1007, align 8, !tbaa !33
  %1009 = getelementptr inbounds %class.Component, ptr %1008, i32 0, i32 1
  %1010 = getelementptr inbounds %class.powerDef, ptr %1009, i32 0, i32 0
  %1011 = getelementptr inbounds %class.powerComponents, ptr %1010, i32 0, i32 1
  %1012 = load double, ptr %1011, align 8, !tbaa !35
  %1013 = fadd double %1006, %1012
  %1014 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 30
  %1015 = load double, ptr %1014, align 8, !tbaa !85
  %1016 = fadd double %1015, %1013
  store double %1016, ptr %1014, align 8, !tbaa !85
  %1017 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 6
  %1018 = load ptr, ptr %1017, align 8, !tbaa !31
  %1019 = getelementptr inbounds %class.Component, ptr %1018, i32 0, i32 1
  %1020 = getelementptr inbounds %class.powerDef, ptr %1019, i32 0, i32 0
  %1021 = getelementptr inbounds %class.powerComponents, ptr %1020, i32 0, i32 2
  %1022 = load double, ptr %1021, align 8, !tbaa !37
  %1023 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 7
  %1024 = load ptr, ptr %1023, align 8, !tbaa !33
  %1025 = getelementptr inbounds %class.Component, ptr %1024, i32 0, i32 1
  %1026 = getelementptr inbounds %class.powerDef, ptr %1025, i32 0, i32 0
  %1027 = getelementptr inbounds %class.powerComponents, ptr %1026, i32 0, i32 2
  %1028 = load double, ptr %1027, align 8, !tbaa !37
  %1029 = fadd double %1022, %1028
  %1030 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 30
  %1031 = load double, ptr %1030, align 8, !tbaa !85
  %1032 = fadd double %1031, %1029
  store double %1032, ptr %1030, align 8, !tbaa !85
  br label %1033

1033:                                             ; preds = %1000, %995
  %1034 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1035 = getelementptr inbounds %class.DynamicParameter, ptr %1034, i32 0, i32 32
  %1036 = load i8, ptr %1035, align 8, !tbaa !45, !range !28, !noundef !29
  %1037 = trunc i8 %1036 to i1
  br i1 %1037, label %1038, label %1124

1038:                                             ; preds = %1033
  %1039 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1040 = getelementptr inbounds %class.Bank, ptr %1039, i32 0, i32 2
  %1041 = getelementptr inbounds %class.Mat, ptr %1040, i32 0, i32 10
  %1042 = load ptr, ptr %1041, align 8, !tbaa !48
  %1043 = getelementptr inbounds %class.Component, ptr %1042, i32 0, i32 1
  %1044 = getelementptr inbounds %class.powerDef, ptr %1043, i32 0, i32 0
  %1045 = getelementptr inbounds %class.powerComponents, ptr %1044, i32 0, i32 0
  %1046 = load double, ptr %1045, align 8, !tbaa !22
  %1047 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1048 = getelementptr inbounds %class.DynamicParameter, ptr %1047, i32 0, i32 30
  %1049 = load i32, ptr %1048, align 8, !tbaa !40
  %1050 = sitofp i32 %1049 to double
  %1051 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1052 = getelementptr inbounds %class.Bank, ptr %1051, i32 0, i32 2
  %1053 = getelementptr inbounds %class.Mat, ptr %1052, i32 0, i32 2
  %1054 = load ptr, ptr %1053, align 8, !tbaa !86
  %1055 = getelementptr inbounds %class.Component, ptr %1054, i32 0, i32 1
  %1056 = getelementptr inbounds %class.powerDef, ptr %1055, i32 0, i32 0
  %1057 = getelementptr inbounds %class.powerComponents, ptr %1056, i32 0, i32 0
  %1058 = load double, ptr %1057, align 8, !tbaa !22
  %1059 = call double @llvm.fmuladd.f64(double %1046, double %1050, double %1058)
  %1060 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1061 = getelementptr inbounds %class.DynamicParameter, ptr %1060, i32 0, i32 35
  %1062 = load i32, ptr %1061, align 8, !tbaa !87
  %1063 = uitofp i32 %1062 to double
  %1064 = fmul double %1059, %1063
  %1065 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1066 = getelementptr inbounds %class.DynamicParameter, ptr %1065, i32 0, i32 5
  %1067 = load i32, ptr %1066, align 8, !tbaa !88
  %1068 = sitofp i32 %1067 to double
  %1069 = fmul double %1064, %1068
  %1070 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 23
  store double %1069, ptr %1070, align 8, !tbaa !89
  %1071 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1072 = getelementptr inbounds %class.Bank, ptr %1071, i32 0, i32 2
  %1073 = getelementptr inbounds %class.Mat, ptr %1072, i32 0, i32 49
  %1074 = load double, ptr %1073, align 8, !tbaa !90
  %1075 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1076 = getelementptr inbounds %class.DynamicParameter, ptr %1075, i32 0, i32 36
  %1077 = load i32, ptr %1076, align 4, !tbaa !91
  %1078 = uitofp i32 %1077 to double
  %1079 = fmul double %1074, %1078
  %1080 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1081 = getelementptr inbounds %class.DynamicParameter, ptr %1080, i32 0, i32 35
  %1082 = load i32, ptr %1081, align 8, !tbaa !87
  %1083 = uitofp i32 %1082 to double
  %1084 = fmul double %1079, %1083
  %1085 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1086 = getelementptr inbounds %class.DynamicParameter, ptr %1085, i32 0, i32 5
  %1087 = load i32, ptr %1086, align 8, !tbaa !88
  %1088 = sitofp i32 %1087 to double
  %1089 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 23
  %1090 = load double, ptr %1089, align 8, !tbaa !89
  %1091 = call double @llvm.fmuladd.f64(double %1084, double %1088, double %1090)
  store double %1091, ptr %1089, align 8, !tbaa !89
  %1092 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1093 = getelementptr inbounds %class.Bank, ptr %1092, i32 0, i32 2
  %1094 = getelementptr inbounds %class.Mat, ptr %1093, i32 0, i32 26
  %1095 = getelementptr inbounds %class.powerDef, ptr %1094, i32 0, i32 0
  %1096 = getelementptr inbounds %class.powerComponents, ptr %1095, i32 0, i32 0
  %1097 = load double, ptr %1096, align 8, !tbaa !50
  %1098 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1099 = getelementptr inbounds %class.DynamicParameter, ptr %1098, i32 0, i32 30
  %1100 = load i32, ptr %1099, align 8, !tbaa !40
  %1101 = sitofp i32 %1100 to double
  %1102 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 23
  %1103 = load double, ptr %1102, align 8, !tbaa !89
  %1104 = call double @llvm.fmuladd.f64(double %1097, double %1101, double %1103)
  store double %1104, ptr %1102, align 8, !tbaa !89
  %1105 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1106 = getelementptr inbounds %class.Bank, ptr %1105, i32 0, i32 2
  %1107 = getelementptr inbounds %class.Mat, ptr %1106, i32 0, i32 60
  %1108 = getelementptr inbounds %class.powerDef, ptr %1107, i32 0, i32 0
  %1109 = getelementptr inbounds %class.powerComponents, ptr %1108, i32 0, i32 0
  %1110 = load double, ptr %1109, align 8, !tbaa !46
  %1111 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1112 = getelementptr inbounds %class.DynamicParameter, ptr %1111, i32 0, i32 30
  %1113 = load i32, ptr %1112, align 8, !tbaa !40
  %1114 = sitofp i32 %1113 to double
  %1115 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 23
  %1116 = load double, ptr %1115, align 8, !tbaa !89
  %1117 = call double @llvm.fmuladd.f64(double %1110, double %1114, double %1116)
  store double %1117, ptr %1115, align 8, !tbaa !89
  %1118 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1119 = getelementptr inbounds %class.DynamicParameter, ptr %1118, i32 0, i32 45
  %1120 = load double, ptr %1119, align 8, !tbaa !92
  %1121 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 23
  %1122 = load double, ptr %1121, align 8, !tbaa !89
  %1123 = fdiv double %1122, %1120
  store double %1123, ptr %1121, align 8, !tbaa !89
  br label %1124

1124:                                             ; preds = %1038, %1033
  %1125 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1126 = getelementptr inbounds %class.DynamicParameter, ptr %1125, i32 0, i32 0
  %1127 = load i8, ptr %1126, align 8, !tbaa !93, !range !28, !noundef !29
  %1128 = trunc i8 %1127 to i1
  %1129 = zext i1 %1128 to i32
  %1130 = icmp eq i32 %1129, 0
  br i1 %1130, label %1131, label %1239

1131:                                             ; preds = %1124
  %1132 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 20
  %1133 = load double, ptr %1132, align 8, !tbaa !47
  %1134 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %1135 = getelementptr inbounds %class.powerDef, ptr %1134, i32 0, i32 0
  %1136 = getelementptr inbounds %class.powerComponents, ptr %1135, i32 0, i32 0
  store double %1133, ptr %1136, align 8, !tbaa !22
  %1137 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 20
  %1138 = load double, ptr %1137, align 8, !tbaa !47
  %1139 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 22
  %1140 = load double, ptr %1139, align 8, !tbaa !61
  %1141 = fsub double %1138, %1140
  %1142 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1143 = getelementptr inbounds %class.Bank, ptr %1142, i32 0, i32 2
  %1144 = getelementptr inbounds %class.Mat, ptr %1143, i32 0, i32 46
  %1145 = getelementptr inbounds %class.powerDef, ptr %1144, i32 0, i32 0
  %1146 = getelementptr inbounds %class.powerComponents, ptr %1145, i32 0, i32 0
  %1147 = load double, ptr %1146, align 8, !tbaa !39
  %1148 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1149 = getelementptr inbounds %class.DynamicParameter, ptr %1148, i32 0, i32 30
  %1150 = load i32, ptr %1149, align 8, !tbaa !40
  %1151 = sitofp i32 %1150 to double
  %1152 = fneg double %1147
  %1153 = call double @llvm.fmuladd.f64(double %1152, double %1151, double %1141)
  %1154 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1155 = getelementptr inbounds %class.Bank, ptr %1154, i32 0, i32 2
  %1156 = getelementptr inbounds %class.Mat, ptr %1155, i32 0, i32 46
  %1157 = getelementptr inbounds %class.powerDef, ptr %1156, i32 0, i32 1
  %1158 = getelementptr inbounds %class.powerComponents, ptr %1157, i32 0, i32 0
  %1159 = load double, ptr %1158, align 8, !tbaa !41
  %1160 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1161 = getelementptr inbounds %class.DynamicParameter, ptr %1160, i32 0, i32 30
  %1162 = load i32, ptr %1161, align 8, !tbaa !40
  %1163 = sitofp i32 %1162 to double
  %1164 = call double @llvm.fmuladd.f64(double %1159, double %1163, double %1153)
  %1165 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %1166 = getelementptr inbounds %class.powerDef, ptr %1165, i32 0, i32 1
  %1167 = getelementptr inbounds %class.powerComponents, ptr %1166, i32 0, i32 0
  %1168 = load double, ptr %1167, align 8, !tbaa !26
  %1169 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 8
  %1170 = getelementptr inbounds %class.powerDef, ptr %1169, i32 0, i32 0
  %1171 = getelementptr inbounds %class.powerComponents, ptr %1170, i32 0, i32 0
  %1172 = load double, ptr %1171, align 8, !tbaa !24
  %1173 = fsub double %1168, %1172
  %1174 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1175 = getelementptr inbounds %class.Bank, ptr %1174, i32 0, i32 5
  %1176 = load ptr, ptr %1175, align 8, !tbaa !43
  %1177 = getelementptr inbounds %class.Component, ptr %1176, i32 0, i32 1
  %1178 = getelementptr inbounds %class.powerDef, ptr %1177, i32 0, i32 0
  %1179 = getelementptr inbounds %class.powerComponents, ptr %1178, i32 0, i32 0
  %1180 = load double, ptr %1179, align 8, !tbaa !22
  %1181 = fsub double %1173, %1180
  %1182 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1183 = getelementptr inbounds %class.Bank, ptr %1182, i32 0, i32 4
  %1184 = load ptr, ptr %1183, align 8, !tbaa !42
  %1185 = getelementptr inbounds %class.Component, ptr %1184, i32 0, i32 1
  %1186 = getelementptr inbounds %class.powerDef, ptr %1185, i32 0, i32 0
  %1187 = getelementptr inbounds %class.powerComponents, ptr %1186, i32 0, i32 0
  %1188 = load double, ptr %1187, align 8, !tbaa !22
  %1189 = fadd double %1181, %1188
  %1190 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1191 = getelementptr inbounds %class.InputParameter, ptr %1190, i32 0, i32 33
  %1192 = load i32, ptr %1191, align 8, !tbaa !52
  %1193 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1194 = getelementptr inbounds %class.InputParameter, ptr %1193, i32 0, i32 34
  %1195 = load i32, ptr %1194, align 4, !tbaa !55
  %1196 = udiv i32 %1192, %1195
  %1197 = icmp ugt i32 %1196, 1
  br i1 %1197, label %1198, label %1206

1198:                                             ; preds = %1131
  %1199 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1200 = getelementptr inbounds %class.InputParameter, ptr %1199, i32 0, i32 33
  %1201 = load i32, ptr %1200, align 8, !tbaa !52
  %1202 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1203 = getelementptr inbounds %class.InputParameter, ptr %1202, i32 0, i32 34
  %1204 = load i32, ptr %1203, align 4, !tbaa !55
  %1205 = udiv i32 %1201, %1204
  br label %1207

1206:                                             ; preds = %1131
  br label %1207

1207:                                             ; preds = %1206, %1198
  %1208 = phi i32 [ %1205, %1198 ], [ 1, %1206 ]
  %1209 = sub i32 %1208, 1
  %1210 = uitofp i32 %1209 to double
  %1211 = call double @llvm.fmuladd.f64(double %1189, double %1210, double %1164)
  %1212 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %1213 = getelementptr inbounds %class.powerDef, ptr %1212, i32 0, i32 1
  %1214 = getelementptr inbounds %class.powerComponents, ptr %1213, i32 0, i32 0
  store double %1211, ptr %1214, align 8, !tbaa !44
  %1215 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1216 = getelementptr inbounds %class.DynamicParameter, ptr %1215, i32 0, i32 32
  %1217 = load i8, ptr %1216, align 8, !tbaa !45, !range !28, !noundef !29
  %1218 = trunc i8 %1217 to i1
  %1219 = zext i1 %1218 to i32
  %1220 = icmp eq i32 %1219, 0
  br i1 %1220, label %1221, label %1238

1221:                                             ; preds = %1207
  %1222 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 2
  %1223 = getelementptr inbounds %class.Bank, ptr %1222, i32 0, i32 2
  %1224 = getelementptr inbounds %class.Mat, ptr %1223, i32 0, i32 60
  %1225 = getelementptr inbounds %class.powerDef, ptr %1224, i32 0, i32 0
  %1226 = getelementptr inbounds %class.powerComponents, ptr %1225, i32 0, i32 0
  %1227 = load double, ptr %1226, align 8, !tbaa !46
  %1228 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1229 = getelementptr inbounds %class.DynamicParameter, ptr %1228, i32 0, i32 30
  %1230 = load i32, ptr %1229, align 8, !tbaa !40
  %1231 = sitofp i32 %1230 to double
  %1232 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %1233 = getelementptr inbounds %class.powerDef, ptr %1232, i32 0, i32 1
  %1234 = getelementptr inbounds %class.powerComponents, ptr %1233, i32 0, i32 0
  %1235 = load double, ptr %1234, align 8, !tbaa !44
  %1236 = fneg double %1227
  %1237 = call double @llvm.fmuladd.f64(double %1236, double %1231, double %1235)
  store double %1237, ptr %1234, align 8, !tbaa !44
  br label %1238

1238:                                             ; preds = %1221, %1207
  br label %1239

1239:                                             ; preds = %1238, %1124
  %1240 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 1
  %1241 = getelementptr inbounds %class.DynamicParameter, ptr %1240, i32 0, i32 32
  %1242 = load i8, ptr %1241, align 8, !tbaa !45, !range !28, !noundef !29
  %1243 = trunc i8 %1242 to i1
  br i1 %1243, label %1244, label %1252

1244:                                             ; preds = %1239
  %1245 = getelementptr inbounds %class.UCA, ptr %3, i32 0, i32 23
  %1246 = load double, ptr %1245, align 8, !tbaa !89
  %1247 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %1248 = getelementptr inbounds %class.powerDef, ptr %1247, i32 0, i32 0
  %1249 = getelementptr inbounds %class.powerComponents, ptr %1248, i32 0, i32 1
  %1250 = load double, ptr %1249, align 8, !tbaa !35
  %1251 = fadd double %1250, %1246
  store double %1251, ptr %1249, align 8, !tbaa !35
  br label %1252

1252:                                             ; preds = %1244, %1239
  %1253 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %1254 = getelementptr inbounds %class.powerDef, ptr %1253, i32 0, i32 0
  %1255 = getelementptr inbounds %class.powerComponents, ptr %1254, i32 0, i32 0
  %1256 = load double, ptr %1255, align 8, !tbaa !22
  %1257 = fcmp ogt double %1256, 0.000000e+00
  br i1 %1257, label %1258, label %1259

1258:                                             ; preds = %1252
  br label %1261

1259:                                             ; preds = %1252
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 423, ptr noundef @__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv) #5
  unreachable

1260:                                             ; No predecessors!
  br label %1261

1261:                                             ; preds = %1260, %1258
  %1262 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %1263 = getelementptr inbounds %class.powerDef, ptr %1262, i32 0, i32 1
  %1264 = getelementptr inbounds %class.powerComponents, ptr %1263, i32 0, i32 0
  %1265 = load double, ptr %1264, align 8, !tbaa !44
  %1266 = fcmp ogt double %1265, 0.000000e+00
  br i1 %1266, label %1267, label %1268

1267:                                             ; preds = %1261
  br label %1270

1268:                                             ; preds = %1261
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 424, ptr noundef @__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv) #5
  unreachable

1269:                                             ; No predecessors!
  br label %1270

1270:                                             ; preds = %1269, %1267
  %1271 = getelementptr inbounds %class.Component, ptr %3, i32 0, i32 1
  %1272 = getelementptr inbounds %class.powerDef, ptr %1271, i32 0, i32 0
  %1273 = getelementptr inbounds %class.powerComponents, ptr %1272, i32 0, i32 1
  %1274 = load double, ptr %1273, align 8, !tbaa !35
  %1275 = fcmp ogt double %1274, 0.000000e+00
  br i1 %1275, label %1276, label %1277

1276:                                             ; preds = %1270
  br label %1279

1277:                                             ; preds = %1270
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 425, ptr noundef @__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv) #5
  unreachable

1278:                                             ; No predecessors!
  br label %1279

1279:                                             ; preds = %1278, %1276
  ret void
}

declare void @_ZN4Bank20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(3416)) #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(120) ptr @_ZN8powerDefaSERKS_(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(120)) #2 align 2

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "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 = { inlinehint 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 3968}
!10 = !{!"_ZTS3UCA", !11, i64 0, !16, i64 280, !19, i64 552, !6, i64 3968, !6, i64 3976, !6, i64 3984, !6, i64 3992, !6, i64 4000, !14, i64 4008, !18, i64 4128, !18, i64 4132, !18, i64 4136, !18, i64 4140, !18, i64 4144, !18, i64 4148, !18, i64 4152, !18, i64 4156, !18, i64 4160, !18, 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}
!11 = !{!"_ZTS9Component", !12, i64 0, !14, i64 24, !14, i64 144, !13, i64 264, !13, i64 272}
!12 = !{!"_ZTS4Area", !13, i64 0, !13, i64 8, !13, i64 16}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTS8powerDef", !15, i64 0, !15, i64 40, !15, i64 80}
!15 = !{!"_ZTS15powerComponents", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!16 = !{!"_ZTS16DynamicParameter", !17, i64 0, !17, i64 1, !17, i64 2, !17, i64 3, !18, i64 4, !18, i64 8, !18, i64 12, !13, i64 16, !18, i64 24, !18, i64 28, !18, i64 32, !18, i64 36, !18, i64 40, !18, i64 44, !18, i64 48, !18, i64 52, !18, i64 56, !18, i64 60, !18, i64 64, !18, i64 68, !18, i64 72, !18, i64 76, !18, i64 80, !18, i64 84, !18, i64 88, !18, i64 92, !18, i64 96, !18, i64 100, !18, i64 104, !18, i64 108, !18, i64 112, !18, i64 116, !17, i64 120, !13, i64 128, !18, i64 136, !18, i64 140, !18, i64 144, !18, i64 148, !18, i64 152, !18, i64 156, !18, i64 160, !18, i64 164, !18, i64 168, !13, i64 176, !18, i64 184, !18, i64 188, !18, i64 192, !18, i64 196, !18, i64 200, !18, i64 204, !18, i64 208, !17, i64 212, !12, i64 216, !12, i64 240, !17, i64 264}
!17 = !{!"bool", !7, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!"_ZTS4Bank", !11, i64 0, !6, i64 280, !20, i64 288, !6, i64 3352, !6, i64 3360, !6, i64 3368, !6, i64 3376, !6, i64 3384, !18, i64 3392, !18, i64 3396, !18, i64 3400, !18, i64 3404, !18, i64 3408, !18, i64 3412}
!20 = !{!"_ZTS3Mat", !11, 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, !14, i64 440, !14, i64 560, !14, i64 680, !14, i64 800, !14, i64 920, !14, i64 1040, !14, i64 1160, !14, i64 1280, !14, i64 1400, !14, i64 1520, !14, 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, !21, i64 1864, !14, i64 2288, !14, i64 2408, !14, i64 2528, !13, i64 2648, !18, i64 2656, !18, i64 2660, !13, i64 2664, !12, i64 2672, !12, i64 2696, !17, i64 2720, !17, i64 2721, !17, i64 2722, !17, i64 2723, !18, i64 2724, !14, i64 2728, !13, i64 2848, !13, i64 2856, !13, i64 2864, !13, i64 2872, !13, i64 2880, !13, i64 2888, !14, i64 2896, !18, i64 3016, !18, i64 3020, !18, i64 3024, !18, i64 3028, !13, i64 3032, !18, i64 3040, !18, i64 3044, !18, i64 3048, !18, i64 3052, !18, i64 3056, !18, i64 3060}
!21 = !{!"_ZTS8Subarray", !11, i64 0, !6, i64 280, !18, i64 288, !18, i64 292, !18, i64 296, !18, i64 300, !12, i64 304, !12, i64 328, !17, 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}
!22 = !{!11, !13, i64 24}
!23 = !{!10, !6, i64 3984}
!24 = !{!10, !13, i64 4008}
!25 = !{!10, !6, i64 3976}
!26 = !{!10, !13, i64 4048}
!27 = !{!10, !17, i64 283}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!10, !17, i64 282}
!31 = !{!10, !6, i64 3992}
!32 = !{!11, !13, i64 104}
!33 = !{!10, !6, i64 4000}
!34 = !{!10, !13, i64 4088}
!35 = !{!11, !13, i64 32}
!36 = !{!10, !13, i64 4016}
!37 = !{!11, !13, i64 40}
!38 = !{!10, !13, i64 4024}
!39 = !{!10, !13, i64 3128}
!40 = !{!10, !18, i64 392}
!41 = !{!10, !13, i64 3168}
!42 = !{!10, !6, i64 3912}
!43 = !{!10, !6, i64 3920}
!44 = !{!11, !13, i64 64}
!45 = !{!10, !17, i64 400}
!46 = !{!10, !13, i64 3568}
!47 = !{!10, !13, i64 4176}
!48 = !{!10, !6, i64 1192}
!49 = !{!10, !13, i64 1280}
!50 = !{!10, !13, i64 1880}
!51 = !{!10, !13, i64 4184}
!52 = !{!53, !18, i64 128}
!53 = !{!"_ZTS14InputParameter", !18, i64 0, !18, i64 4, !18, i64 8, !18, i64 12, !18, i64 16, !17, i64 20, !18, i64 24, !18, i64 28, !18, i64 32, !18, i64 36, !18, i64 40, !18, i64 44, !13, i64 48, !13, i64 56, !18, i64 64, !18, i64 68, !18, i64 72, !18, i64 76, !18, i64 80, !17, i64 84, !17, i64 85, !17, i64 86, !17, i64 87, !17, i64 88, !18, i64 92, !18, i64 96, !18, i64 100, !18, i64 104, !18, i64 108, !18, i64 112, !18, i64 116, !18, i64 120, !18, i64 124, !18, i64 128, !18, i64 132, !18, i64 136, !18, i64 140, !18, i64 144, !18, i64 148, !54, i64 152, !18, i64 156, !17, i64 160, !18, i64 164, !18, i64 168, !18, i64 172, !18, i64 176, !18, i64 180, !18, i64 184, !18, i64 188, !17, i64 192, !18, i64 196, !18, i64 200, !18, i64 204, !18, i64 208, !18, i64 212, !18, i64 216, !18, i64 220, !18, i64 224, !18, i64 228, !18, i64 232, !18, i64 236, !18, i64 240, !18, i64 244, !18, i64 248, !18, i64 252, !18, i64 256, !18, i64 260, !18, i64 264, !18, i64 268, !18, i64 272, !18, i64 276, !18, i64 280, !18, i64 284, !18, i64 288, !18, i64 292, !18, i64 296, !17, i64 300, !18, i64 304, !18, i64 308, !18, i64 312, !17, i64 316, !17, i64 317, !18, i64 320, !18, i64 324, !17, i64 328, !13, i64 336, !13, i64 344, !17, i64 352, !18, i64 356, !18, i64 360, !17, i64 364}
!54 = !{!"_ZTS9Wire_type", !7, i64 0}
!55 = !{!53, !18, i64 132}
!56 = !{!10, !6, i64 1208}
!57 = !{!10, !6, i64 1216}
!58 = !{!10, !13, i64 1520}
!59 = !{!10, !13, i64 1640}
!60 = !{!10, !13, i64 2000}
!61 = !{!10, !13, i64 4192}
!62 = !{!10, !6, i64 3904}
!63 = !{!64, !13, i64 304}
!64 = !{!"_ZTS6Htree2", !11, i64 0, !13, i64 280, !13, i64 288, !13, i64 296, !14, i64 304, !13, i64 424, !13, i64 432, !65, i64 440, !13, i64 448, !13, i64 456, !13, i64 464, !13, i64 472, !18, i64 480, !18, i64 484, !18, i64 488, !18, i64 492, !18, i64 496, !18, i64 500, !18, i64 504, !17, i64 508, !17, i64 509, !54, i64 512, !13, i64 520, !13, i64 528, !6, i64 536}
!65 = !{!"_ZTS10Htree_type", !7, i64 0}
!66 = !{!10, !18, i64 3960}
!67 = !{!10, !13, i64 4208}
!68 = !{!10, !18, i64 3964}
!69 = !{!10, !13, i64 4216}
!70 = !{!10, !13, i64 4224}
!71 = !{!10, !13, i64 4232}
!72 = !{!10, !6, i64 1200}
!73 = !{!10, !13, i64 1288}
!74 = !{!10, !13, i64 1408}
!75 = !{!10, !13, i64 1528}
!76 = !{!10, !13, i64 1648}
!77 = !{!10, !13, i64 3696}
!78 = !{!10, !13, i64 4240}
!79 = !{!10, !13, i64 1296}
!80 = !{!10, !13, i64 1416}
!81 = !{!10, !13, i64 1536}
!82 = !{!10, !13, i64 1656}
!83 = !{!10, !13, i64 3704}
!84 = !{!10, !13, i64 4248}
!85 = !{!10, !13, i64 4256}
!86 = !{!10, !6, i64 1128}
!87 = !{!10, !18, i64 416}
!88 = !{!10, !18, i64 288}
!89 = !{!10, !13, i64 4200}
!90 = !{!10, !13, i64 3488}
!91 = !{!10, !18, i64 420}
!92 = !{!10, !13, i64 456}
!93 = !{!10, !17, i64 280}


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

@g_ip = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv = external hidden unnamed_addr constant [33 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [25 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3UCA20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(4320) %0) local_unnamed_addr #0 align 2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 552
  tail call void @_ZN4Bank20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(3416) %2)
  %3 = getelementptr inbounds i8, ptr %0, i64 576
  %4 = getelementptr inbounds i8, ptr %0, i64 24
  %5 = tail call noundef nonnull align 8 dereferenceable(120) ptr @_ZN8powerDefaSERKS_(ptr noundef nonnull align 8 dereferenceable(120) %4, ptr noundef nonnull align 8 dereferenceable(120) %3)
  %6 = getelementptr inbounds i8, ptr %0, i64 3968
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %7, i64 24
  %9 = load double, ptr %8, align 8, !tbaa !21
  %10 = getelementptr inbounds i8, ptr %0, i64 3984
  %11 = load ptr, ptr %10, align 8, !tbaa !22
  %12 = getelementptr inbounds i8, ptr %11, i64 24
  %13 = load double, ptr %12, align 8, !tbaa !21
  %14 = fadd double %9, %13
  %15 = getelementptr inbounds i8, ptr %0, i64 4008
  store double %14, ptr %15, align 8, !tbaa !23
  %16 = getelementptr inbounds i8, ptr %0, i64 3976
  %17 = load ptr, ptr %16, align 8, !tbaa !24
  %18 = getelementptr inbounds i8, ptr %17, i64 24
  %19 = load double, ptr %18, align 8, !tbaa !21
  %20 = fadd double %9, %19
  %21 = getelementptr inbounds i8, ptr %0, i64 4048
  store double %20, ptr %21, align 8, !tbaa !25
  %22 = getelementptr inbounds i8, ptr %0, i64 280
  %23 = getelementptr inbounds i8, ptr %0, i64 283
  %24 = load i8, ptr %23, align 1, !tbaa !26, !range !27, !noundef !28
  %25 = trunc nuw i8 %24 to i1
  br i1 %25, label %30, label %26

26:                                               ; preds = %1
  %27 = getelementptr inbounds i8, ptr %0, i64 282
  %28 = load i8, ptr %27, align 2, !tbaa !29, !range !27, !noundef !28
  %29 = trunc nuw i8 %28 to i1
  br i1 %29, label %30, label %41

30:                                               ; preds = %26, %1
  %31 = getelementptr inbounds i8, ptr %0, i64 3992
  %32 = load ptr, ptr %31, align 8, !tbaa !30
  %33 = getelementptr inbounds i8, ptr %32, i64 104
  %34 = load double, ptr %33, align 8, !tbaa !31
  %35 = getelementptr inbounds i8, ptr %0, i64 4000
  %36 = load ptr, ptr %35, align 8, !tbaa !32
  %37 = getelementptr inbounds i8, ptr %36, i64 104
  %38 = load double, ptr %37, align 8, !tbaa !31
  %39 = fadd double %34, %38
  %40 = getelementptr inbounds i8, ptr %0, i64 4088
  store double %39, ptr %40, align 8, !tbaa !33
  br label %41

41:                                               ; preds = %30, %26
  %42 = getelementptr inbounds i8, ptr %7, i64 32
  %43 = getelementptr inbounds i8, ptr %17, i64 32
  %44 = getelementptr inbounds i8, ptr %11, i64 32
  %45 = getelementptr inbounds i8, ptr %0, i64 4016
  %46 = load <2 x double>, ptr %42, align 8, !tbaa !34
  %47 = load <2 x double>, ptr %43, align 8, !tbaa !34
  %48 = fadd <2 x double> %46, %47
  %49 = load <2 x double>, ptr %44, align 8, !tbaa !34
  %50 = fadd <2 x double> %48, %49
  %51 = load <2 x double>, ptr %45, align 8, !tbaa !34
  %52 = fadd <2 x double> %51, %50
  store <2 x double> %52, ptr %45, align 8, !tbaa !34
  br i1 %25, label %57, label %53

53:                                               ; preds = %41
  %54 = getelementptr inbounds i8, ptr %0, i64 282
  %55 = load i8, ptr %54, align 2, !tbaa !29, !range !27, !noundef !28
  %56 = trunc nuw i8 %55 to i1
  br i1 %56, label %57, label %68

57:                                               ; preds = %53, %41
  %58 = getelementptr inbounds i8, ptr %0, i64 3992
  %59 = load ptr, ptr %58, align 8, !tbaa !30
  %60 = getelementptr inbounds i8, ptr %59, i64 32
  %61 = getelementptr inbounds i8, ptr %0, i64 4000
  %62 = load ptr, ptr %61, align 8, !tbaa !32
  %63 = getelementptr inbounds i8, ptr %62, i64 32
  %64 = load <2 x double>, ptr %60, align 8, !tbaa !34
  %65 = load <2 x double>, ptr %63, align 8, !tbaa !34
  %66 = fadd <2 x double> %64, %65
  %67 = fadd <2 x double> %52, %66
  store <2 x double> %67, ptr %45, align 8, !tbaa !34
  br label %68

68:                                               ; preds = %57, %53
  %69 = phi <2 x double> [ %67, %57 ], [ %52, %53 ]
  %70 = getelementptr inbounds i8, ptr %0, i64 4088
  %71 = load double, ptr %70, align 8, !tbaa !33
  %72 = getelementptr inbounds i8, ptr %0, i64 104
  %73 = load double, ptr %72, align 8, !tbaa !31
  %74 = fadd double %71, %73
  store double %74, ptr %72, align 8, !tbaa !31
  %75 = getelementptr inbounds i8, ptr %0, i64 32
  %76 = load <2 x double>, ptr %4, align 8, !tbaa !34
  %77 = insertelement <2 x double> poison, double %14, i64 0
  %78 = shufflevector <2 x double> %77, <2 x double> %69, <2 x i32> <i32 0, i32 2>
  %79 = fadd <2 x double> %78, %76
  store <2 x double> %79, ptr %4, align 8, !tbaa !34
  %80 = getelementptr inbounds i8, ptr %0, i64 40
  %81 = load double, ptr %80, align 8, !tbaa !35
  %82 = extractelement <2 x double> %69, i64 1
  %83 = fadd double %82, %81
  store double %83, ptr %80, align 8, !tbaa !35
  %84 = getelementptr inbounds i8, ptr %0, i64 3128
  %85 = load double, ptr %84, align 8, !tbaa !36
  %86 = getelementptr inbounds i8, ptr %0, i64 392
  %87 = load i32, ptr %86, align 8, !tbaa !37
  %88 = sitofp i32 %87 to double
  %89 = fneg double %85
  %90 = extractelement <2 x double> %79, i64 0
  %91 = tail call double @llvm.fmuladd.f64(double %89, double %88, double %90)
  %92 = getelementptr inbounds i8, ptr %0, i64 3168
  %93 = load double, ptr %92, align 8, !tbaa !38
  %94 = tail call double @llvm.fmuladd.f64(double %93, double %88, double %91)
  %95 = fsub double %94, %14
  %96 = fadd double %20, %95
  %97 = getelementptr inbounds i8, ptr %0, i64 3912
  %98 = load ptr, ptr %97, align 8, !tbaa !39
  %99 = getelementptr inbounds i8, ptr %98, i64 24
  %100 = load double, ptr %99, align 8, !tbaa !21
  %101 = fadd double %100, %96
  %102 = getelementptr inbounds i8, ptr %0, i64 3920
  %103 = load ptr, ptr %102, align 8, !tbaa !40
  %104 = getelementptr inbounds i8, ptr %103, i64 24
  %105 = load double, ptr %104, align 8, !tbaa !21
  %106 = fsub double %101, %105
  %107 = getelementptr inbounds i8, ptr %0, i64 64
  store double %106, ptr %107, align 8, !tbaa !41
  %108 = getelementptr inbounds i8, ptr %0, i64 400
  %109 = load i8, ptr %108, align 8, !tbaa !42, !range !27, !noundef !28
  %110 = icmp eq i8 %109, 0
  %111 = getelementptr inbounds i8, ptr %0, i64 3568
  %112 = load double, ptr %111, align 8, !tbaa !43
  br i1 %110, label %113, label %._crit_edge

113:                                              ; preds = %68
  %114 = fneg double %112
  %115 = tail call double @llvm.fmuladd.f64(double %114, double %88, double %106)
  store double %115, ptr %107, align 8, !tbaa !41
  br label %._crit_edge

._crit_edge:                                      ; preds = %68, %113
  %116 = getelementptr inbounds i8, ptr %0, i64 4176
  %117 = getelementptr inbounds i8, ptr %0, i64 1192
  %118 = load ptr, ptr %117, align 8, !tbaa !44
  %119 = getelementptr inbounds i8, ptr %118, i64 24
  %120 = load double, ptr %119, align 8, !tbaa !21
  %121 = getelementptr inbounds i8, ptr %0, i64 1280
  %122 = load double, ptr %121, align 8, !tbaa !45
  %123 = fadd double %120, %122
  %124 = getelementptr inbounds i8, ptr %0, i64 1880
  %125 = load double, ptr %124, align 8, !tbaa !46
  %126 = fadd double %123, %125
  %127 = fadd double %126, %112
  %128 = fadd double %85, %127
  %129 = fneg double %128
  %130 = tail call double @llvm.fmuladd.f64(double %129, double %88, double %90)
  %131 = load ptr, ptr @g_ip, align 8, !tbaa !47
  %132 = getelementptr inbounds i8, ptr %131, i64 128
  %133 = load i32, ptr %132, align 8, !tbaa !48
  %134 = getelementptr inbounds i8, ptr %131, i64 132
  %135 = load i32, ptr %134, align 4, !tbaa !51
  %136 = udiv i32 %133, %135
  %137 = icmp ugt i32 %136, 1
  %138 = add i32 %136, -1
  %139 = uitofp i32 %138 to double
  %140 = select i1 %137, double %139, double 0.000000e+00
  %141 = getelementptr inbounds i8, ptr %0, i64 1208
  %142 = load ptr, ptr %141, align 8, !tbaa !52
  %143 = getelementptr inbounds i8, ptr %142, i64 24
  %144 = load double, ptr %143, align 8, !tbaa !21
  %145 = getelementptr inbounds i8, ptr %0, i64 1216
  %146 = load ptr, ptr %145, align 8, !tbaa !53
  %147 = getelementptr inbounds i8, ptr %146, i64 24
  %148 = load double, ptr %147, align 8, !tbaa !21
  %149 = fadd double %144, %148
  %150 = getelementptr inbounds i8, ptr %0, i64 1520
  %151 = load double, ptr %150, align 8, !tbaa !54
  %152 = fadd double %149, %151
  %153 = getelementptr inbounds i8, ptr %0, i64 1640
  %154 = load double, ptr %153, align 8, !tbaa !55
  %155 = fadd double %152, %154
  %156 = getelementptr inbounds i8, ptr %0, i64 2000
  %157 = load double, ptr %156, align 8, !tbaa !56
  %158 = fadd double %155, %157
  %159 = tail call double @llvm.fmuladd.f64(double %158, double %88, double %105)
  %160 = fadd double %14, %159
  %161 = fmul double %140, %160
  %162 = getelementptr inbounds i8, ptr %0, i64 4192
  store double %161, ptr %162, align 8, !tbaa !57
  %163 = insertelement <2 x double> %79, double %130, i64 1
  %164 = insertelement <2 x double> poison, double %161, i64 0
  %165 = shufflevector <2 x double> %164, <2 x double> poison, <2 x i32> zeroinitializer
  %166 = fadd <2 x double> %163, %165
  store <2 x double> %166, ptr %116, align 8, !tbaa !34
  %167 = load double, ptr %8, align 8, !tbaa !21
  %168 = getelementptr inbounds i8, ptr %0, i64 3904
  %169 = load ptr, ptr %168, align 8, !tbaa !58
  %170 = getelementptr inbounds i8, ptr %169, i64 304
  %171 = load double, ptr %170, align 8, !tbaa !59
  %172 = getelementptr inbounds i8, ptr %0, i64 3960
  %173 = load i32, ptr %172, align 8, !tbaa !62
  %174 = sitofp i32 %173 to double
  %175 = tail call double @llvm.fmuladd.f64(double %171, double %174, double %167)
  %176 = fadd double %123, %112
  %177 = tail call double @llvm.fmuladd.f64(double %176, double %88, double %175)
  %178 = getelementptr inbounds i8, ptr %0, i64 4208
  store double %177, ptr %178, align 8, !tbaa !63
  %179 = getelementptr inbounds i8, ptr %0, i64 3964
  %180 = load i32, ptr %179, align 4, !tbaa !64
  %181 = sitofp i32 %180 to double
  %182 = tail call double @llvm.fmuladd.f64(double %171, double %181, double %167)
  %183 = tail call double @llvm.fmuladd.f64(double %158, double %88, double %182)
  %184 = fadd double %105, %183
  %185 = load double, ptr %18, align 8, !tbaa !21
  %186 = fadd double %185, %184
  %187 = uitofp i32 %133 to double
  %188 = getelementptr inbounds i8, ptr %0, i64 4216
  %189 = fadd double %185, %182
  %190 = fadd double %100, %189
  %191 = tail call double @llvm.fmuladd.f64(double %155, double %88, double %190)
  %192 = insertelement <2 x double> poison, double %186, i64 0
  %193 = insertelement <2 x double> %192, double %191, i64 1
  %194 = insertelement <2 x double> poison, double %187, i64 0
  %195 = shufflevector <2 x double> %194, <2 x double> poison, <2 x i32> zeroinitializer
  %196 = fmul <2 x double> %193, %195
  store <2 x double> %196, ptr %188, align 8, !tbaa !34
  %197 = fadd double %85, %125
  %198 = fmul double %197, %88
  %199 = getelementptr inbounds i8, ptr %0, i64 4232
  store double %198, ptr %199, align 8, !tbaa !65
  %200 = getelementptr inbounds i8, ptr %118, i64 32
  %201 = load double, ptr %200, align 8, !tbaa !66
  %202 = getelementptr inbounds i8, ptr %0, i64 1200
  %203 = load ptr, ptr %202, align 8, !tbaa !67
  %204 = getelementptr inbounds i8, ptr %203, i64 32
  %205 = load double, ptr %204, align 8, !tbaa !66
  %206 = fadd double %201, %205
  %207 = getelementptr inbounds i8, ptr %142, i64 32
  %208 = load double, ptr %207, align 8, !tbaa !66
  %209 = fadd double %206, %208
  %210 = getelementptr inbounds i8, ptr %146, i64 32
  %211 = load double, ptr %210, align 8, !tbaa !66
  %212 = fadd double %209, %211
  %213 = getelementptr inbounds i8, ptr %0, i64 1288
  %214 = load double, ptr %213, align 8, !tbaa !68
  %215 = fadd double %212, %214
  %216 = getelementptr inbounds i8, ptr %0, i64 1408
  %217 = load double, ptr %216, align 8, !tbaa !69
  %218 = fadd double %215, %217
  %219 = getelementptr inbounds i8, ptr %0, i64 1528
  %220 = load double, ptr %219, align 8, !tbaa !70
  %221 = fadd double %218, %220
  %222 = getelementptr inbounds i8, ptr %0, i64 1648
  %223 = load double, ptr %222, align 8, !tbaa !71
  %224 = fadd double %221, %223
  %225 = getelementptr inbounds i8, ptr %0, i64 3696
  %226 = getelementptr inbounds i8, ptr %0, i64 4240
  %227 = getelementptr inbounds i8, ptr %118, i64 40
  %228 = load double, ptr %227, align 8, !tbaa !35
  %229 = getelementptr inbounds i8, ptr %203, i64 40
  %230 = load double, ptr %229, align 8, !tbaa !35
  %231 = fadd double %228, %230
  %232 = getelementptr inbounds i8, ptr %142, i64 40
  %233 = load double, ptr %232, align 8, !tbaa !35
  %234 = fadd double %231, %233
  %235 = getelementptr inbounds i8, ptr %146, i64 40
  %236 = load double, ptr %235, align 8, !tbaa !35
  %237 = fadd double %234, %236
  %238 = getelementptr inbounds i8, ptr %0, i64 1296
  %239 = load double, ptr %238, align 8, !tbaa !72
  %240 = fadd double %237, %239
  %241 = getelementptr inbounds i8, ptr %0, i64 1416
  %242 = load double, ptr %241, align 8, !tbaa !73
  %243 = fadd double %240, %242
  %244 = getelementptr inbounds i8, ptr %0, i64 1536
  %245 = load double, ptr %244, align 8, !tbaa !74
  %246 = fadd double %243, %245
  %247 = getelementptr inbounds i8, ptr %0, i64 1656
  %248 = load double, ptr %247, align 8, !tbaa !75
  %249 = fadd double %246, %248
  %250 = load <2 x double>, ptr %225, align 8, !tbaa !34
  %251 = insertelement <2 x double> poison, double %224, i64 0
  %252 = shufflevector <2 x double> %251, <2 x double> poison, <2 x i32> zeroinitializer
  %253 = fadd <2 x double> %252, %250
  %254 = insertelement <2 x double> poison, double %88, i64 0
  %255 = shufflevector <2 x double> %254, <2 x double> poison, <2 x i32> zeroinitializer
  %256 = fmul <2 x double> %253, %255
  %257 = insertelement <2 x double> poison, double %249, i64 0
  %258 = shufflevector <2 x double> %257, <2 x double> poison, <2 x i32> zeroinitializer
  %259 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %258, <2 x double> %255, <2 x double> %256)
  store <2 x double> %259, ptr %226, align 8, !tbaa !34
  %260 = getelementptr inbounds i8, ptr %169, i64 32
  %261 = load double, ptr %260, align 8, !tbaa !66
  %262 = extractelement <2 x double> %69, i64 0
  %263 = fadd double %262, %261
  %264 = getelementptr inbounds i8, ptr %98, i64 32
  %265 = load double, ptr %264, align 8, !tbaa !66
  %266 = fadd double %263, %265
  %267 = getelementptr inbounds i8, ptr %103, i64 32
  %268 = load double, ptr %267, align 8, !tbaa !66
  %269 = fadd double %266, %268
  %270 = getelementptr inbounds i8, ptr %0, i64 4256
  %271 = getelementptr inbounds i8, ptr %169, i64 40
  %272 = load double, ptr %271, align 8, !tbaa !35
  %273 = fadd double %82, %272
  %274 = getelementptr inbounds i8, ptr %98, i64 40
  %275 = load double, ptr %274, align 8, !tbaa !35
  %276 = fadd double %273, %275
  %277 = getelementptr inbounds i8, ptr %103, i64 40
  %278 = load double, ptr %277, align 8, !tbaa !35
  %279 = fadd double %276, %278
  %280 = fadd double %269, %279
  store double %280, ptr %270, align 8, !tbaa !76
  br i1 %25, label %285, label %281

281:                                              ; preds = %._crit_edge
  %282 = getelementptr inbounds i8, ptr %0, i64 282
  %283 = load i8, ptr %282, align 2, !tbaa !29, !range !27, !noundef !28
  %284 = trunc nuw i8 %283 to i1
  br i1 %284, label %285, label %299

285:                                              ; preds = %281, %._crit_edge
  %286 = getelementptr inbounds i8, ptr %0, i64 3992
  %287 = load ptr, ptr %286, align 8, !tbaa !30
  %288 = getelementptr inbounds i8, ptr %287, i64 32
  %289 = getelementptr inbounds i8, ptr %0, i64 4000
  %290 = load ptr, ptr %289, align 8, !tbaa !32
  %291 = getelementptr inbounds i8, ptr %290, i64 32
  %292 = load <2 x double>, ptr %288, align 8, !tbaa !34
  %293 = load <2 x double>, ptr %291, align 8, !tbaa !34
  %294 = fadd <2 x double> %292, %293
  %295 = extractelement <2 x double> %294, i64 0
  %296 = fadd double %280, %295
  %297 = extractelement <2 x double> %294, i64 1
  %298 = fadd double %296, %297
  store double %298, ptr %270, align 8, !tbaa !76
  br label %299

299:                                              ; preds = %285, %281
  %300 = trunc nuw i8 %109 to i1
  br i1 %300, label %301, label %329

301:                                              ; preds = %299
  %302 = getelementptr inbounds i8, ptr %0, i64 1128
  %303 = load ptr, ptr %302, align 8, !tbaa !77
  %304 = getelementptr inbounds i8, ptr %303, i64 24
  %305 = load double, ptr %304, align 8, !tbaa !21
  %306 = tail call double @llvm.fmuladd.f64(double %120, double %88, double %305)
  %307 = getelementptr inbounds i8, ptr %0, i64 416
  %308 = load i32, ptr %307, align 8, !tbaa !78
  %309 = uitofp i32 %308 to double
  %310 = fmul double %306, %309
  %311 = getelementptr inbounds i8, ptr %0, i64 288
  %312 = load i32, ptr %311, align 8, !tbaa !79
  %313 = sitofp i32 %312 to double
  %314 = fmul double %310, %313
  %315 = getelementptr inbounds i8, ptr %0, i64 4200
  %316 = getelementptr inbounds i8, ptr %0, i64 3488
  %317 = load double, ptr %316, align 8, !tbaa !80
  %318 = getelementptr inbounds i8, ptr %0, i64 420
  %319 = load i32, ptr %318, align 4, !tbaa !81
  %320 = uitofp i32 %319 to double
  %321 = fmul double %317, %320
  %322 = fmul double %321, %309
  %323 = tail call double @llvm.fmuladd.f64(double %322, double %313, double %314)
  %324 = tail call double @llvm.fmuladd.f64(double %125, double %88, double %323)
  %325 = tail call double @llvm.fmuladd.f64(double %112, double %88, double %324)
  %326 = getelementptr inbounds i8, ptr %0, i64 456
  %327 = load double, ptr %326, align 8, !tbaa !82
  %328 = fdiv double %325, %327
  store double %328, ptr %315, align 8, !tbaa !83
  br label %329

329:                                              ; preds = %301, %299
  %330 = load i8, ptr %22, align 8, !tbaa !84, !range !27, !noundef !28
  %331 = icmp eq i8 %330, 0
  br i1 %331, label %332, label %345

332:                                              ; preds = %329
  %333 = extractelement <2 x double> %166, i64 0
  store double %333, ptr %4, align 8, !tbaa !21
  %334 = fsub double %333, %161
  %335 = tail call double @llvm.fmuladd.f64(double %89, double %88, double %334)
  %336 = tail call double @llvm.fmuladd.f64(double %93, double %88, double %335)
  %337 = fsub double %20, %14
  %338 = load double, ptr %104, align 8, !tbaa !21
  %339 = fsub double %337, %338
  %340 = load double, ptr %99, align 8, !tbaa !21
  %341 = fadd double %339, %340
  %342 = tail call double @llvm.fmuladd.f64(double %341, double %140, double %336)
  store double %342, ptr %107, align 8, !tbaa !41
  br i1 %110, label %.thread, label %345

.thread:                                          ; preds = %332
  %343 = fneg double %112
  %344 = tail call double @llvm.fmuladd.f64(double %343, double %88, double %342)
  store double %344, ptr %107, align 8, !tbaa !41
  br label %351

345:                                              ; preds = %332, %329
  br i1 %300, label %346, label %351

346:                                              ; preds = %345
  %347 = getelementptr inbounds i8, ptr %0, i64 4200
  %348 = load double, ptr %347, align 8, !tbaa !83
  %349 = extractelement <2 x double> %79, i64 1
  %350 = fadd double %349, %348
  store double %350, ptr %75, align 8, !tbaa !66
  br label %351

351:                                              ; preds = %.thread, %346, %345
  %352 = load double, ptr %4, align 8, !tbaa !21
  %353 = fcmp ogt double %352, 0.000000e+00
  br i1 %353, label %355, label %354

354:                                              ; preds = %351
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 423, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv) #6
  unreachable

355:                                              ; preds = %351
  %356 = load double, ptr %107, align 8, !tbaa !41
  %357 = fcmp ogt double %356, 0.000000e+00
  br i1 %357, label %359, label %358

358:                                              ; preds = %355
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 424, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv) #6
  unreachable

359:                                              ; preds = %355
  %360 = load double, ptr %75, align 8, !tbaa !66
  %361 = fcmp ogt double %360, 0.000000e+00
  br i1 %361, label %363, label %362

362:                                              ; preds = %359
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 425, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3UCA20compute_power_energyEv) #6
  unreachable

363:                                              ; preds = %359
  ret void
}

declare void @_ZN4Bank20compute_power_energyEv(ptr noundef nonnull align 8 dereferenceable(3416)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(120) ptr @_ZN8powerDefaSERKS_(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #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 = { inlinehint 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !18, i64 3968}
!6 = !{!"_ZTS3UCA", !7, i64 0, !14, i64 280, !17, i64 552, !18, i64 3968, !18, i64 3976, !18, i64 3984, !18, i64 3992, !18, i64 4000, !12, i64 4008, !16, i64 4128, !16, i64 4132, !16, i64 4136, !16, i64 4140, !16, i64 4144, !16, i64 4148, !16, i64 4152, !16, i64 4156, !16, i64 4160, !16, i64 4164, !9, i64 4168, !9, i64 4176, !9, i64 4184, !9, i64 4192, !9, i64 4200, !9, i64 4208, !9, i64 4216, !9, i64 4224, !9, i64 4232, !9, i64 4240, !9, i64 4248, !9, i64 4256, !9, i64 4264, !9, i64 4272, !9, i64 4280, !9, i64 4288, !9, i64 4296, !9, i64 4304, !9, i64 4312}
!7 = !{!"_ZTS9Component", !8, i64 0, !12, i64 24, !12, i64 144, !9, i64 264, !9, i64 272}
!8 = !{!"_ZTS4Area", !9, i64 0, !9, i64 8, !9, i64 16}
!9 = !{!"double", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTS8powerDef", !13, i64 0, !13, i64 40, !13, i64 80}
!13 = !{!"_ZTS15powerComponents", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32}
!14 = !{!"_ZTS16DynamicParameter", !15, i64 0, !15, i64 1, !15, i64 2, !15, i64 3, !16, i64 4, !16, i64 8, !16, i64 12, !9, i64 16, !16, i64 24, !16, i64 28, !16, i64 32, !16, i64 36, !16, i64 40, !16, i64 44, !16, i64 48, !16, i64 52, !16, i64 56, !16, i64 60, !16, i64 64, !16, i64 68, !16, i64 72, !16, i64 76, !16, i64 80, !16, i64 84, !16, i64 88, !16, i64 92, !16, i64 96, !16, i64 100, !16, i64 104, !16, i64 108, !16, i64 112, !16, i64 116, !15, i64 120, !9, i64 128, !16, i64 136, !16, i64 140, !16, i64 144, !16, i64 148, !16, i64 152, !16, i64 156, !16, i64 160, !16, i64 164, !16, i64 168, !9, i64 176, !16, i64 184, !16, i64 188, !16, i64 192, !16, i64 196, !16, i64 200, !16, i64 204, !16, i64 208, !15, i64 212, !8, i64 216, !8, i64 240, !15, i64 264}
!15 = !{!"bool", !10, i64 0}
!16 = !{!"int", !10, i64 0}
!17 = !{!"_ZTS4Bank", !7, i64 0, !18, i64 280, !19, i64 288, !18, i64 3352, !18, i64 3360, !18, i64 3368, !18, i64 3376, !18, i64 3384, !16, i64 3392, !16, i64 3396, !16, i64 3400, !16, i64 3404, !16, i64 3408, !16, i64 3412}
!18 = !{!"any pointer", !10, i64 0}
!19 = !{!"_ZTS3Mat", !7, i64 0, !18, i64 280, !18, i64 288, !18, i64 296, !18, i64 304, !18, i64 312, !18, i64 320, !18, i64 328, !18, i64 336, !18, i64 344, !18, i64 352, !18, i64 360, !18, i64 368, !18, i64 376, !18, i64 384, !18, i64 392, !18, i64 400, !18, i64 408, !18, i64 416, !18, i64 424, !18, i64 432, !12, i64 440, !12, i64 560, !12, i64 680, !12, i64 800, !12, i64 920, !12, i64 1040, !12, i64 1160, !12, i64 1280, !12, i64 1400, !12, i64 1520, !12, i64 1640, !9, i64 1760, !9, i64 1768, !9, i64 1776, !9, i64 1784, !9, i64 1792, !9, i64 1800, !9, i64 1808, !9, i64 1816, !9, i64 1824, !9, i64 1832, !9, i64 1840, !9, i64 1848, !9, i64 1856, !20, i64 1864, !12, i64 2288, !12, i64 2408, !12, i64 2528, !9, i64 2648, !16, i64 2656, !16, i64 2660, !9, i64 2664, !8, i64 2672, !8, i64 2696, !15, i64 2720, !15, i64 2721, !15, i64 2722, !15, i64 2723, !16, i64 2724, !12, i64 2728, !9, i64 2848, !9, i64 2856, !9, i64 2864, !9, i64 2872, !9, i64 2880, !9, i64 2888, !12, i64 2896, !16, i64 3016, !16, i64 3020, !16, i64 3024, !16, i64 3028, !9, i64 3032, !16, i64 3040, !16, i64 3044, !16, i64 3048, !16, i64 3052, !16, i64 3056, !16, i64 3060}
!20 = !{!"_ZTS8Subarray", !7, i64 0, !18, i64 280, !16, i64 288, !16, i64 292, !16, i64 296, !16, i64 300, !8, i64 304, !8, i64 328, !15, i64 352, !9, i64 360, !9, i64 368, !9, i64 376, !9, i64 384, !9, i64 392, !9, i64 400, !9, i64 408, !9, i64 416}
!21 = !{!7, !9, i64 24}
!22 = !{!6, !18, i64 3984}
!23 = !{!6, !9, i64 4008}
!24 = !{!6, !18, i64 3976}
!25 = !{!6, !9, i64 4048}
!26 = !{!6, !15, i64 283}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!6, !15, i64 282}
!30 = !{!6, !18, i64 3992}
!31 = !{!7, !9, i64 104}
!32 = !{!6, !18, i64 4000}
!33 = !{!6, !9, i64 4088}
!34 = !{!9, !9, i64 0}
!35 = !{!7, !9, i64 40}
!36 = !{!6, !9, i64 3128}
!37 = !{!6, !16, i64 392}
!38 = !{!6, !9, i64 3168}
!39 = !{!6, !18, i64 3912}
!40 = !{!6, !18, i64 3920}
!41 = !{!7, !9, i64 64}
!42 = !{!6, !15, i64 400}
!43 = !{!6, !9, i64 3568}
!44 = !{!6, !18, i64 1192}
!45 = !{!6, !9, i64 1280}
!46 = !{!6, !9, i64 1880}
!47 = !{!18, !18, i64 0}
!48 = !{!49, !16, i64 128}
!49 = !{!"_ZTS14InputParameter", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !15, i64 20, !16, i64 24, !16, i64 28, !16, i64 32, !16, i64 36, !16, i64 40, !16, i64 44, !9, i64 48, !9, i64 56, !16, i64 64, !16, i64 68, !16, i64 72, !16, i64 76, !16, i64 80, !15, i64 84, !15, i64 85, !15, i64 86, !15, i64 87, !15, i64 88, !16, i64 92, !16, i64 96, !16, i64 100, !16, i64 104, !16, i64 108, !16, i64 112, !16, i64 116, !16, i64 120, !16, i64 124, !16, i64 128, !16, i64 132, !16, i64 136, !16, i64 140, !16, i64 144, !16, i64 148, !50, i64 152, !16, i64 156, !15, i64 160, !16, i64 164, !16, i64 168, !16, i64 172, !16, i64 176, !16, i64 180, !16, i64 184, !16, i64 188, !15, i64 192, !16, i64 196, !16, i64 200, !16, i64 204, !16, i64 208, !16, i64 212, !16, i64 216, !16, i64 220, !16, i64 224, !16, i64 228, !16, i64 232, !16, i64 236, !16, i64 240, !16, i64 244, !16, i64 248, !16, i64 252, !16, i64 256, !16, i64 260, !16, i64 264, !16, i64 268, !16, i64 272, !16, i64 276, !16, i64 280, !16, i64 284, !16, i64 288, !16, i64 292, !16, i64 296, !15, i64 300, !16, i64 304, !16, i64 308, !16, i64 312, !15, i64 316, !15, i64 317, !16, i64 320, !16, i64 324, !15, i64 328, !9, i64 336, !9, i64 344, !15, i64 352, !16, i64 356, !16, i64 360, !15, i64 364}
!50 = !{!"_ZTS9Wire_type", !10, i64 0}
!51 = !{!49, !16, i64 132}
!52 = !{!6, !18, i64 1208}
!53 = !{!6, !18, i64 1216}
!54 = !{!6, !9, i64 1520}
!55 = !{!6, !9, i64 1640}
!56 = !{!6, !9, i64 2000}
!57 = !{!6, !9, i64 4192}
!58 = !{!6, !18, i64 3904}
!59 = !{!60, !9, i64 304}
!60 = !{!"_ZTS6Htree2", !7, i64 0, !9, i64 280, !9, i64 288, !9, i64 296, !12, i64 304, !9, i64 424, !9, i64 432, !61, i64 440, !9, i64 448, !9, i64 456, !9, i64 464, !9, i64 472, !16, i64 480, !16, i64 484, !16, i64 488, !16, i64 492, !16, i64 496, !16, i64 500, !16, i64 504, !15, i64 508, !15, i64 509, !50, i64 512, !9, i64 520, !9, i64 528, !18, i64 536}
!61 = !{!"_ZTS10Htree_type", !10, i64 0}
!62 = !{!6, !16, i64 3960}
!63 = !{!6, !9, i64 4208}
!64 = !{!6, !16, i64 3964}
!65 = !{!6, !9, i64 4232}
!66 = !{!7, !9, i64 32}
!67 = !{!6, !18, i64 1200}
!68 = !{!6, !9, i64 1288}
!69 = !{!6, !9, i64 1408}
!70 = !{!6, !9, i64 1528}
!71 = !{!6, !9, i64 1648}
!72 = !{!6, !9, i64 1296}
!73 = !{!6, !9, i64 1416}
!74 = !{!6, !9, i64 1536}
!75 = !{!6, !9, i64 1656}
!76 = !{!6, !9, i64 4256}
!77 = !{!6, !18, i64 1128}
!78 = !{!6, !16, i64 416}
!79 = !{!6, !16, i64 288}
!80 = !{!6, !9, i64 3488}
!81 = !{!6, !16, i64 420}
!82 = !{!6, !9, i64 456}
!83 = !{!6, !9, i64 4200}
!84 = !{!6, !15, i64 280}


; Effective O3 passes: BDCEPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass