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

; 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.Decoder = type { %class.Component, i8, i32, double, double, i32, i32, [20 x double], [20 x double], double, i8, i8, i8, ptr }
%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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN3UCA14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(4320) %0, double noundef %1) #1 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca double, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store double %1, ptr %4, align 8, !tbaa !9
  %16 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #3
  %17 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %18 = load double, ptr %4, align 8, !tbaa !9
  %19 = call noundef double @_ZN4Bank14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(3416) %17, double noundef %18)
  store double %19, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %20 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 3
  %21 = load ptr, ptr %20, align 8, !tbaa !11
  %22 = getelementptr inbounds %class.Component, ptr %21, i32 0, i32 3
  %23 = load double, ptr %22, align 8, !tbaa !23
  %24 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %25 = getelementptr inbounds %class.Bank, ptr %24, i32 0, i32 3
  %26 = load ptr, ptr %25, align 8, !tbaa !24
  %27 = getelementptr inbounds %class.Component, ptr %26, i32 0, i32 3
  %28 = load double, ptr %27, align 8, !tbaa !23
  %29 = fadd double %23, %28
  store double %29, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %30 = load double, ptr %6, align 8, !tbaa !9
  %31 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %32 = getelementptr inbounds %class.Bank, ptr %31, i32 0, i32 2
  %33 = getelementptr inbounds %class.Mat, ptr %32, i32 0, i32 10
  %34 = load ptr, ptr %33, align 8, !tbaa !25
  %35 = getelementptr inbounds %class.Component, ptr %34, i32 0, i32 3
  %36 = load double, ptr %35, align 8, !tbaa !23
  %37 = fadd double %30, %36
  store double %37, ptr %7, align 8, !tbaa !9
  %38 = load double, ptr %6, align 8, !tbaa !9
  %39 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %40 = getelementptr inbounds %class.Bank, ptr %39, i32 0, i32 2
  %41 = getelementptr inbounds %class.Mat, ptr %40, i32 0, i32 12
  %42 = load ptr, ptr %41, align 8, !tbaa !26
  %43 = getelementptr inbounds %class.Component, ptr %42, i32 0, i32 3
  %44 = load double, ptr %43, align 8, !tbaa !23
  %45 = fadd double %38, %44
  %46 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %47 = getelementptr inbounds %class.Bank, ptr %46, i32 0, i32 2
  %48 = getelementptr inbounds %class.Mat, ptr %47, i32 0, i32 4
  %49 = load ptr, ptr %48, align 8, !tbaa !27
  %50 = getelementptr inbounds %class.Decoder, ptr %49, i32 0, i32 9
  %51 = load double, ptr %50, align 8, !tbaa !28
  %52 = fadd double %45, %51
  %53 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 31
  store double %52, ptr %53, align 8, !tbaa !30
  %54 = load double, ptr %6, align 8, !tbaa !9
  %55 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %56 = getelementptr inbounds %class.Bank, ptr %55, i32 0, i32 2
  %57 = getelementptr inbounds %class.Mat, ptr %56, i32 0, i32 13
  %58 = load ptr, ptr %57, align 8, !tbaa !31
  %59 = getelementptr inbounds %class.Component, ptr %58, i32 0, i32 3
  %60 = load double, ptr %59, align 8, !tbaa !23
  %61 = fadd double %54, %60
  %62 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %63 = getelementptr inbounds %class.Bank, ptr %62, i32 0, i32 2
  %64 = getelementptr inbounds %class.Mat, ptr %63, i32 0, i32 5
  %65 = load ptr, ptr %64, align 8, !tbaa !32
  %66 = getelementptr inbounds %class.Decoder, ptr %65, i32 0, i32 9
  %67 = load double, ptr %66, align 8, !tbaa !28
  %68 = fadd double %61, %67
  %69 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 32
  store double %68, ptr %69, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %70 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %71 = getelementptr inbounds %class.Bank, ptr %70, i32 0, i32 2
  %72 = getelementptr inbounds %class.Mat, ptr %71, i32 0, i32 2
  %73 = load ptr, ptr %72, align 8, !tbaa !34
  %74 = getelementptr inbounds %class.Decoder, ptr %73, i32 0, i32 9
  %75 = load double, ptr %74, align 8, !tbaa !28
  %76 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %77 = getelementptr inbounds %class.Bank, ptr %76, i32 0, i32 2
  %78 = getelementptr inbounds %class.Mat, ptr %77, i32 0, i32 35
  %79 = load double, ptr %78, align 8, !tbaa !35
  %80 = fadd double %75, %79
  %81 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %82 = getelementptr inbounds %class.Bank, ptr %81, i32 0, i32 2
  %83 = getelementptr inbounds %class.Mat, ptr %82, i32 0, i32 61
  %84 = load double, ptr %83, align 8, !tbaa !36
  %85 = fadd double %80, %84
  store double %85, ptr %8, align 8, !tbaa !9
  %86 = load double, ptr %7, align 8, !tbaa !9
  %87 = load double, ptr %8, align 8, !tbaa !9
  %88 = fadd double %86, %87
  %89 = load double, ptr %6, align 8, !tbaa !9
  %90 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %91 = getelementptr inbounds %class.Bank, ptr %90, i32 0, i32 2
  %92 = getelementptr inbounds %class.Mat, ptr %91, i32 0, i32 11
  %93 = load ptr, ptr %92, align 8, !tbaa !37
  %94 = getelementptr inbounds %class.Component, ptr %93, i32 0, i32 3
  %95 = load double, ptr %94, align 8, !tbaa !23
  %96 = fadd double %89, %95
  %97 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %98 = getelementptr inbounds %class.Bank, ptr %97, i32 0, i32 2
  %99 = getelementptr inbounds %class.Mat, ptr %98, i32 0, i32 3
  %100 = load ptr, ptr %99, align 8, !tbaa !38
  %101 = getelementptr inbounds %class.Decoder, ptr %100, i32 0, i32 9
  %102 = load double, ptr %101, align 8, !tbaa !28
  %103 = fadd double %96, %102
  %104 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %105 = getelementptr inbounds %class.Bank, ptr %104, i32 0, i32 2
  %106 = getelementptr inbounds %class.Mat, ptr %105, i32 0, i32 61
  %107 = load double, ptr %106, align 8, !tbaa !36
  %108 = fadd double %103, %107
  %109 = fcmp ogt double %88, %108
  br i1 %109, label %110, label %114

110:                                              ; preds = %2
  %111 = load double, ptr %7, align 8, !tbaa !9
  %112 = load double, ptr %8, align 8, !tbaa !9
  %113 = fadd double %111, %112
  br label %135

114:                                              ; preds = %2
  %115 = load double, ptr %6, align 8, !tbaa !9
  %116 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %117 = getelementptr inbounds %class.Bank, ptr %116, i32 0, i32 2
  %118 = getelementptr inbounds %class.Mat, ptr %117, i32 0, i32 11
  %119 = load ptr, ptr %118, align 8, !tbaa !37
  %120 = getelementptr inbounds %class.Component, ptr %119, i32 0, i32 3
  %121 = load double, ptr %120, align 8, !tbaa !23
  %122 = fadd double %115, %121
  %123 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %124 = getelementptr inbounds %class.Bank, ptr %123, i32 0, i32 2
  %125 = getelementptr inbounds %class.Mat, ptr %124, i32 0, i32 3
  %126 = load ptr, ptr %125, align 8, !tbaa !38
  %127 = getelementptr inbounds %class.Decoder, ptr %126, i32 0, i32 9
  %128 = load double, ptr %127, align 8, !tbaa !28
  %129 = fadd double %122, %128
  %130 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %131 = getelementptr inbounds %class.Bank, ptr %130, i32 0, i32 2
  %132 = getelementptr inbounds %class.Mat, ptr %131, i32 0, i32 61
  %133 = load double, ptr %132, align 8, !tbaa !36
  %134 = fadd double %129, %133
  br label %135

135:                                              ; preds = %114, %110
  %136 = phi double [ %113, %110 ], [ %134, %114 ]
  %137 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 31
  %138 = load double, ptr %137, align 8, !tbaa !30
  %139 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 32
  %140 = load double, ptr %139, align 8, !tbaa !33
  %141 = fcmp ogt double %138, %140
  br i1 %141, label %142, label %145

142:                                              ; preds = %135
  %143 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 31
  %144 = load double, ptr %143, align 8, !tbaa !30
  br label %148

145:                                              ; preds = %135
  %146 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 32
  %147 = load double, ptr %146, align 8, !tbaa !33
  br label %148

148:                                              ; preds = %145, %142
  %149 = phi double [ %144, %142 ], [ %147, %145 ]
  %150 = fcmp ogt double %136, %149
  br i1 %150, label %151, label %203

151:                                              ; preds = %148
  %152 = load double, ptr %7, align 8, !tbaa !9
  %153 = load double, ptr %8, align 8, !tbaa !9
  %154 = fadd double %152, %153
  %155 = load double, ptr %6, align 8, !tbaa !9
  %156 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %157 = getelementptr inbounds %class.Bank, ptr %156, i32 0, i32 2
  %158 = getelementptr inbounds %class.Mat, ptr %157, i32 0, i32 11
  %159 = load ptr, ptr %158, align 8, !tbaa !37
  %160 = getelementptr inbounds %class.Component, ptr %159, i32 0, i32 3
  %161 = load double, ptr %160, align 8, !tbaa !23
  %162 = fadd double %155, %161
  %163 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %164 = getelementptr inbounds %class.Bank, ptr %163, i32 0, i32 2
  %165 = getelementptr inbounds %class.Mat, ptr %164, i32 0, i32 3
  %166 = load ptr, ptr %165, align 8, !tbaa !38
  %167 = getelementptr inbounds %class.Decoder, ptr %166, i32 0, i32 9
  %168 = load double, ptr %167, align 8, !tbaa !28
  %169 = fadd double %162, %168
  %170 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %171 = getelementptr inbounds %class.Bank, ptr %170, i32 0, i32 2
  %172 = getelementptr inbounds %class.Mat, ptr %171, i32 0, i32 61
  %173 = load double, ptr %172, align 8, !tbaa !36
  %174 = fadd double %169, %173
  %175 = fcmp ogt double %154, %174
  br i1 %175, label %176, label %180

176:                                              ; preds = %151
  %177 = load double, ptr %7, align 8, !tbaa !9
  %178 = load double, ptr %8, align 8, !tbaa !9
  %179 = fadd double %177, %178
  br label %201

180:                                              ; preds = %151
  %181 = load double, ptr %6, align 8, !tbaa !9
  %182 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %183 = getelementptr inbounds %class.Bank, ptr %182, i32 0, i32 2
  %184 = getelementptr inbounds %class.Mat, ptr %183, i32 0, i32 11
  %185 = load ptr, ptr %184, align 8, !tbaa !37
  %186 = getelementptr inbounds %class.Component, ptr %185, i32 0, i32 3
  %187 = load double, ptr %186, align 8, !tbaa !23
  %188 = fadd double %181, %187
  %189 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %190 = getelementptr inbounds %class.Bank, ptr %189, i32 0, i32 2
  %191 = getelementptr inbounds %class.Mat, ptr %190, i32 0, i32 3
  %192 = load ptr, ptr %191, align 8, !tbaa !38
  %193 = getelementptr inbounds %class.Decoder, ptr %192, i32 0, i32 9
  %194 = load double, ptr %193, align 8, !tbaa !28
  %195 = fadd double %188, %194
  %196 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %197 = getelementptr inbounds %class.Bank, ptr %196, i32 0, i32 2
  %198 = getelementptr inbounds %class.Mat, ptr %197, i32 0, i32 61
  %199 = load double, ptr %198, align 8, !tbaa !36
  %200 = fadd double %195, %199
  br label %201

201:                                              ; preds = %180, %176
  %202 = phi double [ %179, %176 ], [ %200, %180 ]
  br label %217

203:                                              ; preds = %148
  %204 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 31
  %205 = load double, ptr %204, align 8, !tbaa !30
  %206 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 32
  %207 = load double, ptr %206, align 8, !tbaa !33
  %208 = fcmp ogt double %205, %207
  br i1 %208, label %209, label %212

209:                                              ; preds = %203
  %210 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 31
  %211 = load double, ptr %210, align 8, !tbaa !30
  br label %215

212:                                              ; preds = %203
  %213 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 32
  %214 = load double, ptr %213, align 8, !tbaa !33
  br label %215

215:                                              ; preds = %212, %209
  %216 = phi double [ %211, %209 ], [ %214, %212 ]
  br label %217

217:                                              ; preds = %215, %201
  %218 = phi double [ %202, %201 ], [ %216, %215 ]
  %219 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 33
  store double %218, ptr %219, align 8, !tbaa !39
  %220 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %221 = getelementptr inbounds %class.Bank, ptr %220, i32 0, i32 2
  %222 = getelementptr inbounds %class.Mat, ptr %221, i32 0, i32 65
  %223 = load double, ptr %222, align 8, !tbaa !40
  %224 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %225 = getelementptr inbounds %class.Bank, ptr %224, i32 0, i32 5
  %226 = load ptr, ptr %225, align 8, !tbaa !41
  %227 = getelementptr inbounds %class.Component, ptr %226, i32 0, i32 3
  %228 = load double, ptr %227, align 8, !tbaa !23
  %229 = fadd double %223, %228
  %230 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 5
  %231 = load ptr, ptr %230, align 8, !tbaa !42
  %232 = getelementptr inbounds %class.Component, ptr %231, i32 0, i32 3
  %233 = load double, ptr %232, align 8, !tbaa !23
  %234 = fadd double %229, %233
  %235 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 34
  store double %234, ptr %235, align 8, !tbaa !43
  %236 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %237 = getelementptr inbounds %class.Bank, ptr %236, i32 0, i32 2
  %238 = getelementptr inbounds %class.Mat, ptr %237, i32 0, i32 66
  %239 = load double, ptr %238, align 8, !tbaa !44
  %240 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 35
  store double %239, ptr %240, align 8, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  %241 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %242 = getelementptr inbounds %class.DynamicParameter, ptr %241, i32 0, i32 3
  %243 = load i8, ptr %242, align 1, !tbaa !46, !range !47, !noundef !48
  %244 = trunc i8 %243 to i1
  br i1 %244, label %245, label %273

245:                                              ; preds = %217
  %246 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %247 = getelementptr inbounds %class.Bank, ptr %246, i32 0, i32 2
  %248 = getelementptr inbounds %class.Mat, ptr %247, i32 0, i32 35
  %249 = load double, ptr %248, align 8, !tbaa !35
  %250 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %251 = getelementptr inbounds %class.Bank, ptr %250, i32 0, i32 2
  %252 = getelementptr inbounds %class.Mat, ptr %251, i32 0, i32 39
  %253 = load double, ptr %252, align 8, !tbaa !49
  %254 = fadd double %249, %253
  store double %254, ptr %9, align 8, !tbaa !9
  %255 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 3
  %256 = load ptr, ptr %255, align 8, !tbaa !11
  %257 = getelementptr inbounds %class.Component, ptr %256, i32 0, i32 3
  %258 = load double, ptr %257, align 8, !tbaa !23
  %259 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %260 = getelementptr inbounds %class.Bank, ptr %259, i32 0, i32 3
  %261 = load ptr, ptr %260, align 8, !tbaa !24
  %262 = getelementptr inbounds %class.Component, ptr %261, i32 0, i32 3
  %263 = load double, ptr %262, align 8, !tbaa !23
  %264 = fadd double %258, %263
  %265 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 35
  store double %264, ptr %265, align 8, !tbaa !45
  %266 = load double, ptr %9, align 8, !tbaa !9
  %267 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 34
  %268 = load double, ptr %267, align 8, !tbaa !43
  %269 = fadd double %266, %268
  %270 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 35
  %271 = load double, ptr %270, align 8, !tbaa !45
  %272 = fadd double %271, %269
  store double %272, ptr %270, align 8, !tbaa !45
  br label %280

273:                                              ; preds = %217
  %274 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 33
  %275 = load double, ptr %274, align 8, !tbaa !39
  %276 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 34
  %277 = load double, ptr %276, align 8, !tbaa !43
  %278 = fadd double %275, %277
  %279 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 35
  store double %278, ptr %279, align 8, !tbaa !45
  br label %280

280:                                              ; preds = %273, %245
  %281 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %282 = getelementptr inbounds %class.DynamicParameter, ptr %281, i32 0, i32 53
  %283 = load i8, ptr %282, align 4, !tbaa !50, !range !47, !noundef !48
  %284 = trunc i8 %283 to i1
  br i1 %284, label %285, label %309

285:                                              ; preds = %280
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  %286 = load double, ptr %7, align 8, !tbaa !9
  %287 = load double, ptr %8, align 8, !tbaa !9
  %288 = fadd double %286, %287
  store double %288, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  %289 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 31
  %290 = load double, ptr %289, align 8, !tbaa !30
  %291 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 32
  %292 = load double, ptr %291, align 8, !tbaa !33
  %293 = fcmp ogt double %290, %292
  br i1 %293, label %294, label %297

294:                                              ; preds = %285
  %295 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 31
  %296 = load double, ptr %295, align 8, !tbaa !30
  br label %300

297:                                              ; preds = %285
  %298 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 32
  %299 = load double, ptr %298, align 8, !tbaa !33
  br label %300

300:                                              ; preds = %297, %294
  %301 = phi double [ %296, %294 ], [ %299, %297 ]
  %302 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 34
  %303 = load double, ptr %302, align 8, !tbaa !43
  %304 = fadd double %301, %303
  store double %304, ptr %11, align 8, !tbaa !9
  %305 = load double, ptr %10, align 8, !tbaa !9
  %306 = load double, ptr %11, align 8, !tbaa !9
  %307 = fadd double %305, %306
  %308 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 35
  store double %307, ptr %308, align 8, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  br label %309

309:                                              ; preds = %300, %280
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %310 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %311 = getelementptr inbounds %class.DynamicParameter, ptr %310, i32 0, i32 3
  %312 = load i8, ptr %311, align 1, !tbaa !46, !range !47, !noundef !48
  %313 = trunc i8 %312 to i1
  br i1 %313, label %414, label %314

314:                                              ; preds = %309
  %315 = load double, ptr %8, align 8, !tbaa !9
  %316 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %317 = getelementptr inbounds %class.Bank, ptr %316, i32 0, i32 2
  %318 = getelementptr inbounds %class.Mat, ptr %317, i32 0, i32 36
  %319 = load double, ptr %318, align 8, !tbaa !51
  %320 = fadd double %315, %319
  %321 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %322 = getelementptr inbounds %class.Bank, ptr %321, i32 0, i32 2
  %323 = getelementptr inbounds %class.Mat, ptr %322, i32 0, i32 37
  %324 = load double, ptr %323, align 8, !tbaa !52
  %325 = fadd double %320, %324
  store double %325, ptr %12, align 8, !tbaa !9
  %326 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %327 = getelementptr inbounds %class.DynamicParameter, ptr %326, i32 0, i32 32
  %328 = load i8, ptr %327, align 8, !tbaa !53, !range !47, !noundef !48
  %329 = trunc i8 %328 to i1
  br i1 %329, label %330, label %337

330:                                              ; preds = %314
  %331 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %332 = getelementptr inbounds %class.Bank, ptr %331, i32 0, i32 2
  %333 = getelementptr inbounds %class.Mat, ptr %332, i32 0, i32 52
  %334 = load double, ptr %333, align 8, !tbaa !54
  %335 = load double, ptr %12, align 8, !tbaa !9
  %336 = fadd double %335, %334
  store double %336, ptr %12, align 8, !tbaa !9
  br label %337

337:                                              ; preds = %330, %314
  %338 = load double, ptr %12, align 8, !tbaa !9
  %339 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %340 = getelementptr inbounds %class.Bank, ptr %339, i32 0, i32 2
  %341 = getelementptr inbounds %class.Mat, ptr %340, i32 0, i32 10
  %342 = load ptr, ptr %341, align 8, !tbaa !25
  %343 = getelementptr inbounds %class.Component, ptr %342, i32 0, i32 3
  %344 = load double, ptr %343, align 8, !tbaa !23
  %345 = fcmp ogt double %338, %344
  br i1 %345, label %346, label %348

346:                                              ; preds = %337
  %347 = load double, ptr %12, align 8, !tbaa !9
  br label %355

348:                                              ; preds = %337
  %349 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %350 = getelementptr inbounds %class.Bank, ptr %349, i32 0, i32 2
  %351 = getelementptr inbounds %class.Mat, ptr %350, i32 0, i32 10
  %352 = load ptr, ptr %351, align 8, !tbaa !25
  %353 = getelementptr inbounds %class.Component, ptr %352, i32 0, i32 3
  %354 = load double, ptr %353, align 8, !tbaa !23
  br label %355

355:                                              ; preds = %348, %346
  %356 = phi double [ %347, %346 ], [ %354, %348 ]
  store double %356, ptr %12, align 8, !tbaa !9
  %357 = load double, ptr %12, align 8, !tbaa !9
  %358 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %359 = getelementptr inbounds %class.Bank, ptr %358, i32 0, i32 2
  %360 = getelementptr inbounds %class.Mat, ptr %359, i32 0, i32 11
  %361 = load ptr, ptr %360, align 8, !tbaa !37
  %362 = getelementptr inbounds %class.Component, ptr %361, i32 0, i32 3
  %363 = load double, ptr %362, align 8, !tbaa !23
  %364 = fcmp ogt double %357, %363
  br i1 %364, label %365, label %367

365:                                              ; preds = %355
  %366 = load double, ptr %12, align 8, !tbaa !9
  br label %374

367:                                              ; preds = %355
  %368 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %369 = getelementptr inbounds %class.Bank, ptr %368, i32 0, i32 2
  %370 = getelementptr inbounds %class.Mat, ptr %369, i32 0, i32 11
  %371 = load ptr, ptr %370, align 8, !tbaa !37
  %372 = getelementptr inbounds %class.Component, ptr %371, i32 0, i32 3
  %373 = load double, ptr %372, align 8, !tbaa !23
  br label %374

374:                                              ; preds = %367, %365
  %375 = phi double [ %366, %365 ], [ %373, %367 ]
  store double %375, ptr %12, align 8, !tbaa !9
  %376 = load double, ptr %12, align 8, !tbaa !9
  %377 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %378 = getelementptr inbounds %class.Bank, ptr %377, i32 0, i32 2
  %379 = getelementptr inbounds %class.Mat, ptr %378, i32 0, i32 12
  %380 = load ptr, ptr %379, align 8, !tbaa !26
  %381 = getelementptr inbounds %class.Component, ptr %380, i32 0, i32 3
  %382 = load double, ptr %381, align 8, !tbaa !23
  %383 = fcmp ogt double %376, %382
  br i1 %383, label %384, label %386

384:                                              ; preds = %374
  %385 = load double, ptr %12, align 8, !tbaa !9
  br label %393

386:                                              ; preds = %374
  %387 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %388 = getelementptr inbounds %class.Bank, ptr %387, i32 0, i32 2
  %389 = getelementptr inbounds %class.Mat, ptr %388, i32 0, i32 12
  %390 = load ptr, ptr %389, align 8, !tbaa !26
  %391 = getelementptr inbounds %class.Component, ptr %390, i32 0, i32 3
  %392 = load double, ptr %391, align 8, !tbaa !23
  br label %393

393:                                              ; preds = %386, %384
  %394 = phi double [ %385, %384 ], [ %392, %386 ]
  store double %394, ptr %12, align 8, !tbaa !9
  %395 = load double, ptr %12, align 8, !tbaa !9
  %396 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %397 = getelementptr inbounds %class.Bank, ptr %396, i32 0, i32 2
  %398 = getelementptr inbounds %class.Mat, ptr %397, i32 0, i32 13
  %399 = load ptr, ptr %398, align 8, !tbaa !31
  %400 = getelementptr inbounds %class.Component, ptr %399, i32 0, i32 3
  %401 = load double, ptr %400, align 8, !tbaa !23
  %402 = fcmp ogt double %395, %401
  br i1 %402, label %403, label %405

403:                                              ; preds = %393
  %404 = load double, ptr %12, align 8, !tbaa !9
  br label %412

405:                                              ; preds = %393
  %406 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %407 = getelementptr inbounds %class.Bank, ptr %406, i32 0, i32 2
  %408 = getelementptr inbounds %class.Mat, ptr %407, i32 0, i32 13
  %409 = load ptr, ptr %408, align 8, !tbaa !31
  %410 = getelementptr inbounds %class.Component, ptr %409, i32 0, i32 3
  %411 = load double, ptr %410, align 8, !tbaa !23
  br label %412

412:                                              ; preds = %405, %403
  %413 = phi double [ %404, %403 ], [ %411, %405 ]
  store double %413, ptr %12, align 8, !tbaa !9
  br label %507

414:                                              ; preds = %309
  %415 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %416 = getelementptr inbounds %class.Bank, ptr %415, i32 0, i32 2
  %417 = getelementptr inbounds %class.Mat, ptr %416, i32 0, i32 35
  %418 = load double, ptr %417, align 8, !tbaa !35
  %419 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %420 = getelementptr inbounds %class.Bank, ptr %419, i32 0, i32 2
  %421 = getelementptr inbounds %class.Mat, ptr %420, i32 0, i32 39
  %422 = load double, ptr %421, align 8, !tbaa !49
  %423 = fadd double %418, %422
  store double %423, ptr %9, align 8, !tbaa !9
  %424 = load double, ptr %9, align 8, !tbaa !9
  %425 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %426 = getelementptr inbounds %class.Bank, ptr %425, i32 0, i32 2
  %427 = getelementptr inbounds %class.Mat, ptr %426, i32 0, i32 40
  %428 = load double, ptr %427, align 8, !tbaa !55
  %429 = fadd double %424, %428
  %430 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %431 = getelementptr inbounds %class.Bank, ptr %430, i32 0, i32 2
  %432 = getelementptr inbounds %class.Mat, ptr %431, i32 0, i32 41
  %433 = load double, ptr %432, align 8, !tbaa !56
  %434 = fadd double %429, %433
  %435 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %436 = getelementptr inbounds %class.Bank, ptr %435, i32 0, i32 2
  %437 = getelementptr inbounds %class.Mat, ptr %436, i32 0, i32 37
  %438 = load double, ptr %437, align 8, !tbaa !52
  %439 = fadd double %434, %438
  %440 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %441 = getelementptr inbounds %class.Bank, ptr %440, i32 0, i32 2
  %442 = getelementptr inbounds %class.Mat, ptr %441, i32 0, i32 43
  %443 = load double, ptr %442, align 8, !tbaa !57
  %444 = fadd double %439, %443
  %445 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %446 = getelementptr inbounds %class.Bank, ptr %445, i32 0, i32 2
  %447 = getelementptr inbounds %class.Mat, ptr %446, i32 0, i32 36
  %448 = load double, ptr %447, align 8, !tbaa !51
  %449 = fadd double %444, %448
  store double %449, ptr %12, align 8, !tbaa !9
  %450 = load double, ptr %12, align 8, !tbaa !9
  %451 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %452 = getelementptr inbounds %class.Bank, ptr %451, i32 0, i32 2
  %453 = getelementptr inbounds %class.Mat, ptr %452, i32 0, i32 11
  %454 = load ptr, ptr %453, align 8, !tbaa !37
  %455 = getelementptr inbounds %class.Component, ptr %454, i32 0, i32 3
  %456 = load double, ptr %455, align 8, !tbaa !23
  %457 = fcmp ogt double %450, %456
  br i1 %457, label %458, label %460

458:                                              ; preds = %414
  %459 = load double, ptr %12, align 8, !tbaa !9
  br label %467

460:                                              ; preds = %414
  %461 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %462 = getelementptr inbounds %class.Bank, ptr %461, i32 0, i32 2
  %463 = getelementptr inbounds %class.Mat, ptr %462, i32 0, i32 11
  %464 = load ptr, ptr %463, align 8, !tbaa !37
  %465 = getelementptr inbounds %class.Component, ptr %464, i32 0, i32 3
  %466 = load double, ptr %465, align 8, !tbaa !23
  br label %467

467:                                              ; preds = %460, %458
  %468 = phi double [ %459, %458 ], [ %466, %460 ]
  store double %468, ptr %12, align 8, !tbaa !9
  %469 = load double, ptr %12, align 8, !tbaa !9
  %470 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %471 = getelementptr inbounds %class.Bank, ptr %470, i32 0, i32 2
  %472 = getelementptr inbounds %class.Mat, ptr %471, i32 0, i32 12
  %473 = load ptr, ptr %472, align 8, !tbaa !26
  %474 = getelementptr inbounds %class.Component, ptr %473, i32 0, i32 3
  %475 = load double, ptr %474, align 8, !tbaa !23
  %476 = fcmp ogt double %469, %475
  br i1 %476, label %477, label %479

477:                                              ; preds = %467
  %478 = load double, ptr %12, align 8, !tbaa !9
  br label %486

479:                                              ; preds = %467
  %480 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %481 = getelementptr inbounds %class.Bank, ptr %480, i32 0, i32 2
  %482 = getelementptr inbounds %class.Mat, ptr %481, i32 0, i32 12
  %483 = load ptr, ptr %482, align 8, !tbaa !26
  %484 = getelementptr inbounds %class.Component, ptr %483, i32 0, i32 3
  %485 = load double, ptr %484, align 8, !tbaa !23
  br label %486

486:                                              ; preds = %479, %477
  %487 = phi double [ %478, %477 ], [ %485, %479 ]
  store double %487, ptr %12, align 8, !tbaa !9
  %488 = load double, ptr %12, align 8, !tbaa !9
  %489 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %490 = getelementptr inbounds %class.Bank, ptr %489, i32 0, i32 2
  %491 = getelementptr inbounds %class.Mat, ptr %490, i32 0, i32 13
  %492 = load ptr, ptr %491, align 8, !tbaa !31
  %493 = getelementptr inbounds %class.Component, ptr %492, i32 0, i32 3
  %494 = load double, ptr %493, align 8, !tbaa !23
  %495 = fcmp ogt double %488, %494
  br i1 %495, label %496, label %498

496:                                              ; preds = %486
  %497 = load double, ptr %12, align 8, !tbaa !9
  br label %505

498:                                              ; preds = %486
  %499 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %500 = getelementptr inbounds %class.Bank, ptr %499, i32 0, i32 2
  %501 = getelementptr inbounds %class.Mat, ptr %500, i32 0, i32 13
  %502 = load ptr, ptr %501, align 8, !tbaa !31
  %503 = getelementptr inbounds %class.Component, ptr %502, i32 0, i32 3
  %504 = load double, ptr %503, align 8, !tbaa !23
  br label %505

505:                                              ; preds = %498, %496
  %506 = phi double [ %497, %496 ], [ %504, %498 ]
  store double %506, ptr %12, align 8, !tbaa !9
  br label %507

507:                                              ; preds = %505, %412
  %508 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %509 = getelementptr inbounds %class.InputParameter, ptr %508, i32 0, i32 23
  %510 = load i8, ptr %509, align 8, !tbaa !58, !range !47, !noundef !48
  %511 = trunc i8 %510 to i1
  %512 = zext i1 %511 to i32
  %513 = icmp eq i32 %512, 0
  br i1 %513, label %514, label %532

514:                                              ; preds = %507
  %515 = load double, ptr %12, align 8, !tbaa !9
  %516 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %517 = getelementptr inbounds %class.Bank, ptr %516, i32 0, i32 3
  %518 = load ptr, ptr %517, align 8, !tbaa !24
  %519 = getelementptr inbounds %class.Htree2, ptr %518, i32 0, i32 3
  %520 = load double, ptr %519, align 8, !tbaa !61
  %521 = fcmp ogt double %515, %520
  br i1 %521, label %522, label %524

522:                                              ; preds = %514
  %523 = load double, ptr %12, align 8, !tbaa !9
  br label %530

524:                                              ; preds = %514
  %525 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %526 = getelementptr inbounds %class.Bank, ptr %525, i32 0, i32 3
  %527 = load ptr, ptr %526, align 8, !tbaa !24
  %528 = getelementptr inbounds %class.Htree2, ptr %527, i32 0, i32 3
  %529 = load double, ptr %528, align 8, !tbaa !61
  br label %530

530:                                              ; preds = %524, %522
  %531 = phi double [ %523, %522 ], [ %529, %524 ]
  store double %531, ptr %12, align 8, !tbaa !9
  br label %532

532:                                              ; preds = %530, %507
  %533 = load double, ptr %12, align 8, !tbaa !9
  %534 = getelementptr inbounds %class.Component, ptr %16, i32 0, i32 4
  store double %533, ptr %534, align 8, !tbaa !64
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  %535 = load double, ptr %7, align 8, !tbaa !9
  store double %535, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %536 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 34
  %537 = load double, ptr %536, align 8, !tbaa !43
  store double %537, ptr %14, align 8, !tbaa !9
  %538 = load double, ptr %13, align 8, !tbaa !9
  %539 = load double, ptr %14, align 8, !tbaa !9
  %540 = fcmp ogt double %538, %539
  br i1 %540, label %541, label %543

541:                                              ; preds = %532
  %542 = load double, ptr %13, align 8, !tbaa !9
  br label %545

543:                                              ; preds = %532
  %544 = load double, ptr %14, align 8, !tbaa !9
  br label %545

545:                                              ; preds = %543, %541
  %546 = phi double [ %542, %541 ], [ %544, %543 ]
  %547 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 37
  store double %546, ptr %547, align 8, !tbaa !65
  %548 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %549 = getelementptr inbounds %class.DynamicParameter, ptr %548, i32 0, i32 53
  %550 = load i8, ptr %549, align 4, !tbaa !50, !range !47, !noundef !48
  %551 = trunc i8 %550 to i1
  br i1 %551, label %552, label %590

552:                                              ; preds = %545
  %553 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 3
  %554 = load ptr, ptr %553, align 8, !tbaa !11
  %555 = getelementptr inbounds %class.Component, ptr %554, i32 0, i32 3
  %556 = load double, ptr %555, align 8, !tbaa !23
  %557 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 37
  store double %556, ptr %557, align 8, !tbaa !65
  %558 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 3
  %559 = load ptr, ptr %558, align 8, !tbaa !11
  %560 = getelementptr inbounds %class.Component, ptr %559, i32 0, i32 3
  %561 = load double, ptr %560, align 8, !tbaa !23
  %562 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %563 = getelementptr inbounds %class.Bank, ptr %562, i32 0, i32 3
  %564 = load ptr, ptr %563, align 8, !tbaa !24
  %565 = getelementptr inbounds %class.Component, ptr %564, i32 0, i32 3
  %566 = load double, ptr %565, align 8, !tbaa !23
  %567 = fadd double %561, %566
  %568 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %569 = getelementptr inbounds %class.Bank, ptr %568, i32 0, i32 2
  %570 = getelementptr inbounds %class.Mat, ptr %569, i32 0, i32 52
  %571 = load double, ptr %570, align 8, !tbaa !54
  %572 = fadd double %567, %571
  %573 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %574 = getelementptr inbounds %class.Bank, ptr %573, i32 0, i32 2
  %575 = getelementptr inbounds %class.Mat, ptr %574, i32 0, i32 36
  %576 = load double, ptr %575, align 8, !tbaa !51
  %577 = fadd double %572, %576
  %578 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 2
  %579 = getelementptr inbounds %class.Bank, ptr %578, i32 0, i32 2
  %580 = getelementptr inbounds %class.Mat, ptr %579, i32 0, i32 37
  %581 = load double, ptr %580, align 8, !tbaa !52
  %582 = fadd double %577, %581
  %583 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 36
  store double %582, ptr %583, align 8, !tbaa !66
  %584 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 35
  %585 = load double, ptr %584, align 8, !tbaa !45
  %586 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 36
  %587 = load double, ptr %586, align 8, !tbaa !66
  %588 = fadd double %585, %587
  %589 = getelementptr inbounds %class.Component, ptr %16, i32 0, i32 4
  store double %588, ptr %589, align 8, !tbaa !64
  br label %592

590:                                              ; preds = %545
  %591 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 36
  store double 0.000000e+00, ptr %591, align 8, !tbaa !66
  br label %592

592:                                              ; preds = %590, %552
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  store double 0.000000e+00, ptr %15, align 8, !tbaa !9
  %593 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %594 = getelementptr inbounds %class.DynamicParameter, ptr %593, i32 0, i32 32
  %595 = load i8, ptr %594, align 8, !tbaa !53, !range !47, !noundef !48
  %596 = trunc i8 %595 to i1
  br i1 %596, label %597, label %611

597:                                              ; preds = %592
  %598 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %599 = getelementptr inbounds %class.DynamicParameter, ptr %598, i32 0, i32 35
  %600 = load i32, ptr %599, align 8, !tbaa !67
  %601 = uitofp i32 %600 to double
  %602 = getelementptr inbounds %class.Component, ptr %16, i32 0, i32 4
  %603 = load double, ptr %602, align 8, !tbaa !64
  %604 = fmul double %601, %603
  %605 = getelementptr inbounds %class.UCA, ptr %16, i32 0, i32 1
  %606 = getelementptr inbounds %class.DynamicParameter, ptr %605, i32 0, i32 45
  %607 = load double, ptr %606, align 8, !tbaa !68
  %608 = fdiv double %604, %607
  %609 = fsub double 1.000000e+00, %608
  %610 = fmul double %609, 1.000000e+02
  store double %610, ptr %15, align 8, !tbaa !9
  br label %611

611:                                              ; preds = %597, %592
  %612 = load double, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  ret double %612
}

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

declare noundef double @_ZN4Bank14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(3416), double noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

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


; 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

; Function Attrs: mustprogress uwtable
define dso_local noundef double @_ZN3UCA14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(4320) %0, double noundef %1) local_unnamed_addr #0 align 2 {
  %3 = getelementptr inbounds i8, ptr %0, i64 552
  %4 = tail call noundef double @_ZN4Bank14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(3416) %3, double noundef %1)
  %5 = getelementptr inbounds i8, ptr %0, i64 3968
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %6, i64 264
  %8 = load double, ptr %7, align 8, !tbaa !21
  %9 = getelementptr inbounds i8, ptr %0, i64 3904
  %10 = load ptr, ptr %9, align 8, !tbaa !22
  %11 = getelementptr inbounds i8, ptr %10, i64 264
  %12 = load double, ptr %11, align 8, !tbaa !21
  %13 = fadd double %8, %12
  %14 = getelementptr inbounds i8, ptr %0, i64 1192
  %15 = load ptr, ptr %14, align 8, !tbaa !23
  %16 = getelementptr inbounds i8, ptr %15, i64 264
  %17 = load double, ptr %16, align 8, !tbaa !21
  %18 = fadd double %13, %17
  %19 = getelementptr inbounds i8, ptr %0, i64 1208
  %20 = load ptr, ptr %19, align 8, !tbaa !24
  %21 = getelementptr inbounds i8, ptr %20, i64 264
  %22 = load double, ptr %21, align 8, !tbaa !21
  %23 = getelementptr inbounds i8, ptr %0, i64 1144
  %24 = load ptr, ptr %23, align 8, !tbaa !25
  %25 = getelementptr inbounds i8, ptr %24, i64 632
  %26 = load double, ptr %25, align 8, !tbaa !26
  %27 = getelementptr inbounds i8, ptr %0, i64 4264
  %28 = getelementptr inbounds i8, ptr %0, i64 1216
  %29 = load ptr, ptr %28, align 8, !tbaa !28
  %30 = getelementptr inbounds i8, ptr %29, i64 264
  %31 = load double, ptr %30, align 8, !tbaa !21
  %32 = getelementptr inbounds i8, ptr %0, i64 1152
  %33 = load ptr, ptr %32, align 8, !tbaa !29
  %34 = getelementptr inbounds i8, ptr %33, i64 632
  %35 = load double, ptr %34, align 8, !tbaa !26
  %36 = insertelement <2 x double> poison, double %13, i64 0
  %37 = shufflevector <2 x double> %36, <2 x double> poison, <2 x i32> zeroinitializer
  %38 = insertelement <2 x double> poison, double %22, i64 0
  %39 = insertelement <2 x double> %38, double %31, i64 1
  %40 = fadd <2 x double> %37, %39
  %41 = insertelement <2 x double> poison, double %26, i64 0
  %42 = insertelement <2 x double> %41, double %35, i64 1
  %43 = fadd <2 x double> %40, %42
  store <2 x double> %43, ptr %27, align 8, !tbaa !30
  %44 = getelementptr inbounds i8, ptr %0, i64 1128
  %45 = load ptr, ptr %44, align 8, !tbaa !31
  %46 = getelementptr inbounds i8, ptr %45, i64 632
  %47 = load double, ptr %46, align 8, !tbaa !26
  %48 = getelementptr inbounds i8, ptr %0, i64 2624
  %49 = load double, ptr %48, align 8, !tbaa !32
  %50 = fadd double %47, %49
  %51 = getelementptr inbounds i8, ptr %0, i64 3688
  %52 = load double, ptr %51, align 8, !tbaa !33
  %53 = fadd double %50, %52
  %54 = fadd double %18, %53
  %55 = getelementptr inbounds i8, ptr %0, i64 1200
  %56 = load ptr, ptr %55, align 8, !tbaa !34
  %57 = getelementptr inbounds i8, ptr %56, i64 264
  %58 = load double, ptr %57, align 8, !tbaa !21
  %59 = fadd double %13, %58
  %60 = getelementptr inbounds i8, ptr %0, i64 1136
  %61 = load ptr, ptr %60, align 8, !tbaa !35
  %62 = getelementptr inbounds i8, ptr %61, i64 632
  %63 = load double, ptr %62, align 8, !tbaa !26
  %64 = fadd double %59, %63
  %65 = fadd double %52, %64
  %66 = fcmp ogt double %54, %65
  %. = select i1 %66, double %54, double %65
  %67 = extractelement <2 x double> %43, i64 0
  %68 = extractelement <2 x double> %43, i64 1
  %69 = fcmp ogt double %67, %68
  %70 = select i1 %69, double %67, double %68
  %71 = fcmp ogt double %., %70
  %72 = select i1 %71, double %., double %70
  %73 = getelementptr inbounds i8, ptr %0, i64 4280
  store double %72, ptr %73, align 8, !tbaa !36
  %74 = getelementptr inbounds i8, ptr %0, i64 3720
  %75 = load double, ptr %74, align 8, !tbaa !37
  %76 = getelementptr inbounds i8, ptr %0, i64 3920
  %77 = load ptr, ptr %76, align 8, !tbaa !38
  %78 = getelementptr inbounds i8, ptr %77, i64 264
  %79 = load double, ptr %78, align 8, !tbaa !21
  %80 = fadd double %75, %79
  %81 = getelementptr inbounds i8, ptr %0, i64 3984
  %82 = load ptr, ptr %81, align 8, !tbaa !39
  %83 = getelementptr inbounds i8, ptr %82, i64 264
  %84 = load double, ptr %83, align 8, !tbaa !21
  %85 = fadd double %80, %84
  %86 = getelementptr inbounds i8, ptr %0, i64 4288
  store double %85, ptr %86, align 8, !tbaa !40
  %87 = getelementptr inbounds i8, ptr %0, i64 4296
  %88 = getelementptr inbounds i8, ptr %0, i64 283
  %89 = load i8, ptr %88, align 1, !tbaa !41, !range !42, !noundef !43
  %90 = trunc nuw i8 %89 to i1
  br i1 %90, label %91, label %97

91:                                               ; preds = %2
  %92 = getelementptr inbounds i8, ptr %0, i64 2656
  %93 = load double, ptr %92, align 8, !tbaa !44
  %94 = fadd double %49, %93
  %95 = fadd double %85, %94
  %96 = fadd double %13, %95
  br label %99

97:                                               ; preds = %2
  %98 = fadd double %72, %85
  br label %99

99:                                               ; preds = %97, %91
  %storemerge = phi double [ %98, %97 ], [ %96, %91 ]
  store double %storemerge, ptr %87, align 8, !tbaa !45
  %100 = getelementptr inbounds i8, ptr %0, i64 492
  %101 = load i8, ptr %100, align 4, !tbaa !46, !range !42, !noundef !43
  %102 = trunc nuw i8 %101 to i1
  br i1 %102, label %103, label %106

103:                                              ; preds = %99
  %104 = fadd double %70, %85
  %105 = fadd double %54, %104
  store double %105, ptr %87, align 8, !tbaa !45
  br label %106

106:                                              ; preds = %103, %99
  %107 = phi double [ %105, %103 ], [ %storemerge, %99 ]
  br i1 %90, label %123, label %108

108:                                              ; preds = %106
  %109 = getelementptr inbounds i8, ptr %0, i64 2632
  %110 = load double, ptr %109, align 8, !tbaa !47
  %111 = fadd double %53, %110
  %112 = getelementptr inbounds i8, ptr %0, i64 2640
  %113 = load double, ptr %112, align 8, !tbaa !48
  %114 = fadd double %111, %113
  %115 = getelementptr inbounds i8, ptr %0, i64 400
  %116 = load i8, ptr %115, align 8, !tbaa !49, !range !42, !noundef !43
  %117 = trunc nuw i8 %116 to i1
  %118 = getelementptr inbounds i8, ptr %0, i64 3504
  %119 = load double, ptr %118, align 8
  %120 = fadd double %114, %119
  %.0 = select i1 %117, double %120, double %114
  %121 = fcmp ogt double %.0, %17
  %122 = select i1 %121, double %.0, double %17
  br label %142

123:                                              ; preds = %106
  %124 = getelementptr inbounds i8, ptr %0, i64 2656
  %125 = load double, ptr %124, align 8, !tbaa !44
  %126 = fadd double %49, %125
  %127 = getelementptr inbounds i8, ptr %0, i64 2664
  %128 = load double, ptr %127, align 8, !tbaa !50
  %129 = fadd double %126, %128
  %130 = getelementptr inbounds i8, ptr %0, i64 2672
  %131 = load double, ptr %130, align 8, !tbaa !51
  %132 = fadd double %129, %131
  %133 = getelementptr inbounds i8, ptr %0, i64 2640
  %134 = load double, ptr %133, align 8, !tbaa !48
  %135 = fadd double %132, %134
  %136 = getelementptr inbounds i8, ptr %0, i64 2688
  %137 = load double, ptr %136, align 8, !tbaa !52
  %138 = fadd double %135, %137
  %139 = getelementptr inbounds i8, ptr %0, i64 2632
  %140 = load double, ptr %139, align 8, !tbaa !47
  %141 = fadd double %138, %140
  br label %142

142:                                              ; preds = %123, %108
  %.sink83 = phi double [ %141, %123 ], [ %122, %108 ]
  %143 = phi double [ %134, %123 ], [ %113, %108 ]
  %144 = phi double [ %140, %123 ], [ %110, %108 ]
  %145 = fcmp ogt double %.sink83, %58
  %.75 = select i1 %145, double %.sink83, double %58
  %146 = fcmp ogt double %.75, %22
  %147 = select i1 %146, double %.75, double %22
  %148 = fcmp ogt double %147, %31
  %149 = select i1 %148, double %147, double %31
  %150 = load ptr, ptr @g_ip, align 8, !tbaa !53
  %151 = getelementptr inbounds i8, ptr %150, i64 88
  %152 = load i8, ptr %151, align 8, !tbaa !54, !range !42, !noundef !43
  %153 = icmp eq i8 %152, 0
  br i1 %153, label %154, label %158

154:                                              ; preds = %142
  %155 = getelementptr inbounds i8, ptr %10, i64 296
  %156 = load double, ptr %155, align 8, !tbaa !57
  %157 = fcmp ogt double %149, %156
  %.1. = select i1 %157, double %149, double %156
  br label %158

158:                                              ; preds = %154, %142
  %.2 = phi double [ %.1., %154 ], [ %149, %142 ]
  %159 = getelementptr inbounds i8, ptr %0, i64 272
  store double %.2, ptr %159, align 8, !tbaa !60
  %160 = fcmp ogt double %18, %85
  %161 = select i1 %160, double %18, double %85
  %162 = getelementptr inbounds i8, ptr %0, i64 4312
  store double %161, ptr %162, align 8, !tbaa !61
  br i1 %102, label %163, label %170

163:                                              ; preds = %158
  store double %8, ptr %162, align 8, !tbaa !61
  %164 = getelementptr inbounds i8, ptr %0, i64 3504
  %165 = load double, ptr %164, align 8, !tbaa !62
  %166 = fadd double %13, %165
  %167 = fadd double %166, %144
  %168 = fadd double %167, %143
  %169 = fadd double %168, %107
  store double %169, ptr %159, align 8, !tbaa !60
  br label %170

170:                                              ; preds = %158, %163
  %.sink = phi double [ %168, %163 ], [ 0.000000e+00, %158 ]
  %171 = getelementptr inbounds i8, ptr %0, i64 4304
  store double %.sink, ptr %171, align 8
  ret double %4
}

declare noundef double @_ZN4Bank14compute_delaysEd(ptr noundef nonnull align 8 dereferenceable(3416), double noundef) local_unnamed_addr #1

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

!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 264}
!22 = !{!6, !18, i64 3904}
!23 = !{!6, !18, i64 1192}
!24 = !{!6, !18, i64 1208}
!25 = !{!6, !18, i64 1144}
!26 = !{!27, !9, i64 632}
!27 = !{!"_ZTS7Decoder", !7, i64 0, !15, i64 280, !16, i64 284, !9, i64 288, !9, i64 296, !16, i64 304, !16, i64 308, !10, i64 312, !10, i64 472, !9, i64 632, !15, i64 640, !15, i64 641, !15, i64 642, !18, i64 648}
!28 = !{!6, !18, i64 1216}
!29 = !{!6, !18, i64 1152}
!30 = !{!9, !9, i64 0}
!31 = !{!6, !18, i64 1128}
!32 = !{!6, !9, i64 2624}
!33 = !{!6, !9, i64 3688}
!34 = !{!6, !18, i64 1200}
!35 = !{!6, !18, i64 1136}
!36 = !{!6, !9, i64 4280}
!37 = !{!6, !9, i64 3720}
!38 = !{!6, !18, i64 3920}
!39 = !{!6, !18, i64 3984}
!40 = !{!6, !9, i64 4288}
!41 = !{!6, !15, i64 283}
!42 = !{i8 0, i8 2}
!43 = !{}
!44 = !{!6, !9, i64 2656}
!45 = !{!6, !9, i64 4296}
!46 = !{!6, !15, i64 492}
!47 = !{!6, !9, i64 2632}
!48 = !{!6, !9, i64 2640}
!49 = !{!6, !15, i64 400}
!50 = !{!6, !9, i64 2664}
!51 = !{!6, !9, i64 2672}
!52 = !{!6, !9, i64 2688}
!53 = !{!18, !18, i64 0}
!54 = !{!55, !15, i64 88}
!55 = !{!"_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, !56, 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}
!56 = !{!"_ZTS9Wire_type", !10, i64 0}
!57 = !{!58, !9, i64 296}
!58 = !{!"_ZTS6Htree2", !7, i64 0, !9, i64 280, !9, i64 288, !9, i64 296, !12, i64 304, !9, i64 424, !9, i64 432, !59, 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, !56, i64 512, !9, i64 520, !9, i64 528, !18, i64 536}
!59 = !{!"_ZTS10Htree_type", !10, i64 0}
!60 = !{!7, !9, i64 272}
!61 = !{!6, !9, i64 4312}
!62 = !{!6, !9, i64 3504}


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