; LLVM IR from gem5/gem5 :: ext/mcpat/cacti/decoder.ll (ZN9PredecBlk14compute_delaysESt4pairIddE)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%class.TechnologyParameter = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i64, %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::ScalingFactor", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType" }
%"class.TechnologyParameter::DeviceType" = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::InterconnectType" = type { double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::ScalingFactor" = type { double, double, double }
%"class.TechnologyParameter::MemoryType" = type { double, double, double, double, double, double }
%"struct.std::pair" = type { double, double }
%class.PredecBlk = type <{ %class.Component, ptr, i8, [3 x i8], i32, double, double, i32, i32, i8, [3 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, [20 x double], [20 x double], [20 x double], [20 x double], [20 x double], [20 x double], double, double, %class.powerDef, %class.powerDef, %class.powerDef, i8, [7 x i8] }>
%class.Component = type { %class.Area, %class.powerDef, %class.powerDef, double, double }
%class.Area = type { double, double, double }
%class.powerDef = type { %class.powerComponents, %class.powerComponents, %class.powerComponents }
%class.powerComponents = type { double, double, double, double, double }

@g_tp = external global %class.TechnologyParameter, 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local { double, double } @_ZN9PredecBlk14compute_delaysESt4pairIddE(ptr noundef nonnull align 8 dereferenceable(1697) %0, double %1, double %2) #3 align 2 {
  %4 = alloca %"struct.std::pair", align 8
  %5 = alloca %"struct.std::pair", align 8
  %6 = alloca ptr, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 0
  store double %1, ptr %16, align 8
  %17 = getelementptr inbounds { double, double }, ptr %5, i32 0, i32 1
  store double %2, ptr %17, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  %18 = load ptr, ptr %6, align 8
  call void @_ZNSt4pairIddEC2IddTnNSt9enable_ifIXsr6__and_ISt37__is_implicitly_default_constructibleIT_ES3_IT0_EEE5valueEbE4typeELb1EEEv(ptr noundef nonnull align 8 dereferenceable(16) %4)
  %19 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 0
  store double 0.000000e+00, ptr %19, align 8, !tbaa !9
  %20 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 1
  store double 0.000000e+00, ptr %20, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %21 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 0
  %22 = load double, ptr %21, align 8, !tbaa !9
  store double %22, ptr %7, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %23 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 1
  %24 = load double, ptr %23, align 8, !tbaa !12
  store double %24, ptr %8, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %25 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48), i32 0, i32 9), align 8, !tbaa !14
  store double %25, ptr %15, align 8, !tbaa !13
  %26 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 2
  %27 = load i8, ptr %26, align 8, !tbaa !21, !range !29, !noundef !30
  %28 = trunc i8 %27 to i1
  br i1 %28, label %29, label %907

29:                                               ; preds = %3
  %30 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 9
  %31 = load i8, ptr %30, align 8, !tbaa !31, !range !29, !noundef !30
  %32 = trunc i8 %31 to i1
  br i1 %32, label %37, label %33

33:                                               ; preds = %29
  %34 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 12
  %35 = load i32, ptr %34, align 8, !tbaa !32
  %36 = icmp eq i32 %35, 2
  br i1 %36, label %37, label %318

37:                                               ; preds = %33, %29
  %38 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %39 = getelementptr inbounds [20 x double], ptr %38, i64 0, i64 0
  %40 = load double, ptr %39, align 8, !tbaa !13
  %41 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %42 = load i8, ptr %41, align 8, !tbaa !33, !range !29, !noundef !30
  %43 = trunc i8 %42 to i1
  %44 = call noundef double @_Z7tr_R_ondiibbb(double noundef %40, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %43, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %44, ptr %10, align 8, !tbaa !13
  %45 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %46 = getelementptr inbounds [20 x double], ptr %45, i64 0, i64 1
  %47 = load double, ptr %46, align 8, !tbaa !13
  %48 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 21
  %49 = getelementptr inbounds [20 x double], ptr %48, i64 0, i64 1
  %50 = load double, ptr %49, align 8, !tbaa !13
  %51 = fadd double %47, %50
  %52 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %53 = load i8, ptr %52, align 8, !tbaa !33, !range !29, !noundef !30
  %54 = trunc i8 %53 to i1
  %55 = call noundef double @_Z6gate_Cddbbb(double noundef %51, double noundef 0.000000e+00, i1 noundef zeroext %54, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %55, ptr %11, align 8, !tbaa !13
  %56 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 21
  %57 = getelementptr inbounds [20 x double], ptr %56, i64 0, i64 0
  %58 = load double, ptr %57, align 8, !tbaa !13
  %59 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %60 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %61 = load i8, ptr %60, align 8, !tbaa !33, !range !29, !noundef !30
  %62 = trunc i8 %61 to i1
  %63 = call noundef double @_Z8drain_C_diiidbbb(double noundef %58, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %59, i1 noundef zeroext %62, i1 noundef zeroext false, i1 noundef zeroext false)
  %64 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %65 = getelementptr inbounds [20 x double], ptr %64, i64 0, i64 0
  %66 = load double, ptr %65, align 8, !tbaa !13
  %67 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %68 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %69 = load i8, ptr %68, align 8, !tbaa !33, !range !29, !noundef !30
  %70 = trunc i8 %69 to i1
  %71 = call noundef double @_Z8drain_C_diiidbbb(double noundef %66, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %67, i1 noundef zeroext %70, i1 noundef zeroext false, i1 noundef zeroext false)
  %72 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %63, double %71)
  store double %72, ptr %12, align 8, !tbaa !13
  %73 = load double, ptr %10, align 8, !tbaa !13
  %74 = load double, ptr %12, align 8, !tbaa !13
  %75 = load double, ptr %11, align 8, !tbaa !13
  %76 = fadd double %74, %75
  %77 = fmul double %73, %76
  store double %77, ptr %13, align 8, !tbaa !13
  %78 = load double, ptr %7, align 8, !tbaa !13
  %79 = load double, ptr %13, align 8, !tbaa !13
  %80 = call noundef double @_Z8horowitzddddi(double noundef %78, double noundef %79, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %80, ptr %14, align 8, !tbaa !13
  %81 = load double, ptr %14, align 8, !tbaa !13
  %82 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 26
  %83 = load double, ptr %82, align 8, !tbaa !35
  %84 = fadd double %83, %81
  store double %84, ptr %82, align 8, !tbaa !35
  %85 = load double, ptr %14, align 8, !tbaa !13
  %86 = fdiv double %85, 5.000000e-01
  store double %86, ptr %7, align 8, !tbaa !13
  %87 = load double, ptr %11, align 8, !tbaa !13
  %88 = load double, ptr %12, align 8, !tbaa !13
  %89 = fadd double %87, %88
  %90 = load double, ptr %15, align 8, !tbaa !13
  %91 = fmul double %89, %90
  %92 = load double, ptr %15, align 8, !tbaa !13
  %93 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 28
  %94 = getelementptr inbounds %class.powerDef, ptr %93, i32 0, i32 0
  %95 = getelementptr inbounds %class.powerComponents, ptr %94, i32 0, i32 0
  %96 = load double, ptr %95, align 8, !tbaa !36
  %97 = call double @llvm.fmuladd.f64(double %91, double %92, double %96)
  store double %97, ptr %95, align 8, !tbaa !36
  store i32 1, ptr %9, align 4, !tbaa !37
  br label %98

98:                                               ; preds = %177, %37
  %99 = load i32, ptr %9, align 4, !tbaa !37
  %100 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 13
  %101 = load i32, ptr %100, align 4, !tbaa !38
  %102 = sub nsw i32 %101, 1
  %103 = icmp slt i32 %99, %102
  br i1 %103, label %104, label %180

104:                                              ; preds = %98
  %105 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %106 = load i32, ptr %9, align 4, !tbaa !37
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [20 x double], ptr %105, i64 0, i64 %107
  %109 = load double, ptr %108, align 8, !tbaa !13
  %110 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %111 = load i8, ptr %110, align 8, !tbaa !33, !range !29, !noundef !30
  %112 = trunc i8 %111 to i1
  %113 = call noundef double @_Z7tr_R_ondiibbb(double noundef %109, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %112, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %113, ptr %10, align 8, !tbaa !13
  %114 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %115 = load i32, ptr %9, align 4, !tbaa !37
  %116 = add nsw i32 %115, 1
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds [20 x double], ptr %114, i64 0, i64 %117
  %119 = load double, ptr %118, align 8, !tbaa !13
  %120 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 21
  %121 = load i32, ptr %9, align 4, !tbaa !37
  %122 = add nsw i32 %121, 1
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds [20 x double], ptr %120, i64 0, i64 %123
  %125 = load double, ptr %124, align 8, !tbaa !13
  %126 = fadd double %119, %125
  %127 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %128 = load i8, ptr %127, align 8, !tbaa !33, !range !29, !noundef !30
  %129 = trunc i8 %128 to i1
  %130 = call noundef double @_Z6gate_Cddbbb(double noundef %126, double noundef 0.000000e+00, i1 noundef zeroext %129, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %130, ptr %11, align 8, !tbaa !13
  %131 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 21
  %132 = load i32, ptr %9, align 4, !tbaa !37
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds [20 x double], ptr %131, i64 0, i64 %133
  %135 = load double, ptr %134, align 8, !tbaa !13
  %136 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %137 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %138 = load i8, ptr %137, align 8, !tbaa !33, !range !29, !noundef !30
  %139 = trunc i8 %138 to i1
  %140 = call noundef double @_Z8drain_C_diiidbbb(double noundef %135, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %136, i1 noundef zeroext %139, i1 noundef zeroext false, i1 noundef zeroext false)
  %141 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %142 = load i32, ptr %9, align 4, !tbaa !37
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds [20 x double], ptr %141, i64 0, i64 %143
  %145 = load double, ptr %144, align 8, !tbaa !13
  %146 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %147 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %148 = load i8, ptr %147, align 8, !tbaa !33, !range !29, !noundef !30
  %149 = trunc i8 %148 to i1
  %150 = call noundef double @_Z8drain_C_diiidbbb(double noundef %145, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %146, i1 noundef zeroext %149, i1 noundef zeroext false, i1 noundef zeroext false)
  %151 = fadd double %140, %150
  store double %151, ptr %12, align 8, !tbaa !13
  %152 = load double, ptr %10, align 8, !tbaa !13
  %153 = load double, ptr %12, align 8, !tbaa !13
  %154 = load double, ptr %11, align 8, !tbaa !13
  %155 = fadd double %153, %154
  %156 = fmul double %152, %155
  store double %156, ptr %13, align 8, !tbaa !13
  %157 = load double, ptr %7, align 8, !tbaa !13
  %158 = load double, ptr %13, align 8, !tbaa !13
  %159 = call noundef double @_Z8horowitzddddi(double noundef %157, double noundef %158, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %159, ptr %14, align 8, !tbaa !13
  %160 = load double, ptr %14, align 8, !tbaa !13
  %161 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 26
  %162 = load double, ptr %161, align 8, !tbaa !35
  %163 = fadd double %162, %160
  store double %163, ptr %161, align 8, !tbaa !35
  %164 = load double, ptr %14, align 8, !tbaa !13
  %165 = fdiv double %164, 5.000000e-01
  store double %165, ptr %7, align 8, !tbaa !13
  %166 = load double, ptr %12, align 8, !tbaa !13
  %167 = load double, ptr %11, align 8, !tbaa !13
  %168 = fadd double %166, %167
  %169 = load double, ptr %15, align 8, !tbaa !13
  %170 = fmul double %168, %169
  %171 = load double, ptr %15, align 8, !tbaa !13
  %172 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 28
  %173 = getelementptr inbounds %class.powerDef, ptr %172, i32 0, i32 0
  %174 = getelementptr inbounds %class.powerComponents, ptr %173, i32 0, i32 0
  %175 = load double, ptr %174, align 8, !tbaa !36
  %176 = call double @llvm.fmuladd.f64(double %170, double %171, double %175)
  store double %176, ptr %174, align 8, !tbaa !36
  br label %177

177:                                              ; preds = %104
  %178 = load i32, ptr %9, align 4, !tbaa !37
  %179 = add nsw i32 %178, 1
  store i32 %179, ptr %9, align 4, !tbaa !37
  br label %98, !llvm.loop !39

180:                                              ; preds = %98
  %181 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 13
  %182 = load i32, ptr %181, align 4, !tbaa !38
  %183 = sub nsw i32 %182, 1
  store i32 %183, ptr %9, align 4, !tbaa !37
  %184 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %185 = load i32, ptr %9, align 4, !tbaa !37
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [20 x double], ptr %184, i64 0, i64 %186
  %188 = load double, ptr %187, align 8, !tbaa !13
  %189 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %190 = load i8, ptr %189, align 8, !tbaa !33, !range !29, !noundef !30
  %191 = trunc i8 %190 to i1
  %192 = call noundef double @_Z7tr_R_ondiibbb(double noundef %188, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %191, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %192, ptr %10, align 8, !tbaa !13
  %193 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 11
  %194 = load i32, ptr %193, align 4, !tbaa !41
  %195 = icmp ne i32 %194, 0
  br i1 %195, label %196, label %262

196:                                              ; preds = %180
  %197 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 7
  %198 = load i32, ptr %197, align 8, !tbaa !42
  %199 = sitofp i32 %198 to double
  %200 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %201 = getelementptr inbounds [20 x double], ptr %200, i64 0, i64 0
  %202 = load double, ptr %201, align 8, !tbaa !13
  %203 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %204 = load i8, ptr %203, align 8, !tbaa !33, !range !29, !noundef !30
  %205 = trunc i8 %204 to i1
  %206 = call noundef double @_Z6gate_Cddbbb(double noundef %202, double noundef 0.000000e+00, i1 noundef zeroext %205, i1 noundef zeroext false, i1 noundef zeroext false)
  %207 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %208 = getelementptr inbounds [20 x double], ptr %207, i64 0, i64 0
  %209 = load double, ptr %208, align 8, !tbaa !13
  %210 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %211 = load i8, ptr %210, align 8, !tbaa !33, !range !29, !noundef !30
  %212 = trunc i8 %211 to i1
  %213 = call noundef double @_Z6gate_Cddbbb(double noundef %209, double noundef 0.000000e+00, i1 noundef zeroext %212, i1 noundef zeroext false, i1 noundef zeroext false)
  %214 = fadd double %206, %213
  %215 = fmul double %199, %214
  store double %215, ptr %11, align 8, !tbaa !13
  %216 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 21
  %217 = load i32, ptr %9, align 4, !tbaa !37
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds [20 x double], ptr %216, i64 0, i64 %218
  %220 = load double, ptr %219, align 8, !tbaa !13
  %221 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %222 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %223 = load i8, ptr %222, align 8, !tbaa !33, !range !29, !noundef !30
  %224 = trunc i8 %223 to i1
  %225 = call noundef double @_Z8drain_C_diiidbbb(double noundef %220, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %221, i1 noundef zeroext %224, i1 noundef zeroext false, i1 noundef zeroext false)
  %226 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %227 = load i32, ptr %9, align 4, !tbaa !37
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds [20 x double], ptr %226, i64 0, i64 %228
  %230 = load double, ptr %229, align 8, !tbaa !13
  %231 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %232 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %233 = load i8, ptr %232, align 8, !tbaa !33, !range !29, !noundef !30
  %234 = trunc i8 %233 to i1
  %235 = call noundef double @_Z8drain_C_diiidbbb(double noundef %230, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %231, i1 noundef zeroext %234, i1 noundef zeroext false, i1 noundef zeroext false)
  %236 = fadd double %225, %235
  store double %236, ptr %12, align 8, !tbaa !13
  %237 = load double, ptr %10, align 8, !tbaa !13
  %238 = load double, ptr %12, align 8, !tbaa !13
  %239 = load double, ptr %11, align 8, !tbaa !13
  %240 = fadd double %238, %239
  %241 = fmul double %237, %240
  store double %241, ptr %13, align 8, !tbaa !13
  %242 = load double, ptr %7, align 8, !tbaa !13
  %243 = load double, ptr %13, align 8, !tbaa !13
  %244 = call noundef double @_Z8horowitzddddi(double noundef %242, double noundef %243, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %244, ptr %14, align 8, !tbaa !13
  %245 = load double, ptr %14, align 8, !tbaa !13
  %246 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 26
  %247 = load double, ptr %246, align 8, !tbaa !35
  %248 = fadd double %247, %245
  store double %248, ptr %246, align 8, !tbaa !35
  %249 = load double, ptr %14, align 8, !tbaa !13
  %250 = fdiv double %249, 5.000000e-01
  store double %250, ptr %7, align 8, !tbaa !13
  %251 = load double, ptr %12, align 8, !tbaa !13
  %252 = load double, ptr %11, align 8, !tbaa !13
  %253 = fadd double %251, %252
  %254 = load double, ptr %15, align 8, !tbaa !13
  %255 = fmul double %253, %254
  %256 = load double, ptr %15, align 8, !tbaa !13
  %257 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 28
  %258 = getelementptr inbounds %class.powerDef, ptr %257, i32 0, i32 0
  %259 = getelementptr inbounds %class.powerComponents, ptr %258, i32 0, i32 0
  %260 = load double, ptr %259, align 8, !tbaa !36
  %261 = call double @llvm.fmuladd.f64(double %255, double %256, double %260)
  store double %261, ptr %259, align 8, !tbaa !36
  br label %317

262:                                              ; preds = %180
  %263 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 5
  %264 = load double, ptr %263, align 8, !tbaa !43
  store double %264, ptr %11, align 8, !tbaa !13
  %265 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 21
  %266 = load i32, ptr %9, align 4, !tbaa !37
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [20 x double], ptr %265, i64 0, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !13
  %270 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %271 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %272 = load i8, ptr %271, align 8, !tbaa !33, !range !29, !noundef !30
  %273 = trunc i8 %272 to i1
  %274 = call noundef double @_Z8drain_C_diiidbbb(double noundef %269, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %270, i1 noundef zeroext %273, i1 noundef zeroext false, i1 noundef zeroext false)
  %275 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 20
  %276 = load i32, ptr %9, align 4, !tbaa !37
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds [20 x double], ptr %275, i64 0, i64 %277
  %279 = load double, ptr %278, align 8, !tbaa !13
  %280 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %281 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %282 = load i8, ptr %281, align 8, !tbaa !33, !range !29, !noundef !30
  %283 = trunc i8 %282 to i1
  %284 = call noundef double @_Z8drain_C_diiidbbb(double noundef %279, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %280, i1 noundef zeroext %283, i1 noundef zeroext false, i1 noundef zeroext false)
  %285 = fadd double %274, %284
  store double %285, ptr %12, align 8, !tbaa !13
  %286 = load double, ptr %10, align 8, !tbaa !13
  %287 = load double, ptr %12, align 8, !tbaa !13
  %288 = load double, ptr %11, align 8, !tbaa !13
  %289 = fadd double %287, %288
  %290 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 6
  %291 = load double, ptr %290, align 8, !tbaa !44
  %292 = load double, ptr %11, align 8, !tbaa !13
  %293 = fmul double %291, %292
  %294 = fdiv double %293, 2.000000e+00
  %295 = call double @llvm.fmuladd.f64(double %286, double %289, double %294)
  store double %295, ptr %13, align 8, !tbaa !13
  %296 = load double, ptr %7, align 8, !tbaa !13
  %297 = load double, ptr %13, align 8, !tbaa !13
  %298 = call noundef double @_Z8horowitzddddi(double noundef %296, double noundef %297, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %298, ptr %14, align 8, !tbaa !13
  %299 = load double, ptr %14, align 8, !tbaa !13
  %300 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 26
  %301 = load double, ptr %300, align 8, !tbaa !35
  %302 = fadd double %301, %299
  store double %302, ptr %300, align 8, !tbaa !35
  %303 = load double, ptr %14, align 8, !tbaa !13
  %304 = fdiv double %303, 5.000000e-01
  %305 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 0
  store double %304, ptr %305, align 8, !tbaa !9
  %306 = load double, ptr %12, align 8, !tbaa !13
  %307 = load double, ptr %11, align 8, !tbaa !13
  %308 = fadd double %306, %307
  %309 = load double, ptr %15, align 8, !tbaa !13
  %310 = fmul double %308, %309
  %311 = load double, ptr %15, align 8, !tbaa !13
  %312 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 28
  %313 = getelementptr inbounds %class.powerDef, ptr %312, i32 0, i32 0
  %314 = getelementptr inbounds %class.powerComponents, ptr %313, i32 0, i32 0
  %315 = load double, ptr %314, align 8, !tbaa !36
  %316 = call double @llvm.fmuladd.f64(double %310, double %311, double %315)
  store double %316, ptr %314, align 8, !tbaa !36
  br label %317

317:                                              ; preds = %262, %196
  br label %318

318:                                              ; preds = %317, %33
  %319 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 9
  %320 = load i8, ptr %319, align 8, !tbaa !31, !range !29, !noundef !30
  %321 = trunc i8 %320 to i1
  br i1 %321, label %326, label %322

322:                                              ; preds = %318
  %323 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 12
  %324 = load i32, ptr %323, align 8, !tbaa !32
  %325 = icmp eq i32 %324, 3
  br i1 %325, label %326, label %607

326:                                              ; preds = %322, %318
  %327 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %328 = getelementptr inbounds [20 x double], ptr %327, i64 0, i64 0
  %329 = load double, ptr %328, align 8, !tbaa !13
  %330 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %331 = load i8, ptr %330, align 8, !tbaa !33, !range !29, !noundef !30
  %332 = trunc i8 %331 to i1
  %333 = call noundef double @_Z7tr_R_ondiibbb(double noundef %329, i32 noundef 1, i32 noundef 3, i1 noundef zeroext %332, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %333, ptr %10, align 8, !tbaa !13
  %334 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %335 = getelementptr inbounds [20 x double], ptr %334, i64 0, i64 1
  %336 = load double, ptr %335, align 8, !tbaa !13
  %337 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 23
  %338 = getelementptr inbounds [20 x double], ptr %337, i64 0, i64 1
  %339 = load double, ptr %338, align 8, !tbaa !13
  %340 = fadd double %336, %339
  %341 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %342 = load i8, ptr %341, align 8, !tbaa !33, !range !29, !noundef !30
  %343 = trunc i8 %342 to i1
  %344 = call noundef double @_Z6gate_Cddbbb(double noundef %340, double noundef 0.000000e+00, i1 noundef zeroext %343, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %344, ptr %11, align 8, !tbaa !13
  %345 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 23
  %346 = getelementptr inbounds [20 x double], ptr %345, i64 0, i64 0
  %347 = load double, ptr %346, align 8, !tbaa !13
  %348 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %349 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %350 = load i8, ptr %349, align 8, !tbaa !33, !range !29, !noundef !30
  %351 = trunc i8 %350 to i1
  %352 = call noundef double @_Z8drain_C_diiidbbb(double noundef %347, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %348, i1 noundef zeroext %351, i1 noundef zeroext false, i1 noundef zeroext false)
  %353 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %354 = getelementptr inbounds [20 x double], ptr %353, i64 0, i64 0
  %355 = load double, ptr %354, align 8, !tbaa !13
  %356 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %357 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %358 = load i8, ptr %357, align 8, !tbaa !33, !range !29, !noundef !30
  %359 = trunc i8 %358 to i1
  %360 = call noundef double @_Z8drain_C_diiidbbb(double noundef %355, i32 noundef 1, i32 noundef 3, i32 noundef 1, double noundef %356, i1 noundef zeroext %359, i1 noundef zeroext false, i1 noundef zeroext false)
  %361 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %352, double %360)
  store double %361, ptr %12, align 8, !tbaa !13
  %362 = load double, ptr %10, align 8, !tbaa !13
  %363 = load double, ptr %12, align 8, !tbaa !13
  %364 = load double, ptr %11, align 8, !tbaa !13
  %365 = fadd double %363, %364
  %366 = fmul double %362, %365
  store double %366, ptr %13, align 8, !tbaa !13
  %367 = load double, ptr %8, align 8, !tbaa !13
  %368 = load double, ptr %13, align 8, !tbaa !13
  %369 = call noundef double @_Z8horowitzddddi(double noundef %367, double noundef %368, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %369, ptr %14, align 8, !tbaa !13
  %370 = load double, ptr %14, align 8, !tbaa !13
  %371 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 27
  %372 = load double, ptr %371, align 8, !tbaa !45
  %373 = fadd double %372, %370
  store double %373, ptr %371, align 8, !tbaa !45
  %374 = load double, ptr %14, align 8, !tbaa !13
  %375 = fdiv double %374, 5.000000e-01
  store double %375, ptr %8, align 8, !tbaa !13
  %376 = load double, ptr %12, align 8, !tbaa !13
  %377 = load double, ptr %11, align 8, !tbaa !13
  %378 = fadd double %376, %377
  %379 = load double, ptr %15, align 8, !tbaa !13
  %380 = fmul double %378, %379
  %381 = load double, ptr %15, align 8, !tbaa !13
  %382 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 29
  %383 = getelementptr inbounds %class.powerDef, ptr %382, i32 0, i32 0
  %384 = getelementptr inbounds %class.powerComponents, ptr %383, i32 0, i32 0
  %385 = load double, ptr %384, align 8, !tbaa !46
  %386 = call double @llvm.fmuladd.f64(double %380, double %381, double %385)
  store double %386, ptr %384, align 8, !tbaa !46
  store i32 1, ptr %9, align 4, !tbaa !37
  br label %387

387:                                              ; preds = %466, %326
  %388 = load i32, ptr %9, align 4, !tbaa !37
  %389 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 14
  %390 = load i32, ptr %389, align 8, !tbaa !47
  %391 = sub nsw i32 %390, 1
  %392 = icmp slt i32 %388, %391
  br i1 %392, label %393, label %469

393:                                              ; preds = %387
  %394 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %395 = load i32, ptr %9, align 4, !tbaa !37
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds [20 x double], ptr %394, i64 0, i64 %396
  %398 = load double, ptr %397, align 8, !tbaa !13
  %399 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %400 = load i8, ptr %399, align 8, !tbaa !33, !range !29, !noundef !30
  %401 = trunc i8 %400 to i1
  %402 = call noundef double @_Z7tr_R_ondiibbb(double noundef %398, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %401, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %402, ptr %10, align 8, !tbaa !13
  %403 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %404 = load i32, ptr %9, align 4, !tbaa !37
  %405 = add nsw i32 %404, 1
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds [20 x double], ptr %403, i64 0, i64 %406
  %408 = load double, ptr %407, align 8, !tbaa !13
  %409 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 23
  %410 = load i32, ptr %9, align 4, !tbaa !37
  %411 = add nsw i32 %410, 1
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds [20 x double], ptr %409, i64 0, i64 %412
  %414 = load double, ptr %413, align 8, !tbaa !13
  %415 = fadd double %408, %414
  %416 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %417 = load i8, ptr %416, align 8, !tbaa !33, !range !29, !noundef !30
  %418 = trunc i8 %417 to i1
  %419 = call noundef double @_Z6gate_Cddbbb(double noundef %415, double noundef 0.000000e+00, i1 noundef zeroext %418, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %419, ptr %11, align 8, !tbaa !13
  %420 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 23
  %421 = load i32, ptr %9, align 4, !tbaa !37
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds [20 x double], ptr %420, i64 0, i64 %422
  %424 = load double, ptr %423, align 8, !tbaa !13
  %425 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %426 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %427 = load i8, ptr %426, align 8, !tbaa !33, !range !29, !noundef !30
  %428 = trunc i8 %427 to i1
  %429 = call noundef double @_Z8drain_C_diiidbbb(double noundef %424, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %425, i1 noundef zeroext %428, i1 noundef zeroext false, i1 noundef zeroext false)
  %430 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %431 = load i32, ptr %9, align 4, !tbaa !37
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds [20 x double], ptr %430, i64 0, i64 %432
  %434 = load double, ptr %433, align 8, !tbaa !13
  %435 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %436 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %437 = load i8, ptr %436, align 8, !tbaa !33, !range !29, !noundef !30
  %438 = trunc i8 %437 to i1
  %439 = call noundef double @_Z8drain_C_diiidbbb(double noundef %434, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %435, i1 noundef zeroext %438, i1 noundef zeroext false, i1 noundef zeroext false)
  %440 = fadd double %429, %439
  store double %440, ptr %12, align 8, !tbaa !13
  %441 = load double, ptr %10, align 8, !tbaa !13
  %442 = load double, ptr %12, align 8, !tbaa !13
  %443 = load double, ptr %11, align 8, !tbaa !13
  %444 = fadd double %442, %443
  %445 = fmul double %441, %444
  store double %445, ptr %13, align 8, !tbaa !13
  %446 = load double, ptr %8, align 8, !tbaa !13
  %447 = load double, ptr %13, align 8, !tbaa !13
  %448 = call noundef double @_Z8horowitzddddi(double noundef %446, double noundef %447, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %448, ptr %14, align 8, !tbaa !13
  %449 = load double, ptr %14, align 8, !tbaa !13
  %450 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 27
  %451 = load double, ptr %450, align 8, !tbaa !45
  %452 = fadd double %451, %449
  store double %452, ptr %450, align 8, !tbaa !45
  %453 = load double, ptr %14, align 8, !tbaa !13
  %454 = fdiv double %453, 5.000000e-01
  store double %454, ptr %8, align 8, !tbaa !13
  %455 = load double, ptr %12, align 8, !tbaa !13
  %456 = load double, ptr %11, align 8, !tbaa !13
  %457 = fadd double %455, %456
  %458 = load double, ptr %15, align 8, !tbaa !13
  %459 = fmul double %457, %458
  %460 = load double, ptr %15, align 8, !tbaa !13
  %461 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 29
  %462 = getelementptr inbounds %class.powerDef, ptr %461, i32 0, i32 0
  %463 = getelementptr inbounds %class.powerComponents, ptr %462, i32 0, i32 0
  %464 = load double, ptr %463, align 8, !tbaa !46
  %465 = call double @llvm.fmuladd.f64(double %459, double %460, double %464)
  store double %465, ptr %463, align 8, !tbaa !46
  br label %466

466:                                              ; preds = %393
  %467 = load i32, ptr %9, align 4, !tbaa !37
  %468 = add nsw i32 %467, 1
  store i32 %468, ptr %9, align 4, !tbaa !37
  br label %387, !llvm.loop !48

469:                                              ; preds = %387
  %470 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 14
  %471 = load i32, ptr %470, align 8, !tbaa !47
  %472 = sub nsw i32 %471, 1
  store i32 %472, ptr %9, align 4, !tbaa !37
  %473 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %474 = load i32, ptr %9, align 4, !tbaa !37
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds [20 x double], ptr %473, i64 0, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !13
  %478 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %479 = load i8, ptr %478, align 8, !tbaa !33, !range !29, !noundef !30
  %480 = trunc i8 %479 to i1
  %481 = call noundef double @_Z7tr_R_ondiibbb(double noundef %477, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %480, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %481, ptr %10, align 8, !tbaa !13
  %482 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 11
  %483 = load i32, ptr %482, align 4, !tbaa !41
  %484 = icmp ne i32 %483, 0
  br i1 %484, label %485, label %551

485:                                              ; preds = %469
  %486 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 8
  %487 = load i32, ptr %486, align 4, !tbaa !49
  %488 = sitofp i32 %487 to double
  %489 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %490 = getelementptr inbounds [20 x double], ptr %489, i64 0, i64 0
  %491 = load double, ptr %490, align 8, !tbaa !13
  %492 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %493 = load i8, ptr %492, align 8, !tbaa !33, !range !29, !noundef !30
  %494 = trunc i8 %493 to i1
  %495 = call noundef double @_Z6gate_Cddbbb(double noundef %491, double noundef 0.000000e+00, i1 noundef zeroext %494, i1 noundef zeroext false, i1 noundef zeroext false)
  %496 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %497 = getelementptr inbounds [20 x double], ptr %496, i64 0, i64 0
  %498 = load double, ptr %497, align 8, !tbaa !13
  %499 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %500 = load i8, ptr %499, align 8, !tbaa !33, !range !29, !noundef !30
  %501 = trunc i8 %500 to i1
  %502 = call noundef double @_Z6gate_Cddbbb(double noundef %498, double noundef 0.000000e+00, i1 noundef zeroext %501, i1 noundef zeroext false, i1 noundef zeroext false)
  %503 = fadd double %495, %502
  %504 = fmul double %488, %503
  store double %504, ptr %11, align 8, !tbaa !13
  %505 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 23
  %506 = load i32, ptr %9, align 4, !tbaa !37
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds [20 x double], ptr %505, i64 0, i64 %507
  %509 = load double, ptr %508, align 8, !tbaa !13
  %510 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %511 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %512 = load i8, ptr %511, align 8, !tbaa !33, !range !29, !noundef !30
  %513 = trunc i8 %512 to i1
  %514 = call noundef double @_Z8drain_C_diiidbbb(double noundef %509, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %510, i1 noundef zeroext %513, i1 noundef zeroext false, i1 noundef zeroext false)
  %515 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %516 = load i32, ptr %9, align 4, !tbaa !37
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds [20 x double], ptr %515, i64 0, i64 %517
  %519 = load double, ptr %518, align 8, !tbaa !13
  %520 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %521 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %522 = load i8, ptr %521, align 8, !tbaa !33, !range !29, !noundef !30
  %523 = trunc i8 %522 to i1
  %524 = call noundef double @_Z8drain_C_diiidbbb(double noundef %519, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %520, i1 noundef zeroext %523, i1 noundef zeroext false, i1 noundef zeroext false)
  %525 = fadd double %514, %524
  store double %525, ptr %12, align 8, !tbaa !13
  %526 = load double, ptr %10, align 8, !tbaa !13
  %527 = load double, ptr %12, align 8, !tbaa !13
  %528 = load double, ptr %11, align 8, !tbaa !13
  %529 = fadd double %527, %528
  %530 = fmul double %526, %529
  store double %530, ptr %13, align 8, !tbaa !13
  %531 = load double, ptr %8, align 8, !tbaa !13
  %532 = load double, ptr %13, align 8, !tbaa !13
  %533 = call noundef double @_Z8horowitzddddi(double noundef %531, double noundef %532, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %533, ptr %14, align 8, !tbaa !13
  %534 = load double, ptr %14, align 8, !tbaa !13
  %535 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 27
  %536 = load double, ptr %535, align 8, !tbaa !45
  %537 = fadd double %536, %534
  store double %537, ptr %535, align 8, !tbaa !45
  %538 = load double, ptr %14, align 8, !tbaa !13
  %539 = fdiv double %538, 5.000000e-01
  store double %539, ptr %8, align 8, !tbaa !13
  %540 = load double, ptr %12, align 8, !tbaa !13
  %541 = load double, ptr %11, align 8, !tbaa !13
  %542 = fadd double %540, %541
  %543 = load double, ptr %15, align 8, !tbaa !13
  %544 = fmul double %542, %543
  %545 = load double, ptr %15, align 8, !tbaa !13
  %546 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 29
  %547 = getelementptr inbounds %class.powerDef, ptr %546, i32 0, i32 0
  %548 = getelementptr inbounds %class.powerComponents, ptr %547, i32 0, i32 0
  %549 = load double, ptr %548, align 8, !tbaa !46
  %550 = call double @llvm.fmuladd.f64(double %544, double %545, double %549)
  store double %550, ptr %548, align 8, !tbaa !46
  br label %606

551:                                              ; preds = %469
  %552 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 5
  %553 = load double, ptr %552, align 8, !tbaa !43
  store double %553, ptr %11, align 8, !tbaa !13
  %554 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 23
  %555 = load i32, ptr %9, align 4, !tbaa !37
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds [20 x double], ptr %554, i64 0, i64 %556
  %558 = load double, ptr %557, align 8, !tbaa !13
  %559 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %560 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %561 = load i8, ptr %560, align 8, !tbaa !33, !range !29, !noundef !30
  %562 = trunc i8 %561 to i1
  %563 = call noundef double @_Z8drain_C_diiidbbb(double noundef %558, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %559, i1 noundef zeroext %562, i1 noundef zeroext false, i1 noundef zeroext false)
  %564 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 22
  %565 = load i32, ptr %9, align 4, !tbaa !37
  %566 = sext i32 %565 to i64
  %567 = getelementptr inbounds [20 x double], ptr %564, i64 0, i64 %566
  %568 = load double, ptr %567, align 8, !tbaa !13
  %569 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %570 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %571 = load i8, ptr %570, align 8, !tbaa !33, !range !29, !noundef !30
  %572 = trunc i8 %571 to i1
  %573 = call noundef double @_Z8drain_C_diiidbbb(double noundef %568, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %569, i1 noundef zeroext %572, i1 noundef zeroext false, i1 noundef zeroext false)
  %574 = fadd double %563, %573
  store double %574, ptr %12, align 8, !tbaa !13
  %575 = load double, ptr %10, align 8, !tbaa !13
  %576 = load double, ptr %12, align 8, !tbaa !13
  %577 = load double, ptr %11, align 8, !tbaa !13
  %578 = fadd double %576, %577
  %579 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 6
  %580 = load double, ptr %579, align 8, !tbaa !44
  %581 = load double, ptr %11, align 8, !tbaa !13
  %582 = fmul double %580, %581
  %583 = fdiv double %582, 2.000000e+00
  %584 = call double @llvm.fmuladd.f64(double %575, double %578, double %583)
  store double %584, ptr %13, align 8, !tbaa !13
  %585 = load double, ptr %8, align 8, !tbaa !13
  %586 = load double, ptr %13, align 8, !tbaa !13
  %587 = call noundef double @_Z8horowitzddddi(double noundef %585, double noundef %586, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %587, ptr %14, align 8, !tbaa !13
  %588 = load double, ptr %14, align 8, !tbaa !13
  %589 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 27
  %590 = load double, ptr %589, align 8, !tbaa !45
  %591 = fadd double %590, %588
  store double %591, ptr %589, align 8, !tbaa !45
  %592 = load double, ptr %14, align 8, !tbaa !13
  %593 = fdiv double %592, 5.000000e-01
  %594 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 1
  store double %593, ptr %594, align 8, !tbaa !12
  %595 = load double, ptr %12, align 8, !tbaa !13
  %596 = load double, ptr %11, align 8, !tbaa !13
  %597 = fadd double %595, %596
  %598 = load double, ptr %15, align 8, !tbaa !13
  %599 = fmul double %597, %598
  %600 = load double, ptr %15, align 8, !tbaa !13
  %601 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 29
  %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 !46
  %605 = call double @llvm.fmuladd.f64(double %599, double %600, double %604)
  store double %605, ptr %603, align 8, !tbaa !46
  br label %606

606:                                              ; preds = %551, %485
  br label %607

607:                                              ; preds = %606, %322
  %608 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 11
  %609 = load i32, ptr %608, align 4, !tbaa !41
  %610 = icmp ne i32 %609, 0
  br i1 %610, label %611, label %906

611:                                              ; preds = %607
  %612 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 11
  %613 = load i32, ptr %612, align 4, !tbaa !41
  %614 = icmp eq i32 %613, 2
  br i1 %614, label %615, label %676

615:                                              ; preds = %611
  %616 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %617 = getelementptr inbounds [20 x double], ptr %616, i64 0, i64 0
  %618 = load double, ptr %617, align 8, !tbaa !13
  %619 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %620 = load i8, ptr %619, align 8, !tbaa !33, !range !29, !noundef !30
  %621 = trunc i8 %620 to i1
  %622 = call noundef double @_Z7tr_R_ondiibbb(double noundef %618, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %621, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %622, ptr %10, align 8, !tbaa !13
  %623 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %624 = getelementptr inbounds [20 x double], ptr %623, i64 0, i64 1
  %625 = load double, ptr %624, align 8, !tbaa !13
  %626 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %627 = getelementptr inbounds [20 x double], ptr %626, i64 0, i64 1
  %628 = load double, ptr %627, align 8, !tbaa !13
  %629 = fadd double %625, %628
  %630 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %631 = load i8, ptr %630, align 8, !tbaa !33, !range !29, !noundef !30
  %632 = trunc i8 %631 to i1
  %633 = call noundef double @_Z6gate_Cddbbb(double noundef %629, double noundef 0.000000e+00, i1 noundef zeroext %632, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %633, ptr %11, align 8, !tbaa !13
  %634 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %635 = getelementptr inbounds [20 x double], ptr %634, i64 0, i64 0
  %636 = load double, ptr %635, align 8, !tbaa !13
  %637 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %638 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %639 = load i8, ptr %638, align 8, !tbaa !33, !range !29, !noundef !30
  %640 = trunc i8 %639 to i1
  %641 = call noundef double @_Z8drain_C_diiidbbb(double noundef %636, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %637, i1 noundef zeroext %640, i1 noundef zeroext false, i1 noundef zeroext false)
  %642 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %643 = getelementptr inbounds [20 x double], ptr %642, i64 0, i64 0
  %644 = load double, ptr %643, align 8, !tbaa !13
  %645 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %646 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %647 = load i8, ptr %646, align 8, !tbaa !33, !range !29, !noundef !30
  %648 = trunc i8 %647 to i1
  %649 = call noundef double @_Z8drain_C_diiidbbb(double noundef %644, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %645, i1 noundef zeroext %648, i1 noundef zeroext false, i1 noundef zeroext false)
  %650 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %641, double %649)
  store double %650, ptr %12, align 8, !tbaa !13
  %651 = load double, ptr %10, align 8, !tbaa !13
  %652 = load double, ptr %12, align 8, !tbaa !13
  %653 = load double, ptr %11, align 8, !tbaa !13
  %654 = fadd double %652, %653
  %655 = fmul double %651, %654
  store double %655, ptr %13, align 8, !tbaa !13
  %656 = load double, ptr %7, align 8, !tbaa !13
  %657 = load double, ptr %13, align 8, !tbaa !13
  %658 = call noundef double @_Z8horowitzddddi(double noundef %656, double noundef %657, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %658, ptr %14, align 8, !tbaa !13
  %659 = load double, ptr %14, align 8, !tbaa !13
  %660 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 26
  %661 = load double, ptr %660, align 8, !tbaa !35
  %662 = fadd double %661, %659
  store double %662, ptr %660, align 8, !tbaa !35
  %663 = load double, ptr %14, align 8, !tbaa !13
  %664 = fdiv double %663, 5.000000e-01
  store double %664, ptr %7, align 8, !tbaa !13
  %665 = load double, ptr %12, align 8, !tbaa !13
  %666 = load double, ptr %11, align 8, !tbaa !13
  %667 = fadd double %665, %666
  %668 = load double, ptr %15, align 8, !tbaa !13
  %669 = fmul double %667, %668
  %670 = load double, ptr %15, align 8, !tbaa !13
  %671 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 30
  %672 = getelementptr inbounds %class.powerDef, ptr %671, i32 0, i32 0
  %673 = getelementptr inbounds %class.powerComponents, ptr %672, i32 0, i32 0
  %674 = load double, ptr %673, align 8, !tbaa !50
  %675 = call double @llvm.fmuladd.f64(double %669, double %670, double %674)
  store double %675, ptr %673, align 8, !tbaa !50
  br label %737

676:                                              ; preds = %611
  %677 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %678 = getelementptr inbounds [20 x double], ptr %677, i64 0, i64 0
  %679 = load double, ptr %678, align 8, !tbaa !13
  %680 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %681 = load i8, ptr %680, align 8, !tbaa !33, !range !29, !noundef !30
  %682 = trunc i8 %681 to i1
  %683 = call noundef double @_Z7tr_R_ondiibbb(double noundef %679, i32 noundef 1, i32 noundef 3, i1 noundef zeroext %682, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %683, ptr %10, align 8, !tbaa !13
  %684 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %685 = getelementptr inbounds [20 x double], ptr %684, i64 0, i64 1
  %686 = load double, ptr %685, align 8, !tbaa !13
  %687 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %688 = getelementptr inbounds [20 x double], ptr %687, i64 0, i64 1
  %689 = load double, ptr %688, align 8, !tbaa !13
  %690 = fadd double %686, %689
  %691 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %692 = load i8, ptr %691, align 8, !tbaa !33, !range !29, !noundef !30
  %693 = trunc i8 %692 to i1
  %694 = call noundef double @_Z6gate_Cddbbb(double noundef %690, double noundef 0.000000e+00, i1 noundef zeroext %693, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %694, ptr %11, align 8, !tbaa !13
  %695 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %696 = getelementptr inbounds [20 x double], ptr %695, i64 0, i64 0
  %697 = load double, ptr %696, align 8, !tbaa !13
  %698 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %699 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %700 = load i8, ptr %699, align 8, !tbaa !33, !range !29, !noundef !30
  %701 = trunc i8 %700 to i1
  %702 = call noundef double @_Z8drain_C_diiidbbb(double noundef %697, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %698, i1 noundef zeroext %701, i1 noundef zeroext false, i1 noundef zeroext false)
  %703 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %704 = getelementptr inbounds [20 x double], ptr %703, i64 0, i64 0
  %705 = load double, ptr %704, align 8, !tbaa !13
  %706 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %707 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %708 = load i8, ptr %707, align 8, !tbaa !33, !range !29, !noundef !30
  %709 = trunc i8 %708 to i1
  %710 = call noundef double @_Z8drain_C_diiidbbb(double noundef %705, i32 noundef 1, i32 noundef 3, i32 noundef 1, double noundef %706, i1 noundef zeroext %709, i1 noundef zeroext false, i1 noundef zeroext false)
  %711 = call double @llvm.fmuladd.f64(double 3.000000e+00, double %702, double %710)
  store double %711, ptr %12, align 8, !tbaa !13
  %712 = load double, ptr %10, align 8, !tbaa !13
  %713 = load double, ptr %12, align 8, !tbaa !13
  %714 = load double, ptr %11, align 8, !tbaa !13
  %715 = fadd double %713, %714
  %716 = fmul double %712, %715
  store double %716, ptr %13, align 8, !tbaa !13
  %717 = load double, ptr %8, align 8, !tbaa !13
  %718 = load double, ptr %13, align 8, !tbaa !13
  %719 = call noundef double @_Z8horowitzddddi(double noundef %717, double noundef %718, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %719, ptr %14, align 8, !tbaa !13
  %720 = load double, ptr %14, align 8, !tbaa !13
  %721 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 27
  %722 = load double, ptr %721, align 8, !tbaa !45
  %723 = fadd double %722, %720
  store double %723, ptr %721, align 8, !tbaa !45
  %724 = load double, ptr %14, align 8, !tbaa !13
  %725 = fdiv double %724, 5.000000e-01
  store double %725, ptr %8, align 8, !tbaa !13
  %726 = load double, ptr %12, align 8, !tbaa !13
  %727 = load double, ptr %11, align 8, !tbaa !13
  %728 = fadd double %726, %727
  %729 = load double, ptr %15, align 8, !tbaa !13
  %730 = fmul double %728, %729
  %731 = load double, ptr %15, align 8, !tbaa !13
  %732 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 30
  %733 = getelementptr inbounds %class.powerDef, ptr %732, i32 0, i32 0
  %734 = getelementptr inbounds %class.powerComponents, ptr %733, i32 0, i32 0
  %735 = load double, ptr %734, align 8, !tbaa !50
  %736 = call double @llvm.fmuladd.f64(double %730, double %731, double %735)
  store double %736, ptr %734, align 8, !tbaa !50
  br label %737

737:                                              ; preds = %676, %615
  store i32 1, ptr %9, align 4, !tbaa !37
  br label %738

738:                                              ; preds = %826, %737
  %739 = load i32, ptr %9, align 4, !tbaa !37
  %740 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 15
  %741 = load i32, ptr %740, align 4, !tbaa !51
  %742 = sub nsw i32 %741, 1
  %743 = icmp slt i32 %739, %742
  br i1 %743, label %744, label %829

744:                                              ; preds = %738
  %745 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %746 = load i32, ptr %9, align 4, !tbaa !37
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds [20 x double], ptr %745, i64 0, i64 %747
  %749 = load double, ptr %748, align 8, !tbaa !13
  %750 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %751 = load i8, ptr %750, align 8, !tbaa !33, !range !29, !noundef !30
  %752 = trunc i8 %751 to i1
  %753 = call noundef double @_Z7tr_R_ondiibbb(double noundef %749, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %752, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %753, ptr %10, align 8, !tbaa !13
  %754 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %755 = load i32, ptr %9, align 4, !tbaa !37
  %756 = add nsw i32 %755, 1
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds [20 x double], ptr %754, i64 0, i64 %757
  %759 = load double, ptr %758, align 8, !tbaa !13
  %760 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %761 = load i32, ptr %9, align 4, !tbaa !37
  %762 = add nsw i32 %761, 1
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds [20 x double], ptr %760, i64 0, i64 %763
  %765 = load double, ptr %764, align 8, !tbaa !13
  %766 = fadd double %759, %765
  %767 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %768 = load i8, ptr %767, align 8, !tbaa !33, !range !29, !noundef !30
  %769 = trunc i8 %768 to i1
  %770 = call noundef double @_Z6gate_Cddbbb(double noundef %766, double noundef 0.000000e+00, i1 noundef zeroext %769, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %770, ptr %11, align 8, !tbaa !13
  %771 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %772 = load i32, ptr %9, align 4, !tbaa !37
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds [20 x double], ptr %771, i64 0, i64 %773
  %775 = load double, ptr %774, align 8, !tbaa !13
  %776 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %777 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %778 = load i8, ptr %777, align 8, !tbaa !33, !range !29, !noundef !30
  %779 = trunc i8 %778 to i1
  %780 = call noundef double @_Z8drain_C_diiidbbb(double noundef %775, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %776, i1 noundef zeroext %779, i1 noundef zeroext false, i1 noundef zeroext false)
  %781 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %782 = load i32, ptr %9, align 4, !tbaa !37
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds [20 x double], ptr %781, i64 0, i64 %783
  %785 = load double, ptr %784, align 8, !tbaa !13
  %786 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %787 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %788 = load i8, ptr %787, align 8, !tbaa !33, !range !29, !noundef !30
  %789 = trunc i8 %788 to i1
  %790 = call noundef double @_Z8drain_C_diiidbbb(double noundef %785, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %786, i1 noundef zeroext %789, i1 noundef zeroext false, i1 noundef zeroext false)
  %791 = fadd double %780, %790
  store double %791, ptr %12, align 8, !tbaa !13
  %792 = load double, ptr %10, align 8, !tbaa !13
  %793 = load double, ptr %12, align 8, !tbaa !13
  %794 = load double, ptr %11, align 8, !tbaa !13
  %795 = fadd double %793, %794
  %796 = fmul double %792, %795
  store double %796, ptr %13, align 8, !tbaa !13
  %797 = load double, ptr %7, align 8, !tbaa !13
  %798 = load double, ptr %13, align 8, !tbaa !13
  %799 = call noundef double @_Z8horowitzddddi(double noundef %797, double noundef %798, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %799, ptr %14, align 8, !tbaa !13
  %800 = load double, ptr %14, align 8, !tbaa !13
  %801 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 26
  %802 = load double, ptr %801, align 8, !tbaa !35
  %803 = fadd double %802, %800
  store double %803, ptr %801, align 8, !tbaa !35
  %804 = load double, ptr %14, align 8, !tbaa !13
  %805 = fdiv double %804, 5.000000e-01
  store double %805, ptr %7, align 8, !tbaa !13
  %806 = load double, ptr %8, align 8, !tbaa !13
  %807 = load double, ptr %13, align 8, !tbaa !13
  %808 = call noundef double @_Z8horowitzddddi(double noundef %806, double noundef %807, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %808, ptr %14, align 8, !tbaa !13
  %809 = load double, ptr %14, align 8, !tbaa !13
  %810 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 27
  %811 = load double, ptr %810, align 8, !tbaa !45
  %812 = fadd double %811, %809
  store double %812, ptr %810, align 8, !tbaa !45
  %813 = load double, ptr %14, align 8, !tbaa !13
  %814 = fdiv double %813, 5.000000e-01
  store double %814, ptr %8, align 8, !tbaa !13
  %815 = load double, ptr %12, align 8, !tbaa !13
  %816 = load double, ptr %11, align 8, !tbaa !13
  %817 = fadd double %815, %816
  %818 = load double, ptr %15, align 8, !tbaa !13
  %819 = fmul double %817, %818
  %820 = load double, ptr %15, align 8, !tbaa !13
  %821 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 30
  %822 = getelementptr inbounds %class.powerDef, ptr %821, i32 0, i32 0
  %823 = getelementptr inbounds %class.powerComponents, ptr %822, i32 0, i32 0
  %824 = load double, ptr %823, align 8, !tbaa !50
  %825 = call double @llvm.fmuladd.f64(double %819, double %820, double %824)
  store double %825, ptr %823, align 8, !tbaa !50
  br label %826

826:                                              ; preds = %744
  %827 = load i32, ptr %9, align 4, !tbaa !37
  %828 = add nsw i32 %827, 1
  store i32 %828, ptr %9, align 4, !tbaa !37
  br label %738, !llvm.loop !52

829:                                              ; preds = %738
  %830 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 15
  %831 = load i32, ptr %830, align 4, !tbaa !51
  %832 = sub nsw i32 %831, 1
  store i32 %832, ptr %9, align 4, !tbaa !37
  %833 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 5
  %834 = load double, ptr %833, align 8, !tbaa !43
  store double %834, ptr %11, align 8, !tbaa !13
  %835 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %836 = load i32, ptr %9, align 4, !tbaa !37
  %837 = sext i32 %836 to i64
  %838 = getelementptr inbounds [20 x double], ptr %835, i64 0, i64 %837
  %839 = load double, ptr %838, align 8, !tbaa !13
  %840 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %841 = load i8, ptr %840, align 8, !tbaa !33, !range !29, !noundef !30
  %842 = trunc i8 %841 to i1
  %843 = call noundef double @_Z7tr_R_ondiibbb(double noundef %839, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %842, i1 noundef zeroext false, i1 noundef zeroext false)
  store double %843, ptr %10, align 8, !tbaa !13
  %844 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 25
  %845 = load i32, ptr %9, align 4, !tbaa !37
  %846 = sext i32 %845 to i64
  %847 = getelementptr inbounds [20 x double], ptr %844, i64 0, i64 %846
  %848 = load double, ptr %847, align 8, !tbaa !13
  %849 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %850 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %851 = load i8, ptr %850, align 8, !tbaa !33, !range !29, !noundef !30
  %852 = trunc i8 %851 to i1
  %853 = call noundef double @_Z8drain_C_diiidbbb(double noundef %848, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %849, i1 noundef zeroext %852, i1 noundef zeroext false, i1 noundef zeroext false)
  %854 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 24
  %855 = load i32, ptr %9, align 4, !tbaa !37
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds [20 x double], ptr %854, i64 0, i64 %856
  %858 = load double, ptr %857, align 8, !tbaa !13
  %859 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 39), align 8, !tbaa !34
  %860 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 31
  %861 = load i8, ptr %860, align 8, !tbaa !33, !range !29, !noundef !30
  %862 = trunc i8 %861 to i1
  %863 = call noundef double @_Z8drain_C_diiidbbb(double noundef %858, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %859, i1 noundef zeroext %862, i1 noundef zeroext false, i1 noundef zeroext false)
  %864 = fadd double %853, %863
  store double %864, ptr %12, align 8, !tbaa !13
  %865 = load double, ptr %10, align 8, !tbaa !13
  %866 = load double, ptr %12, align 8, !tbaa !13
  %867 = load double, ptr %11, align 8, !tbaa !13
  %868 = fadd double %866, %867
  %869 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 6
  %870 = load double, ptr %869, align 8, !tbaa !44
  %871 = load double, ptr %11, align 8, !tbaa !13
  %872 = fmul double %870, %871
  %873 = fdiv double %872, 2.000000e+00
  %874 = call double @llvm.fmuladd.f64(double %865, double %868, double %873)
  store double %874, ptr %13, align 8, !tbaa !13
  %875 = load double, ptr %7, align 8, !tbaa !13
  %876 = load double, ptr %13, align 8, !tbaa !13
  %877 = call noundef double @_Z8horowitzddddi(double noundef %875, double noundef %876, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %877, ptr %14, align 8, !tbaa !13
  %878 = load double, ptr %14, align 8, !tbaa !13
  %879 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 26
  %880 = load double, ptr %879, align 8, !tbaa !35
  %881 = fadd double %880, %878
  store double %881, ptr %879, align 8, !tbaa !35
  %882 = load double, ptr %14, align 8, !tbaa !13
  %883 = fdiv double %882, 5.000000e-01
  %884 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 0
  store double %883, ptr %884, align 8, !tbaa !9
  %885 = load double, ptr %8, align 8, !tbaa !13
  %886 = load double, ptr %13, align 8, !tbaa !13
  %887 = call noundef double @_Z8horowitzddddi(double noundef %885, double noundef %886, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  store double %887, ptr %14, align 8, !tbaa !13
  %888 = load double, ptr %14, align 8, !tbaa !13
  %889 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 27
  %890 = load double, ptr %889, align 8, !tbaa !45
  %891 = fadd double %890, %888
  store double %891, ptr %889, align 8, !tbaa !45
  %892 = load double, ptr %14, align 8, !tbaa !13
  %893 = fdiv double %892, 5.000000e-01
  %894 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 1
  store double %893, ptr %894, align 8, !tbaa !12
  %895 = load double, ptr %12, align 8, !tbaa !13
  %896 = load double, ptr %11, align 8, !tbaa !13
  %897 = fadd double %895, %896
  %898 = load double, ptr %15, align 8, !tbaa !13
  %899 = fmul double %897, %898
  %900 = load double, ptr %15, align 8, !tbaa !13
  %901 = getelementptr inbounds %class.PredecBlk, ptr %18, i32 0, i32 30
  %902 = getelementptr inbounds %class.powerDef, ptr %901, i32 0, i32 0
  %903 = getelementptr inbounds %class.powerComponents, ptr %902, i32 0, i32 0
  %904 = load double, ptr %903, align 8, !tbaa !50
  %905 = call double @llvm.fmuladd.f64(double %899, double %900, double %904)
  store double %905, ptr %903, align 8, !tbaa !50
  br label %906

906:                                              ; preds = %829, %607
  br label %907

907:                                              ; preds = %906, %3
  %908 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 0
  %909 = load double, ptr %908, align 8, !tbaa !9
  %910 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 1
  %911 = load double, ptr %910, align 8, !tbaa !12
  %912 = fcmp ogt double %909, %911
  br i1 %912, label %913, label %916

913:                                              ; preds = %907
  %914 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 0
  %915 = load double, ptr %914, align 8, !tbaa !9
  br label %919

916:                                              ; preds = %907
  %917 = getelementptr inbounds %"struct.std::pair", ptr %4, i32 0, i32 1
  %918 = load double, ptr %917, align 8, !tbaa !12
  br label %919

919:                                              ; preds = %916, %913
  %920 = phi double [ %915, %913 ], [ %918, %916 ]
  %921 = getelementptr inbounds %class.Component, ptr %18, i32 0, i32 3
  store double %920, ptr %921, align 8, !tbaa !53
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  %922 = load { double, double }, ptr %4, align 8
  ret { double, double } %922
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIddEC2IddTnNSt9enable_ifIXsr6__and_ISt37__is_implicitly_default_constructibleIT_ES3_IT0_EEE5valueEbE4typeELb1EEEv(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #4 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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, !11, i64 0}
!10 = !{!"_ZTSSt4pairIddE", !11, i64 0, !11, i64 8}
!11 = !{!"double", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!11, !11, i64 0}
!14 = !{!15, !11, i64 936}
!15 = !{!"_ZTS19TechnologyParameter", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !11, i64 184, !11, i64 192, !11, i64 200, !11, i64 208, !11, i64 216, !11, i64 224, !11, i64 232, !11, i64 240, !11, i64 248, !11, i64 256, !11, i64 264, !11, i64 272, !11, i64 280, !11, i64 288, !11, i64 296, !11, i64 304, !11, i64 312, !11, i64 320, !11, i64 328, !11, i64 336, !11, i64 344, !16, i64 352, !17, i64 360, !17, i64 528, !17, i64 696, !17, i64 864, !17, i64 1032, !18, i64 1200, !18, i64 1264, !18, i64 1328, !19, i64 1392, !20, i64 1416, !20, i64 1464, !20, i64 1512}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160}
!18 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56}
!19 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !11, i64 0, !11, i64 8, !11, i64 16}
!20 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}
!21 = !{!22, !27, i64 288}
!22 = !{!"_ZTS9PredecBlk", !23, i64 0, !6, i64 280, !27, i64 288, !28, i64 292, !11, i64 296, !11, i64 304, !28, i64 312, !28, i64 316, !27, i64 320, !28, i64 324, !28, i64 328, !28, i64 332, !28, i64 336, !28, i64 340, !28, i64 344, !28, i64 348, !28, i64 352, !28, i64 356, !7, i64 360, !7, i64 520, !7, i64 680, !7, i64 840, !7, i64 1000, !7, i64 1160, !11, i64 1320, !11, i64 1328, !25, i64 1336, !25, i64 1456, !25, i64 1576, !27, i64 1696}
!23 = !{!"_ZTS9Component", !24, i64 0, !25, i64 24, !25, i64 144, !11, i64 264, !11, i64 272}
!24 = !{!"_ZTS4Area", !11, i64 0, !11, i64 8, !11, i64 16}
!25 = !{!"_ZTS8powerDef", !26, i64 0, !26, i64 40, !26, i64 80}
!26 = !{!"_ZTS15powerComponents", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32}
!27 = !{!"bool", !7, i64 0}
!28 = !{!"int", !7, i64 0}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!22, !27, i64 320}
!32 = !{!22, !28, i64 328}
!33 = !{!22, !27, i64 1696}
!34 = !{!15, !11, i64 312}
!35 = !{!22, !11, i64 1320}
!36 = !{!22, !11, i64 1336}
!37 = !{!28, !28, i64 0}
!38 = !{!22, !28, i64 332}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = !{!22, !28, i64 324}
!42 = !{!22, !28, i64 312}
!43 = !{!22, !11, i64 296}
!44 = !{!22, !11, i64 304}
!45 = !{!22, !11, i64 1328}
!46 = !{!22, !11, i64 1456}
!47 = !{!22, !28, i64 336}
!48 = distinct !{!48, !40}
!49 = !{!22, !28, i64 316}
!50 = !{!22, !11, i64 1576}
!51 = !{!22, !28, i64 340}
!52 = distinct !{!52, !40}
!53 = !{!23, !11, i64 264}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%class.TechnologyParameter = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i64, %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::ScalingFactor", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType" }
%"class.TechnologyParameter::DeviceType" = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::InterconnectType" = type { double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::ScalingFactor" = type { double, double, double }
%"class.TechnologyParameter::MemoryType" = type { double, double, double, double, double, double }
%"struct.std::pair" = type { double, double }

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local { double, double } @_ZN9PredecBlk14compute_delaysESt4pairIddE(ptr noundef nonnull align 8 dereferenceable(1697) %0, double %1, double %2) local_unnamed_addr #2 align 2 {
  %4 = alloca %"struct.std::pair", align 8
  call void @_ZNSt4pairIddEC2IddTnNSt9enable_ifIXsr6__and_ISt37__is_implicitly_default_constructibleIT_ES3_IT0_EEE5valueEbE4typeELb1EEEv(ptr noundef nonnull align 8 dereferenceable(16) %4)
  %5 = getelementptr inbounds i8, ptr %4, i64 8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %4, i8 0, i64 16, i1 false)
  %6 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 936), align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 288
  %8 = load i8, ptr %7, align 8, !tbaa !15, !range !24, !noundef !25
  %9 = trunc nuw i8 %8 to i1
  br i1 %9, label %10, label %483

10:                                               ; preds = %3
  %11 = getelementptr inbounds i8, ptr %0, i64 320
  %12 = load i8, ptr %11, align 8, !tbaa !26, !range !24, !noundef !25
  %13 = trunc nuw i8 %12 to i1
  %14 = getelementptr inbounds i8, ptr %0, i64 328
  %15 = load i32, ptr %14, align 8
  %16 = icmp eq i32 %15, 2
  %or.cond = select i1 %13, i1 true, i1 %16
  br i1 %or.cond, label %17, label %162

17:                                               ; preds = %10
  %18 = getelementptr inbounds i8, ptr %0, i64 360
  %19 = load double, ptr %18, align 8, !tbaa !27
  %20 = getelementptr inbounds i8, ptr %0, i64 1696
  %21 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %22 = trunc nuw i8 %21 to i1
  %23 = call noundef double @_Z7tr_R_ondiibbb(double noundef %19, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %22, i1 noundef zeroext false, i1 noundef zeroext false)
  %24 = getelementptr inbounds i8, ptr %0, i64 368
  %25 = load double, ptr %24, align 8, !tbaa !27
  %26 = getelementptr inbounds i8, ptr %0, i64 520
  %27 = getelementptr inbounds i8, ptr %0, i64 528
  %28 = load double, ptr %27, align 8, !tbaa !27
  %29 = fadd double %25, %28
  %30 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %31 = trunc nuw i8 %30 to i1
  %32 = call noundef double @_Z6gate_Cddbbb(double noundef %29, double noundef 0.000000e+00, i1 noundef zeroext %31, i1 noundef zeroext false, i1 noundef zeroext false)
  %33 = load double, ptr %26, align 8, !tbaa !27
  %34 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %35 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %36 = trunc nuw i8 %35 to i1
  %37 = call noundef double @_Z8drain_C_diiidbbb(double noundef %33, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %34, i1 noundef zeroext %36, i1 noundef zeroext false, i1 noundef zeroext false)
  %38 = load double, ptr %18, align 8, !tbaa !27
  %39 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %40 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %41 = trunc nuw i8 %40 to i1
  %42 = call noundef double @_Z8drain_C_diiidbbb(double noundef %38, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %39, i1 noundef zeroext %41, i1 noundef zeroext false, i1 noundef zeroext false)
  %43 = call double @llvm.fmuladd.f64(double %37, double 2.000000e+00, double %42)
  %44 = fadd double %32, %43
  %45 = fmul double %23, %44
  %46 = call noundef double @_Z8horowitzddddi(double noundef %1, double noundef %45, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %47 = getelementptr inbounds i8, ptr %0, i64 1320
  %48 = load double, ptr %47, align 8, !tbaa !30
  %49 = fadd double %46, %48
  store double %49, ptr %47, align 8, !tbaa !30
  %50 = fmul double %6, %44
  %51 = getelementptr inbounds i8, ptr %0, i64 1336
  %52 = load double, ptr %51, align 8, !tbaa !31
  %53 = call double @llvm.fmuladd.f64(double %50, double %6, double %52)
  %54 = getelementptr inbounds i8, ptr %0, i64 332
  %.0198 = fmul double %46, 2.000000e+00
  store double %53, ptr %51, align 8, !tbaa !31
  %55 = load i32, ptr %54, align 4, !tbaa !32
  %56 = icmp sgt i32 %55, 2
  br i1 %56, label %.lr.ph, label %.._crit_edge_crit_edge

.._crit_edge_crit_edge:                           ; preds = %17
  %57 = add nsw i32 %55, -1
  %.pre234 = sext i32 %57 to i64
  br label %._crit_edge

.lr.ph:                                           ; preds = %17, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 1, %17 ]
  %.0200 = phi double [ %.0, %.lr.ph ], [ %.0198, %17 ]
  %58 = getelementptr inbounds [20 x double], ptr %18, i64 0, i64 %indvars.iv
  %59 = load double, ptr %58, align 8, !tbaa !27
  %60 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %61 = trunc nuw i8 %60 to i1
  %62 = call noundef double @_Z7tr_R_ondiibbb(double noundef %59, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %61, i1 noundef zeroext false, i1 noundef zeroext false)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %63 = getelementptr inbounds [20 x double], ptr %18, i64 0, i64 %indvars.iv.next
  %64 = load double, ptr %63, align 8, !tbaa !27
  %65 = getelementptr inbounds [20 x double], ptr %26, i64 0, i64 %indvars.iv.next
  %66 = load double, ptr %65, align 8, !tbaa !27
  %67 = fadd double %64, %66
  %68 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %69 = trunc nuw i8 %68 to i1
  %70 = call noundef double @_Z6gate_Cddbbb(double noundef %67, double noundef 0.000000e+00, i1 noundef zeroext %69, i1 noundef zeroext false, i1 noundef zeroext false)
  %71 = getelementptr inbounds [20 x double], ptr %26, i64 0, i64 %indvars.iv
  %72 = load double, ptr %71, align 8, !tbaa !27
  %73 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %74 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %75 = trunc nuw i8 %74 to i1
  %76 = call noundef double @_Z8drain_C_diiidbbb(double noundef %72, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %73, i1 noundef zeroext %75, i1 noundef zeroext false, i1 noundef zeroext false)
  %77 = load double, ptr %58, align 8, !tbaa !27
  %78 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %79 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %80 = trunc nuw i8 %79 to i1
  %81 = call noundef double @_Z8drain_C_diiidbbb(double noundef %77, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %78, i1 noundef zeroext %80, i1 noundef zeroext false, i1 noundef zeroext false)
  %82 = fadd double %76, %81
  %83 = fadd double %70, %82
  %84 = fmul double %62, %83
  %85 = call noundef double @_Z8horowitzddddi(double noundef %.0200, double noundef %84, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %86 = load double, ptr %47, align 8, !tbaa !30
  %87 = fadd double %85, %86
  store double %87, ptr %47, align 8, !tbaa !30
  %88 = fmul double %6, %83
  %89 = load double, ptr %51, align 8, !tbaa !31
  %90 = call double @llvm.fmuladd.f64(double %88, double %6, double %89)
  %.0 = fmul double %85, 2.000000e+00
  store double %90, ptr %51, align 8, !tbaa !31
  %91 = load i32, ptr %54, align 4, !tbaa !32
  %92 = add nsw i32 %91, -1
  %93 = sext i32 %92 to i64
  %94 = icmp slt i64 %indvars.iv.next, %93
  br i1 %94, label %.lr.ph, label %._crit_edge, !llvm.loop !33

._crit_edge:                                      ; preds = %.lr.ph, %.._crit_edge_crit_edge
  %.pre-phi = phi i64 [ %.pre234, %.._crit_edge_crit_edge ], [ %93, %.lr.ph ]
  %.0.lcssa = phi double [ %.0198, %.._crit_edge_crit_edge ], [ %.0, %.lr.ph ]
  %95 = getelementptr inbounds [20 x double], ptr %18, i64 0, i64 %.pre-phi
  %96 = load double, ptr %95, align 8, !tbaa !27
  %97 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %98 = trunc nuw i8 %97 to i1
  %99 = call noundef double @_Z7tr_R_ondiibbb(double noundef %96, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %98, i1 noundef zeroext false, i1 noundef zeroext false)
  %100 = getelementptr inbounds i8, ptr %0, i64 324
  %101 = load i32, ptr %100, align 4, !tbaa !35
  %.not = icmp eq i32 %101, 0
  %102 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %103 = trunc nuw i8 %102 to i1
  br i1 %.not, label %136, label %104

104:                                              ; preds = %._crit_edge
  %105 = getelementptr inbounds i8, ptr %0, i64 312
  %106 = load i32, ptr %105, align 8, !tbaa !36
  %107 = sitofp i32 %106 to double
  %108 = getelementptr inbounds i8, ptr %0, i64 1000
  %109 = load double, ptr %108, align 8, !tbaa !27
  %110 = call noundef double @_Z6gate_Cddbbb(double noundef %109, double noundef 0.000000e+00, i1 noundef zeroext %103, i1 noundef zeroext false, i1 noundef zeroext false)
  %111 = getelementptr inbounds i8, ptr %0, i64 1160
  %112 = load double, ptr %111, align 8, !tbaa !27
  %113 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %114 = trunc nuw i8 %113 to i1
  %115 = call noundef double @_Z6gate_Cddbbb(double noundef %112, double noundef 0.000000e+00, i1 noundef zeroext %114, i1 noundef zeroext false, i1 noundef zeroext false)
  %116 = fadd double %110, %115
  %117 = fmul double %116, %107
  %118 = getelementptr inbounds [20 x double], ptr %26, i64 0, i64 %.pre-phi
  %119 = load double, ptr %118, align 8, !tbaa !27
  %120 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %121 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %122 = trunc nuw i8 %121 to i1
  %123 = call noundef double @_Z8drain_C_diiidbbb(double noundef %119, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %120, i1 noundef zeroext %122, i1 noundef zeroext false, i1 noundef zeroext false)
  %124 = load double, ptr %95, align 8, !tbaa !27
  %125 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %126 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %127 = trunc nuw i8 %126 to i1
  %128 = call noundef double @_Z8drain_C_diiidbbb(double noundef %124, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %125, i1 noundef zeroext %127, i1 noundef zeroext false, i1 noundef zeroext false)
  %129 = fadd double %123, %128
  %130 = fadd double %117, %129
  %131 = fmul double %99, %130
  %132 = call noundef double @_Z8horowitzddddi(double noundef %.0.lcssa, double noundef %131, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %133 = load double, ptr %47, align 8, !tbaa !30
  %134 = fadd double %132, %133
  store double %134, ptr %47, align 8, !tbaa !30
  %135 = fmul double %132, 2.000000e+00
  br label %.sink.split

136:                                              ; preds = %._crit_edge
  %137 = getelementptr inbounds i8, ptr %0, i64 296
  %138 = load double, ptr %137, align 8, !tbaa !37
  %139 = getelementptr inbounds [20 x double], ptr %26, i64 0, i64 %.pre-phi
  %140 = load double, ptr %139, align 8, !tbaa !27
  %141 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %142 = call noundef double @_Z8drain_C_diiidbbb(double noundef %140, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %141, i1 noundef zeroext %103, i1 noundef zeroext false, i1 noundef zeroext false)
  %143 = load double, ptr %95, align 8, !tbaa !27
  %144 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %145 = load i8, ptr %20, align 8, !tbaa !28, !range !24, !noundef !25
  %146 = trunc nuw i8 %145 to i1
  %147 = call noundef double @_Z8drain_C_diiidbbb(double noundef %143, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %144, i1 noundef zeroext %146, i1 noundef zeroext false, i1 noundef zeroext false)
  %148 = fadd double %142, %147
  %149 = fadd double %138, %148
  %150 = getelementptr inbounds i8, ptr %0, i64 304
  %151 = load double, ptr %150, align 8, !tbaa !38
  %152 = fmul double %138, %151
  %153 = fmul double %152, 5.000000e-01
  %154 = call double @llvm.fmuladd.f64(double %99, double %149, double %153)
  %155 = call noundef double @_Z8horowitzddddi(double noundef %.0.lcssa, double noundef %154, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %156 = load double, ptr %47, align 8, !tbaa !30
  %157 = fadd double %155, %156
  store double %157, ptr %47, align 8, !tbaa !30
  %158 = fmul double %155, 2.000000e+00
  store double %158, ptr %4, align 8, !tbaa !39
  br label %.sink.split

.sink.split:                                      ; preds = %136, %104
  %.sink = phi double [ %130, %104 ], [ %149, %136 ]
  %.1.ph = phi double [ %135, %104 ], [ %.0.lcssa, %136 ]
  %159 = fmul double %6, %.sink
  %160 = load double, ptr %51, align 8, !tbaa !31
  %161 = call double @llvm.fmuladd.f64(double %159, double %6, double %160)
  store double %161, ptr %51, align 8, !tbaa !31
  br label %162

162:                                              ; preds = %.sink.split, %10
  %.1 = phi double [ %1, %10 ], [ %.1.ph, %.sink.split ]
  %163 = load i8, ptr %11, align 8, !tbaa !26, !range !24, !noundef !25
  %164 = trunc nuw i8 %163 to i1
  %165 = load i32, ptr %14, align 8
  %166 = icmp eq i32 %165, 3
  %or.cond195 = select i1 %164, i1 true, i1 %166
  br i1 %or.cond195, label %167, label %312

167:                                              ; preds = %162
  %168 = getelementptr inbounds i8, ptr %0, i64 680
  %169 = load double, ptr %168, align 8, !tbaa !27
  %170 = getelementptr inbounds i8, ptr %0, i64 1696
  %171 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %172 = trunc nuw i8 %171 to i1
  %173 = call noundef double @_Z7tr_R_ondiibbb(double noundef %169, i32 noundef 1, i32 noundef 3, i1 noundef zeroext %172, i1 noundef zeroext false, i1 noundef zeroext false)
  %174 = getelementptr inbounds i8, ptr %0, i64 688
  %175 = load double, ptr %174, align 8, !tbaa !27
  %176 = getelementptr inbounds i8, ptr %0, i64 840
  %177 = getelementptr inbounds i8, ptr %0, i64 848
  %178 = load double, ptr %177, align 8, !tbaa !27
  %179 = fadd double %175, %178
  %180 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %181 = trunc nuw i8 %180 to i1
  %182 = call noundef double @_Z6gate_Cddbbb(double noundef %179, double noundef 0.000000e+00, i1 noundef zeroext %181, i1 noundef zeroext false, i1 noundef zeroext false)
  %183 = load double, ptr %176, align 8, !tbaa !27
  %184 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %185 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %186 = trunc nuw i8 %185 to i1
  %187 = call noundef double @_Z8drain_C_diiidbbb(double noundef %183, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %184, i1 noundef zeroext %186, i1 noundef zeroext false, i1 noundef zeroext false)
  %188 = load double, ptr %168, align 8, !tbaa !27
  %189 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %190 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %191 = trunc nuw i8 %190 to i1
  %192 = call noundef double @_Z8drain_C_diiidbbb(double noundef %188, i32 noundef 1, i32 noundef 3, i32 noundef 1, double noundef %189, i1 noundef zeroext %191, i1 noundef zeroext false, i1 noundef zeroext false)
  %193 = call double @llvm.fmuladd.f64(double %187, double 3.000000e+00, double %192)
  %194 = fadd double %182, %193
  %195 = fmul double %173, %194
  %196 = call noundef double @_Z8horowitzddddi(double noundef %2, double noundef %195, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %197 = getelementptr inbounds i8, ptr %0, i64 1328
  %198 = load double, ptr %197, align 8, !tbaa !41
  %199 = fadd double %196, %198
  store double %199, ptr %197, align 8, !tbaa !41
  %200 = fmul double %6, %194
  %201 = getelementptr inbounds i8, ptr %0, i64 1456
  %202 = load double, ptr %201, align 8, !tbaa !42
  %203 = call double @llvm.fmuladd.f64(double %200, double %6, double %202)
  %204 = getelementptr inbounds i8, ptr %0, i64 336
  %.0180202 = fmul double %196, 2.000000e+00
  store double %203, ptr %201, align 8, !tbaa !42
  %205 = load i32, ptr %204, align 8, !tbaa !43
  %206 = icmp sgt i32 %205, 2
  br i1 %206, label %.lr.ph206, label %.._crit_edge207_crit_edge

.._crit_edge207_crit_edge:                        ; preds = %167
  %207 = add nsw i32 %205, -1
  %.pre235 = sext i32 %207 to i64
  br label %._crit_edge207

.lr.ph206:                                        ; preds = %167, %.lr.ph206
  %indvars.iv227 = phi i64 [ %indvars.iv.next228, %.lr.ph206 ], [ 1, %167 ]
  %.0180204 = phi double [ %.0180, %.lr.ph206 ], [ %.0180202, %167 ]
  %208 = getelementptr inbounds [20 x double], ptr %168, i64 0, i64 %indvars.iv227
  %209 = load double, ptr %208, align 8, !tbaa !27
  %210 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %211 = trunc nuw i8 %210 to i1
  %212 = call noundef double @_Z7tr_R_ondiibbb(double noundef %209, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %211, i1 noundef zeroext false, i1 noundef zeroext false)
  %indvars.iv.next228 = add nuw nsw i64 %indvars.iv227, 1
  %213 = getelementptr inbounds [20 x double], ptr %168, i64 0, i64 %indvars.iv.next228
  %214 = load double, ptr %213, align 8, !tbaa !27
  %215 = getelementptr inbounds [20 x double], ptr %176, i64 0, i64 %indvars.iv.next228
  %216 = load double, ptr %215, align 8, !tbaa !27
  %217 = fadd double %214, %216
  %218 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %219 = trunc nuw i8 %218 to i1
  %220 = call noundef double @_Z6gate_Cddbbb(double noundef %217, double noundef 0.000000e+00, i1 noundef zeroext %219, i1 noundef zeroext false, i1 noundef zeroext false)
  %221 = getelementptr inbounds [20 x double], ptr %176, i64 0, i64 %indvars.iv227
  %222 = load double, ptr %221, align 8, !tbaa !27
  %223 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %224 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %225 = trunc nuw i8 %224 to i1
  %226 = call noundef double @_Z8drain_C_diiidbbb(double noundef %222, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %223, i1 noundef zeroext %225, i1 noundef zeroext false, i1 noundef zeroext false)
  %227 = load double, ptr %208, align 8, !tbaa !27
  %228 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %229 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %230 = trunc nuw i8 %229 to i1
  %231 = call noundef double @_Z8drain_C_diiidbbb(double noundef %227, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %228, i1 noundef zeroext %230, i1 noundef zeroext false, i1 noundef zeroext false)
  %232 = fadd double %226, %231
  %233 = fadd double %220, %232
  %234 = fmul double %212, %233
  %235 = call noundef double @_Z8horowitzddddi(double noundef %.0180204, double noundef %234, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %236 = load double, ptr %197, align 8, !tbaa !41
  %237 = fadd double %235, %236
  store double %237, ptr %197, align 8, !tbaa !41
  %238 = fmul double %6, %233
  %239 = load double, ptr %201, align 8, !tbaa !42
  %240 = call double @llvm.fmuladd.f64(double %238, double %6, double %239)
  %.0180 = fmul double %235, 2.000000e+00
  store double %240, ptr %201, align 8, !tbaa !42
  %241 = load i32, ptr %204, align 8, !tbaa !43
  %242 = add nsw i32 %241, -1
  %243 = sext i32 %242 to i64
  %244 = icmp slt i64 %indvars.iv.next228, %243
  br i1 %244, label %.lr.ph206, label %._crit_edge207, !llvm.loop !44

._crit_edge207:                                   ; preds = %.lr.ph206, %.._crit_edge207_crit_edge
  %.pre-phi236 = phi i64 [ %.pre235, %.._crit_edge207_crit_edge ], [ %243, %.lr.ph206 ]
  %.0180.lcssa = phi double [ %.0180202, %.._crit_edge207_crit_edge ], [ %.0180, %.lr.ph206 ]
  %245 = getelementptr inbounds [20 x double], ptr %168, i64 0, i64 %.pre-phi236
  %246 = load double, ptr %245, align 8, !tbaa !27
  %247 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %248 = trunc nuw i8 %247 to i1
  %249 = call noundef double @_Z7tr_R_ondiibbb(double noundef %246, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %248, i1 noundef zeroext false, i1 noundef zeroext false)
  %250 = getelementptr inbounds i8, ptr %0, i64 324
  %251 = load i32, ptr %250, align 4, !tbaa !35
  %.not189 = icmp eq i32 %251, 0
  %252 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %253 = trunc nuw i8 %252 to i1
  br i1 %.not189, label %286, label %254

254:                                              ; preds = %._crit_edge207
  %255 = getelementptr inbounds i8, ptr %0, i64 316
  %256 = load i32, ptr %255, align 4, !tbaa !45
  %257 = sitofp i32 %256 to double
  %258 = getelementptr inbounds i8, ptr %0, i64 1000
  %259 = load double, ptr %258, align 8, !tbaa !27
  %260 = call noundef double @_Z6gate_Cddbbb(double noundef %259, double noundef 0.000000e+00, i1 noundef zeroext %253, i1 noundef zeroext false, i1 noundef zeroext false)
  %261 = getelementptr inbounds i8, ptr %0, i64 1160
  %262 = load double, ptr %261, align 8, !tbaa !27
  %263 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %264 = trunc nuw i8 %263 to i1
  %265 = call noundef double @_Z6gate_Cddbbb(double noundef %262, double noundef 0.000000e+00, i1 noundef zeroext %264, i1 noundef zeroext false, i1 noundef zeroext false)
  %266 = fadd double %260, %265
  %267 = fmul double %266, %257
  %268 = getelementptr inbounds [20 x double], ptr %176, i64 0, i64 %.pre-phi236
  %269 = load double, ptr %268, align 8, !tbaa !27
  %270 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %271 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %272 = trunc nuw i8 %271 to i1
  %273 = call noundef double @_Z8drain_C_diiidbbb(double noundef %269, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %270, i1 noundef zeroext %272, i1 noundef zeroext false, i1 noundef zeroext false)
  %274 = load double, ptr %245, align 8, !tbaa !27
  %275 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %276 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %277 = trunc nuw i8 %276 to i1
  %278 = call noundef double @_Z8drain_C_diiidbbb(double noundef %274, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %275, i1 noundef zeroext %277, i1 noundef zeroext false, i1 noundef zeroext false)
  %279 = fadd double %273, %278
  %280 = fadd double %267, %279
  %281 = fmul double %249, %280
  %282 = call noundef double @_Z8horowitzddddi(double noundef %.0180.lcssa, double noundef %281, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %283 = load double, ptr %197, align 8, !tbaa !41
  %284 = fadd double %282, %283
  store double %284, ptr %197, align 8, !tbaa !41
  %285 = fmul double %282, 2.000000e+00
  br label %.sink.split247

286:                                              ; preds = %._crit_edge207
  %287 = getelementptr inbounds i8, ptr %0, i64 296
  %288 = load double, ptr %287, align 8, !tbaa !37
  %289 = getelementptr inbounds [20 x double], ptr %176, i64 0, i64 %.pre-phi236
  %290 = load double, ptr %289, align 8, !tbaa !27
  %291 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %292 = call noundef double @_Z8drain_C_diiidbbb(double noundef %290, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %291, i1 noundef zeroext %253, i1 noundef zeroext false, i1 noundef zeroext false)
  %293 = load double, ptr %245, align 8, !tbaa !27
  %294 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %295 = load i8, ptr %170, align 8, !tbaa !28, !range !24, !noundef !25
  %296 = trunc nuw i8 %295 to i1
  %297 = call noundef double @_Z8drain_C_diiidbbb(double noundef %293, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %294, i1 noundef zeroext %296, i1 noundef zeroext false, i1 noundef zeroext false)
  %298 = fadd double %292, %297
  %299 = fadd double %288, %298
  %300 = getelementptr inbounds i8, ptr %0, i64 304
  %301 = load double, ptr %300, align 8, !tbaa !38
  %302 = fmul double %288, %301
  %303 = fmul double %302, 5.000000e-01
  %304 = call double @llvm.fmuladd.f64(double %249, double %299, double %303)
  %305 = call noundef double @_Z8horowitzddddi(double noundef %.0180.lcssa, double noundef %304, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %306 = load double, ptr %197, align 8, !tbaa !41
  %307 = fadd double %305, %306
  store double %307, ptr %197, align 8, !tbaa !41
  %308 = fmul double %305, 2.000000e+00
  store double %308, ptr %5, align 8, !tbaa !46
  br label %.sink.split247

.sink.split247:                                   ; preds = %286, %254
  %.sink251 = phi double [ %280, %254 ], [ %299, %286 ]
  %.1181.ph = phi double [ %285, %254 ], [ %.0180.lcssa, %286 ]
  %309 = fmul double %6, %.sink251
  %310 = load double, ptr %201, align 8, !tbaa !42
  %311 = call double @llvm.fmuladd.f64(double %309, double %6, double %310)
  store double %311, ptr %201, align 8, !tbaa !42
  br label %312

312:                                              ; preds = %.sink.split247, %162
  %.1181 = phi double [ %2, %162 ], [ %.1181.ph, %.sink.split247 ]
  %313 = getelementptr inbounds i8, ptr %0, i64 324
  %314 = load i32, ptr %313, align 4, !tbaa !35
  switch i32 %314, label %349 [
    i32 0, label %._crit_edge233
    i32 2, label %315
  ]

._crit_edge233:                                   ; preds = %312
  %.pre = load double, ptr %5, align 8
  br label %483

315:                                              ; preds = %312
  %316 = getelementptr inbounds i8, ptr %0, i64 1000
  %317 = load double, ptr %316, align 8, !tbaa !27
  %318 = getelementptr inbounds i8, ptr %0, i64 1696
  %319 = load i8, ptr %318, align 8, !tbaa !28, !range !24, !noundef !25
  %320 = trunc nuw i8 %319 to i1
  %321 = call noundef double @_Z7tr_R_ondiibbb(double noundef %317, i32 noundef 1, i32 noundef 2, i1 noundef zeroext %320, i1 noundef zeroext false, i1 noundef zeroext false)
  %322 = getelementptr inbounds i8, ptr %0, i64 1008
  %323 = load double, ptr %322, align 8, !tbaa !27
  %324 = getelementptr inbounds i8, ptr %0, i64 1160
  %325 = getelementptr inbounds i8, ptr %0, i64 1168
  %326 = load double, ptr %325, align 8, !tbaa !27
  %327 = fadd double %323, %326
  %328 = load i8, ptr %318, align 8, !tbaa !28, !range !24, !noundef !25
  %329 = trunc nuw i8 %328 to i1
  %330 = call noundef double @_Z6gate_Cddbbb(double noundef %327, double noundef 0.000000e+00, i1 noundef zeroext %329, i1 noundef zeroext false, i1 noundef zeroext false)
  %331 = load double, ptr %324, align 8, !tbaa !27
  %332 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %333 = load i8, ptr %318, align 8, !tbaa !28, !range !24, !noundef !25
  %334 = trunc nuw i8 %333 to i1
  %335 = call noundef double @_Z8drain_C_diiidbbb(double noundef %331, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %332, i1 noundef zeroext %334, i1 noundef zeroext false, i1 noundef zeroext false)
  %336 = load double, ptr %316, align 8, !tbaa !27
  %337 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %338 = load i8, ptr %318, align 8, !tbaa !28, !range !24, !noundef !25
  %339 = trunc nuw i8 %338 to i1
  %340 = call noundef double @_Z8drain_C_diiidbbb(double noundef %336, i32 noundef 1, i32 noundef 2, i32 noundef 1, double noundef %337, i1 noundef zeroext %339, i1 noundef zeroext false, i1 noundef zeroext false)
  %341 = call double @llvm.fmuladd.f64(double %335, double 2.000000e+00, double %340)
  %342 = fadd double %330, %341
  %343 = fmul double %321, %342
  %344 = call noundef double @_Z8horowitzddddi(double noundef %.1, double noundef %343, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %345 = getelementptr inbounds i8, ptr %0, i64 1320
  %346 = load double, ptr %345, align 8, !tbaa !30
  %347 = fadd double %344, %346
  store double %347, ptr %345, align 8, !tbaa !30
  %348 = fmul double %344, 2.000000e+00
  br label %383

349:                                              ; preds = %312
  %350 = getelementptr inbounds i8, ptr %0, i64 1000
  %351 = load double, ptr %350, align 8, !tbaa !27
  %352 = getelementptr inbounds i8, ptr %0, i64 1696
  %353 = load i8, ptr %352, align 8, !tbaa !28, !range !24, !noundef !25
  %354 = trunc nuw i8 %353 to i1
  %355 = call noundef double @_Z7tr_R_ondiibbb(double noundef %351, i32 noundef 1, i32 noundef 3, i1 noundef zeroext %354, i1 noundef zeroext false, i1 noundef zeroext false)
  %356 = getelementptr inbounds i8, ptr %0, i64 1008
  %357 = load double, ptr %356, align 8, !tbaa !27
  %358 = getelementptr inbounds i8, ptr %0, i64 1160
  %359 = getelementptr inbounds i8, ptr %0, i64 1168
  %360 = load double, ptr %359, align 8, !tbaa !27
  %361 = fadd double %357, %360
  %362 = load i8, ptr %352, align 8, !tbaa !28, !range !24, !noundef !25
  %363 = trunc nuw i8 %362 to i1
  %364 = call noundef double @_Z6gate_Cddbbb(double noundef %361, double noundef 0.000000e+00, i1 noundef zeroext %363, i1 noundef zeroext false, i1 noundef zeroext false)
  %365 = load double, ptr %358, align 8, !tbaa !27
  %366 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %367 = load i8, ptr %352, align 8, !tbaa !28, !range !24, !noundef !25
  %368 = trunc nuw i8 %367 to i1
  %369 = call noundef double @_Z8drain_C_diiidbbb(double noundef %365, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %366, i1 noundef zeroext %368, i1 noundef zeroext false, i1 noundef zeroext false)
  %370 = load double, ptr %350, align 8, !tbaa !27
  %371 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %372 = load i8, ptr %352, align 8, !tbaa !28, !range !24, !noundef !25
  %373 = trunc nuw i8 %372 to i1
  %374 = call noundef double @_Z8drain_C_diiidbbb(double noundef %370, i32 noundef 1, i32 noundef 3, i32 noundef 1, double noundef %371, i1 noundef zeroext %373, i1 noundef zeroext false, i1 noundef zeroext false)
  %375 = call double @llvm.fmuladd.f64(double %369, double 3.000000e+00, double %374)
  %376 = fadd double %364, %375
  %377 = fmul double %355, %376
  %378 = call noundef double @_Z8horowitzddddi(double noundef %.1181, double noundef %377, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %379 = getelementptr inbounds i8, ptr %0, i64 1328
  %380 = load double, ptr %379, align 8, !tbaa !41
  %381 = fadd double %378, %380
  store double %381, ptr %379, align 8, !tbaa !41
  %382 = fmul double %378, 2.000000e+00
  br label %383

383:                                              ; preds = %349, %315
  %.sink257 = phi double [ %376, %349 ], [ %342, %315 ]
  %.2182 = phi double [ %382, %349 ], [ %.1181, %315 ]
  %.2 = phi double [ %.1, %349 ], [ %348, %315 ]
  %384 = fmul double %6, %.sink257
  %385 = getelementptr inbounds i8, ptr %0, i64 1576
  %386 = load double, ptr %385, align 8, !tbaa !47
  %387 = call double @llvm.fmuladd.f64(double %384, double %6, double %386)
  store double %387, ptr %385, align 8, !tbaa !47
  %388 = getelementptr inbounds i8, ptr %0, i64 340
  %389 = load i32, ptr %388, align 4, !tbaa !48
  %390 = icmp sgt i32 %389, 2
  br i1 %390, label %.lr.ph214, label %.._crit_edge215_crit_edge

.._crit_edge215_crit_edge:                        ; preds = %383
  %391 = add nsw i32 %389, -1
  %.pre237 = sext i32 %391 to i64
  br label %._crit_edge215

.lr.ph214:                                        ; preds = %383
  %392 = getelementptr inbounds i8, ptr %0, i64 1000
  %393 = getelementptr inbounds i8, ptr %0, i64 1696
  %394 = getelementptr inbounds i8, ptr %0, i64 1160
  %395 = getelementptr inbounds i8, ptr %0, i64 1320
  %396 = getelementptr inbounds i8, ptr %0, i64 1328
  %397 = getelementptr inbounds i8, ptr %0, i64 1576
  br label %398

398:                                              ; preds = %.lr.ph214, %398
  %indvars.iv230 = phi i64 [ 1, %.lr.ph214 ], [ %indvars.iv.next231, %398 ]
  %.3212 = phi double [ %.2, %.lr.ph214 ], [ %429, %398 ]
  %.3183210 = phi double [ %.2182, %.lr.ph214 ], [ %433, %398 ]
  %399 = getelementptr inbounds [20 x double], ptr %392, i64 0, i64 %indvars.iv230
  %400 = load double, ptr %399, align 8, !tbaa !27
  %401 = load i8, ptr %393, align 8, !tbaa !28, !range !24, !noundef !25
  %402 = trunc nuw i8 %401 to i1
  %403 = call noundef double @_Z7tr_R_ondiibbb(double noundef %400, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %402, i1 noundef zeroext false, i1 noundef zeroext false)
  %indvars.iv.next231 = add nuw nsw i64 %indvars.iv230, 1
  %404 = getelementptr inbounds [20 x double], ptr %392, i64 0, i64 %indvars.iv.next231
  %405 = load double, ptr %404, align 8, !tbaa !27
  %406 = getelementptr inbounds [20 x double], ptr %394, i64 0, i64 %indvars.iv.next231
  %407 = load double, ptr %406, align 8, !tbaa !27
  %408 = fadd double %405, %407
  %409 = load i8, ptr %393, align 8, !tbaa !28, !range !24, !noundef !25
  %410 = trunc nuw i8 %409 to i1
  %411 = call noundef double @_Z6gate_Cddbbb(double noundef %408, double noundef 0.000000e+00, i1 noundef zeroext %410, i1 noundef zeroext false, i1 noundef zeroext false)
  %412 = getelementptr inbounds [20 x double], ptr %394, i64 0, i64 %indvars.iv230
  %413 = load double, ptr %412, align 8, !tbaa !27
  %414 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %415 = load i8, ptr %393, align 8, !tbaa !28, !range !24, !noundef !25
  %416 = trunc nuw i8 %415 to i1
  %417 = call noundef double @_Z8drain_C_diiidbbb(double noundef %413, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %414, i1 noundef zeroext %416, i1 noundef zeroext false, i1 noundef zeroext false)
  %418 = load double, ptr %399, align 8, !tbaa !27
  %419 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %420 = load i8, ptr %393, align 8, !tbaa !28, !range !24, !noundef !25
  %421 = trunc nuw i8 %420 to i1
  %422 = call noundef double @_Z8drain_C_diiidbbb(double noundef %418, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %419, i1 noundef zeroext %421, i1 noundef zeroext false, i1 noundef zeroext false)
  %423 = fadd double %417, %422
  %424 = fadd double %411, %423
  %425 = fmul double %403, %424
  %426 = call noundef double @_Z8horowitzddddi(double noundef %.3212, double noundef %425, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %427 = load double, ptr %395, align 8, !tbaa !30
  %428 = fadd double %426, %427
  store double %428, ptr %395, align 8, !tbaa !30
  %429 = fmul double %426, 2.000000e+00
  %430 = call noundef double @_Z8horowitzddddi(double noundef %.3183210, double noundef %425, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %431 = load double, ptr %396, align 8, !tbaa !41
  %432 = fadd double %430, %431
  store double %432, ptr %396, align 8, !tbaa !41
  %433 = fmul double %430, 2.000000e+00
  %434 = fmul double %6, %424
  %435 = load double, ptr %397, align 8, !tbaa !47
  %436 = call double @llvm.fmuladd.f64(double %434, double %6, double %435)
  store double %436, ptr %397, align 8, !tbaa !47
  %437 = load i32, ptr %388, align 4, !tbaa !48
  %438 = add nsw i32 %437, -1
  %439 = sext i32 %438 to i64
  %440 = icmp slt i64 %indvars.iv.next231, %439
  br i1 %440, label %398, label %._crit_edge215, !llvm.loop !49

._crit_edge215:                                   ; preds = %398, %.._crit_edge215_crit_edge
  %.pre-phi238 = phi i64 [ %.pre237, %.._crit_edge215_crit_edge ], [ %439, %398 ]
  %.3183.lcssa = phi double [ %.2182, %.._crit_edge215_crit_edge ], [ %433, %398 ]
  %.3.lcssa = phi double [ %.2, %.._crit_edge215_crit_edge ], [ %429, %398 ]
  %441 = getelementptr inbounds i8, ptr %0, i64 296
  %442 = load double, ptr %441, align 8, !tbaa !37
  %443 = getelementptr inbounds i8, ptr %0, i64 1000
  %444 = getelementptr inbounds [20 x double], ptr %443, i64 0, i64 %.pre-phi238
  %445 = load double, ptr %444, align 8, !tbaa !27
  %446 = getelementptr inbounds i8, ptr %0, i64 1696
  %447 = load i8, ptr %446, align 8, !tbaa !28, !range !24, !noundef !25
  %448 = trunc nuw i8 %447 to i1
  %449 = call noundef double @_Z7tr_R_ondiibbb(double noundef %445, i32 noundef 1, i32 noundef 1, i1 noundef zeroext %448, i1 noundef zeroext false, i1 noundef zeroext false)
  %450 = getelementptr inbounds i8, ptr %0, i64 1160
  %451 = getelementptr inbounds [20 x double], ptr %450, i64 0, i64 %.pre-phi238
  %452 = load double, ptr %451, align 8, !tbaa !27
  %453 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %454 = load i8, ptr %446, align 8, !tbaa !28, !range !24, !noundef !25
  %455 = trunc nuw i8 %454 to i1
  %456 = call noundef double @_Z8drain_C_diiidbbb(double noundef %452, i32 noundef 0, i32 noundef 1, i32 noundef 1, double noundef %453, i1 noundef zeroext %455, i1 noundef zeroext false, i1 noundef zeroext false)
  %457 = load double, ptr %444, align 8, !tbaa !27
  %458 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 312), align 8, !tbaa !29
  %459 = load i8, ptr %446, align 8, !tbaa !28, !range !24, !noundef !25
  %460 = trunc nuw i8 %459 to i1
  %461 = call noundef double @_Z8drain_C_diiidbbb(double noundef %457, i32 noundef 1, i32 noundef 1, i32 noundef 1, double noundef %458, i1 noundef zeroext %460, i1 noundef zeroext false, i1 noundef zeroext false)
  %462 = fadd double %456, %461
  %463 = fadd double %442, %462
  %464 = getelementptr inbounds i8, ptr %0, i64 304
  %465 = load double, ptr %464, align 8, !tbaa !38
  %466 = fmul double %442, %465
  %467 = fmul double %466, 5.000000e-01
  %468 = call double @llvm.fmuladd.f64(double %449, double %463, double %467)
  %469 = call noundef double @_Z8horowitzddddi(double noundef %.3.lcssa, double noundef %468, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %470 = getelementptr inbounds i8, ptr %0, i64 1320
  %471 = load double, ptr %470, align 8, !tbaa !30
  %472 = fadd double %469, %471
  store double %472, ptr %470, align 8, !tbaa !30
  %473 = fmul double %469, 2.000000e+00
  store double %473, ptr %4, align 8, !tbaa !39
  %474 = call noundef double @_Z8horowitzddddi(double noundef %.3183.lcssa, double noundef %468, double noundef 5.000000e-01, double noundef 5.000000e-01, i32 noundef 1)
  %475 = getelementptr inbounds i8, ptr %0, i64 1328
  %476 = load double, ptr %475, align 8, !tbaa !41
  %477 = fadd double %474, %476
  store double %477, ptr %475, align 8, !tbaa !41
  %478 = fmul double %474, 2.000000e+00
  %479 = fmul double %6, %463
  %480 = getelementptr inbounds i8, ptr %0, i64 1576
  %481 = load double, ptr %480, align 8, !tbaa !47
  %482 = call double @llvm.fmuladd.f64(double %479, double %6, double %481)
  store double %482, ptr %480, align 8, !tbaa !47
  br label %483

483:                                              ; preds = %._crit_edge233, %._crit_edge215, %3
  %484 = phi double [ %.pre, %._crit_edge233 ], [ %478, %._crit_edge215 ], [ 0.000000e+00, %3 ]
  %485 = load double, ptr %4, align 8
  %486 = fcmp ogt double %485, %484
  %487 = select i1 %486, double %485, double %484
  %488 = getelementptr inbounds i8, ptr %0, i64 264
  store double %487, ptr %488, align 8, !tbaa !50
  %.fca.0.insert = insertvalue { double, double } poison, double %485, 0
  %.fca.1.insert = insertvalue { double, double } %.fca.0.insert, double %484, 1
  ret { double, double } %.fca.1.insert
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIddEC2IddTnNSt9enable_ifIXsr6__and_ISt37__is_implicitly_default_constructibleIT_ES3_IT0_EEE5valueEbE4typeELb1EEEv(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 936}
!6 = !{!"_ZTS19TechnologyParameter", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !7, i64 176, !7, i64 184, !7, i64 192, !7, i64 200, !7, i64 208, !7, i64 216, !7, i64 224, !7, i64 232, !7, i64 240, !7, i64 248, !7, i64 256, !7, i64 264, !7, i64 272, !7, i64 280, !7, i64 288, !7, i64 296, !7, i64 304, !7, i64 312, !7, i64 320, !7, i64 328, !7, i64 336, !7, i64 344, !10, i64 352, !11, i64 360, !11, i64 528, !11, i64 696, !11, i64 864, !11, i64 1032, !12, i64 1200, !12, i64 1264, !12, i64 1328, !13, i64 1392, !14, i64 1416, !14, i64 1464, !14, i64 1512}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160}
!12 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56}
!13 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !7, i64 0, !7, i64 8, !7, i64 16}
!14 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40}
!15 = !{!16, !22, i64 288}
!16 = !{!"_ZTS9PredecBlk", !17, i64 0, !21, i64 280, !22, i64 288, !23, i64 292, !7, i64 296, !7, i64 304, !23, i64 312, !23, i64 316, !22, i64 320, !23, i64 324, !23, i64 328, !23, i64 332, !23, i64 336, !23, i64 340, !23, i64 344, !23, i64 348, !23, i64 352, !23, i64 356, !8, i64 360, !8, i64 520, !8, i64 680, !8, i64 840, !8, i64 1000, !8, i64 1160, !7, i64 1320, !7, i64 1328, !19, i64 1336, !19, i64 1456, !19, i64 1576, !22, i64 1696}
!17 = !{!"_ZTS9Component", !18, i64 0, !19, i64 24, !19, i64 144, !7, i64 264, !7, i64 272}
!18 = !{!"_ZTS4Area", !7, i64 0, !7, i64 8, !7, i64 16}
!19 = !{!"_ZTS8powerDef", !20, i64 0, !20, i64 40, !20, i64 80}
!20 = !{!"_ZTS15powerComponents", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32}
!21 = !{!"any pointer", !8, i64 0}
!22 = !{!"bool", !8, i64 0}
!23 = !{!"int", !8, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{!16, !22, i64 320}
!27 = !{!7, !7, i64 0}
!28 = !{!16, !22, i64 1696}
!29 = !{!6, !7, i64 312}
!30 = !{!16, !7, i64 1320}
!31 = !{!16, !7, i64 1336}
!32 = !{!16, !23, i64 332}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!16, !23, i64 324}
!36 = !{!16, !23, i64 312}
!37 = !{!16, !7, i64 296}
!38 = !{!16, !7, i64 304}
!39 = !{!40, !7, i64 0}
!40 = !{!"_ZTSSt4pairIddE", !7, i64 0, !7, i64 8}
!41 = !{!16, !7, i64 1328}
!42 = !{!16, !7, i64 1456}
!43 = !{!16, !23, i64 336}
!44 = distinct !{!44, !34}
!45 = !{!16, !23, i64 316}
!46 = !{!40, !7, i64 8}
!47 = !{!16, !7, i64 1576}
!48 = !{!16, !23, i64 340}
!49 = distinct !{!49, !34}
!50 = !{!17, !7, i64 264}


; Effective O3 passes: BDCEPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,ReassociatePass,SROAPass,SimplifyCFGPass