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

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

%class.TechnologyParameter = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i64, %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::DeviceType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::InterconnectType", %"class.TechnologyParameter::ScalingFactor", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType", %"class.TechnologyParameter::MemoryType" }
%"class.TechnologyParameter::DeviceType" = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::InterconnectType" = type { double, double, double, double, double, double, double, double }
%"class.TechnologyParameter::ScalingFactor" = type { double, double, double }
%"class.TechnologyParameter::MemoryType" = type { double, double, double, double, double, double }
%class.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 }

@.str.1 = external hidden unnamed_addr constant [70 x i8], align 1
@g_tp = external global %class.TechnologyParameter, align 8
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@__PRETTY_FUNCTION__._ZN9PredecBlk14compute_widthsEv = external hidden unnamed_addr constant [33 x i8], align 1

; 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

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

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

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

declare noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280), i32 noundef, double noundef, double noundef, ptr noundef, ptr noundef, double noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, double noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9PredecBlk14compute_widthsEv(ptr noundef nonnull align 8 dereferenceable(1697) %0) #3 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca double, align 8
  %4 = alloca double, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %10 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %11 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %12 = load i8, ptr %11, align 8, !tbaa !9, !range !18, !noundef !19
  %13 = trunc i8 %12 to i1
  %14 = call noundef double @_Z21pmos_to_nmos_sz_ratiobb(i1 noundef zeroext %13, i1 noundef zeroext false)
  store double %14, ptr %6, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  %15 = load double, ptr %6, align 8, !tbaa !20
  %16 = fadd double 2.000000e+00, %15
  %17 = load double, ptr %6, align 8, !tbaa !20
  %18 = fadd double 1.000000e+00, %17
  %19 = fdiv double %16, %18
  store double %19, ptr %7, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %20 = load double, ptr %6, align 8, !tbaa !20
  %21 = fadd double 3.000000e+00, %20
  %22 = load double, ptr %6, align 8, !tbaa !20
  %23 = fadd double 1.000000e+00, %22
  %24 = fdiv double %21, %23
  store double %24, ptr %8, align 8, !tbaa !20
  %25 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 2
  %26 = load i8, ptr %25, align 8, !tbaa !21, !range !18, !noundef !19
  %27 = trunc i8 %26 to i1
  %28 = zext i1 %27 to i32
  %29 = icmp eq i32 %28, 0
  br i1 %29, label %30, label %31

30:                                               ; preds = %1
  store i32 1, ptr %9, align 4
  br label %397

31:                                               ; preds = %1
  %32 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 4
  %33 = load i32, ptr %32, align 4, !tbaa !22
  switch i32 %33, label %76 [
    i32 1, label %34
    i32 2, label %38
    i32 3, label %42
    i32 4, label %46
    i32 5, label %51
    i32 6, label %56
    i32 7, label %61
    i32 8, label %66
    i32 9, label %71
  ]

34:                                               ; preds = %31
  %35 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 0, ptr %35, align 8, !tbaa !23
  %36 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  store i32 2, ptr %36, align 8, !tbaa !24
  %37 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 0, ptr %37, align 4, !tbaa !25
  br label %77

38:                                               ; preds = %31
  %39 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 0, ptr %39, align 8, !tbaa !23
  %40 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  store i32 2, ptr %40, align 8, !tbaa !24
  %41 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 0, ptr %41, align 4, !tbaa !25
  br label %77

42:                                               ; preds = %31
  %43 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 0, ptr %43, align 8, !tbaa !23
  %44 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  store i32 3, ptr %44, align 8, !tbaa !24
  %45 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 0, ptr %45, align 4, !tbaa !25
  br label %77

46:                                               ; preds = %31
  %47 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 0, ptr %47, align 8, !tbaa !23
  %48 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  store i32 2, ptr %48, align 8, !tbaa !24
  %49 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 2, ptr %49, align 4, !tbaa !25
  %50 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 7
  store i32 4, ptr %50, align 8, !tbaa !26
  br label %77

51:                                               ; preds = %31
  %52 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 1, ptr %52, align 8, !tbaa !23
  %53 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 2, ptr %53, align 4, !tbaa !25
  %54 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 7
  store i32 8, ptr %54, align 8, !tbaa !26
  %55 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 8
  store i32 4, ptr %55, align 4, !tbaa !27
  br label %77

56:                                               ; preds = %31
  %57 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 0, ptr %57, align 8, !tbaa !23
  %58 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  store i32 3, ptr %58, align 8, !tbaa !24
  %59 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 2, ptr %59, align 4, !tbaa !25
  %60 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 8
  store i32 8, ptr %60, align 4, !tbaa !27
  br label %77

61:                                               ; preds = %31
  %62 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 1, ptr %62, align 8, !tbaa !23
  %63 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 3, ptr %63, align 4, !tbaa !25
  %64 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 7
  store i32 32, ptr %64, align 8, !tbaa !26
  %65 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 8
  store i32 16, ptr %65, align 4, !tbaa !27
  br label %77

66:                                               ; preds = %31
  %67 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 1, ptr %67, align 8, !tbaa !23
  %68 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 3, ptr %68, align 4, !tbaa !25
  %69 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 7
  store i32 64, ptr %69, align 8, !tbaa !26
  %70 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 8
  store i32 32, ptr %70, align 4, !tbaa !27
  br label %77

71:                                               ; preds = %31
  %72 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  store i8 0, ptr %72, align 8, !tbaa !23
  %73 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  store i32 3, ptr %73, align 8, !tbaa !24
  %74 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  store i32 3, ptr %74, align 4, !tbaa !25
  %75 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 8
  store i32 64, ptr %75, align 4, !tbaa !27
  br label %77

76:                                               ; preds = %31
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 403, ptr noundef @__PRETTY_FUNCTION__._ZN9PredecBlk14compute_widthsEv) #5
  unreachable

77:                                               ; preds = %71, %66, %61, %56, %51, %46, %42, %38, %34
  %78 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  %79 = load i32, ptr %78, align 4, !tbaa !25
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %292

81:                                               ; preds = %77
  %82 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  %83 = load i32, ptr %82, align 4, !tbaa !25
  %84 = icmp eq i32 %83, 2
  br i1 %84, label %85, label %91

85:                                               ; preds = %81
  %86 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %87 = fmul double 2.000000e+00, %86
  %88 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 24
  %89 = getelementptr inbounds [20 x double], ptr %88, i64 0, i64 0
  store double %87, ptr %89, align 8, !tbaa !20
  %90 = load double, ptr %7, align 8, !tbaa !20
  store double %90, ptr %3, align 8, !tbaa !20
  br label %97

91:                                               ; preds = %81
  %92 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %93 = fmul double 3.000000e+00, %92
  %94 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 24
  %95 = getelementptr inbounds [20 x double], ptr %94, i64 0, i64 0
  store double %93, ptr %95, align 8, !tbaa !20
  %96 = load double, ptr %8, align 8, !tbaa !20
  store double %96, ptr %3, align 8, !tbaa !20
  br label %97

97:                                               ; preds = %91, %85
  %98 = load double, ptr %6, align 8, !tbaa !20
  %99 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %100 = fmul double %98, %99
  %101 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 25
  %102 = getelementptr inbounds [20 x double], ptr %101, i64 0, i64 0
  store double %100, ptr %102, align 8, !tbaa !20
  %103 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 5
  %104 = load double, ptr %103, align 8, !tbaa !35
  %105 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 24
  %106 = getelementptr inbounds [20 x double], ptr %105, i64 0, i64 0
  %107 = load double, ptr %106, align 8, !tbaa !20
  %108 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %109 = load i8, ptr %108, align 8, !tbaa !9, !range !18, !noundef !19
  %110 = trunc i8 %109 to i1
  %111 = call noundef double @_Z6gate_Cddbbb(double noundef %107, double noundef 0.000000e+00, i1 noundef zeroext %110, i1 noundef zeroext false, i1 noundef zeroext false)
  %112 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 25
  %113 = getelementptr inbounds [20 x double], ptr %112, i64 0, i64 0
  %114 = load double, ptr %113, align 8, !tbaa !20
  %115 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %116 = load i8, ptr %115, align 8, !tbaa !9, !range !18, !noundef !19
  %117 = trunc i8 %116 to i1
  %118 = call noundef double @_Z6gate_Cddbbb(double noundef %114, double noundef 0.000000e+00, i1 noundef zeroext %117, i1 noundef zeroext false, i1 noundef zeroext false)
  %119 = fadd double %111, %118
  %120 = fdiv double %104, %119
  %121 = load double, ptr %3, align 8, !tbaa !20
  %122 = fmul double %121, %120
  store double %122, ptr %3, align 8, !tbaa !20
  %123 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 17
  %124 = load i32, ptr %123, align 4, !tbaa !36
  %125 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 11
  %126 = load i32, ptr %125, align 4, !tbaa !25
  %127 = icmp eq i32 %126, 2
  br i1 %127, label %128, label %130

128:                                              ; preds = %97
  %129 = load double, ptr %7, align 8, !tbaa !20
  br label %132

130:                                              ; preds = %97
  %131 = load double, ptr %8, align 8, !tbaa !20
  br label %132

132:                                              ; preds = %130, %128
  %133 = phi double [ %129, %128 ], [ %131, %130 ]
  %134 = load double, ptr %3, align 8, !tbaa !20
  %135 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 24
  %136 = getelementptr inbounds [20 x double], ptr %135, i64 0, i64 0
  %137 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 25
  %138 = getelementptr inbounds [20 x double], ptr %137, i64 0, i64 0
  %139 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 5
  %140 = load double, ptr %139, align 8, !tbaa !35
  %141 = load double, ptr %6, align 8, !tbaa !20
  %142 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %143 = load i8, ptr %142, align 8, !tbaa !9, !range !18, !noundef !19
  %144 = trunc i8 %143 to i1
  %145 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 2), align 8, !tbaa !37
  %146 = call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %10, i32 noundef %124, double noundef %133, double noundef %134, ptr noundef %136, ptr noundef %138, double noundef %140, double noundef %141, i1 noundef zeroext %144, i1 noundef zeroext false, double noundef %145)
  %147 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 15
  store i32 %146, ptr %147, align 4, !tbaa !38
  %148 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  %149 = load i8, ptr %148, align 8, !tbaa !23, !range !18, !noundef !19
  %150 = trunc i8 %149 to i1
  br i1 %150, label %155, label %151

151:                                              ; preds = %132
  %152 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  %153 = load i32, ptr %152, align 8, !tbaa !24
  %154 = icmp eq i32 %153, 2
  br i1 %154, label %155, label %219

155:                                              ; preds = %151, %132
  %156 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 7
  %157 = load i32, ptr %156, align 8, !tbaa !26
  %158 = sitofp i32 %157 to double
  %159 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 24
  %160 = getelementptr inbounds [20 x double], ptr %159, i64 0, i64 0
  %161 = load double, ptr %160, align 8, !tbaa !20
  %162 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %163 = load i8, ptr %162, align 8, !tbaa !9, !range !18, !noundef !19
  %164 = trunc i8 %163 to i1
  %165 = call noundef double @_Z6gate_Cddbbb(double noundef %161, double noundef 0.000000e+00, i1 noundef zeroext %164, i1 noundef zeroext false, i1 noundef zeroext false)
  %166 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 25
  %167 = getelementptr inbounds [20 x double], ptr %166, i64 0, i64 0
  %168 = load double, ptr %167, align 8, !tbaa !20
  %169 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %170 = load i8, ptr %169, align 8, !tbaa !9, !range !18, !noundef !19
  %171 = trunc i8 %170 to i1
  %172 = call noundef double @_Z6gate_Cddbbb(double noundef %168, double noundef 0.000000e+00, i1 noundef zeroext %171, i1 noundef zeroext false, i1 noundef zeroext false)
  %173 = fadd double %165, %172
  %174 = fmul double %158, %173
  store double %174, ptr %5, align 8, !tbaa !20
  %175 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %176 = fmul double 2.000000e+00, %175
  %177 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 20
  %178 = getelementptr inbounds [20 x double], ptr %177, i64 0, i64 0
  store double %176, ptr %178, align 8, !tbaa !20
  %179 = load double, ptr %6, align 8, !tbaa !20
  %180 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %181 = fmul double %179, %180
  %182 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 21
  %183 = getelementptr inbounds [20 x double], ptr %182, i64 0, i64 0
  store double %181, ptr %183, align 8, !tbaa !20
  %184 = load double, ptr %7, align 8, !tbaa !20
  %185 = load double, ptr %5, align 8, !tbaa !20
  %186 = fmul double %184, %185
  %187 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 20
  %188 = getelementptr inbounds [20 x double], ptr %187, i64 0, i64 0
  %189 = load double, ptr %188, align 8, !tbaa !20
  %190 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %191 = load i8, ptr %190, align 8, !tbaa !9, !range !18, !noundef !19
  %192 = trunc i8 %191 to i1
  %193 = call noundef double @_Z6gate_Cddbbb(double noundef %189, double noundef 0.000000e+00, i1 noundef zeroext %192, i1 noundef zeroext false, i1 noundef zeroext false)
  %194 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 21
  %195 = getelementptr inbounds [20 x double], ptr %194, i64 0, i64 0
  %196 = load double, ptr %195, align 8, !tbaa !20
  %197 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %198 = load i8, ptr %197, align 8, !tbaa !9, !range !18, !noundef !19
  %199 = trunc i8 %198 to i1
  %200 = call noundef double @_Z6gate_Cddbbb(double noundef %196, double noundef 0.000000e+00, i1 noundef zeroext %199, i1 noundef zeroext false, i1 noundef zeroext false)
  %201 = fadd double %193, %200
  %202 = fdiv double %186, %201
  store double %202, ptr %3, align 8, !tbaa !20
  %203 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 16
  %204 = load i32, ptr %203, align 8, !tbaa !39
  %205 = load double, ptr %7, align 8, !tbaa !20
  %206 = load double, ptr %3, align 8, !tbaa !20
  %207 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 20
  %208 = getelementptr inbounds [20 x double], ptr %207, i64 0, i64 0
  %209 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 21
  %210 = getelementptr inbounds [20 x double], ptr %209, i64 0, i64 0
  %211 = load double, ptr %5, align 8, !tbaa !20
  %212 = load double, ptr %6, align 8, !tbaa !20
  %213 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %214 = load i8, ptr %213, align 8, !tbaa !9, !range !18, !noundef !19
  %215 = trunc i8 %214 to i1
  %216 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 2), align 8, !tbaa !37
  %217 = call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %10, i32 noundef %204, double noundef %205, double noundef %206, ptr noundef %208, ptr noundef %210, double noundef %211, double noundef %212, i1 noundef zeroext %215, i1 noundef zeroext false, double noundef %216)
  %218 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 13
  store i32 %217, ptr %218, align 4, !tbaa !40
  br label %219

219:                                              ; preds = %155, %151
  %220 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 9
  %221 = load i8, ptr %220, align 8, !tbaa !23, !range !18, !noundef !19
  %222 = trunc i8 %221 to i1
  br i1 %222, label %227, label %223

223:                                              ; preds = %219
  %224 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  %225 = load i32, ptr %224, align 8, !tbaa !24
  %226 = icmp eq i32 %225, 3
  br i1 %226, label %227, label %291

227:                                              ; preds = %223, %219
  %228 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 8
  %229 = load i32, ptr %228, align 4, !tbaa !27
  %230 = sitofp i32 %229 to double
  %231 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 24
  %232 = getelementptr inbounds [20 x double], ptr %231, i64 0, i64 0
  %233 = load double, ptr %232, align 8, !tbaa !20
  %234 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %235 = load i8, ptr %234, align 8, !tbaa !9, !range !18, !noundef !19
  %236 = trunc i8 %235 to i1
  %237 = call noundef double @_Z6gate_Cddbbb(double noundef %233, double noundef 0.000000e+00, i1 noundef zeroext %236, i1 noundef zeroext false, i1 noundef zeroext false)
  %238 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 25
  %239 = getelementptr inbounds [20 x double], ptr %238, i64 0, i64 0
  %240 = load double, ptr %239, align 8, !tbaa !20
  %241 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %242 = load i8, ptr %241, align 8, !tbaa !9, !range !18, !noundef !19
  %243 = trunc i8 %242 to i1
  %244 = call noundef double @_Z6gate_Cddbbb(double noundef %240, double noundef 0.000000e+00, i1 noundef zeroext %243, i1 noundef zeroext false, i1 noundef zeroext false)
  %245 = fadd double %237, %244
  %246 = fmul double %230, %245
  store double %246, ptr %4, align 8, !tbaa !20
  %247 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %248 = fmul double 3.000000e+00, %247
  %249 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 22
  %250 = getelementptr inbounds [20 x double], ptr %249, i64 0, i64 0
  store double %248, ptr %250, align 8, !tbaa !20
  %251 = load double, ptr %6, align 8, !tbaa !20
  %252 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %253 = fmul double %251, %252
  %254 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 23
  %255 = getelementptr inbounds [20 x double], ptr %254, i64 0, i64 0
  store double %253, ptr %255, align 8, !tbaa !20
  %256 = load double, ptr %8, align 8, !tbaa !20
  %257 = load double, ptr %4, align 8, !tbaa !20
  %258 = fmul double %256, %257
  %259 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 22
  %260 = getelementptr inbounds [20 x double], ptr %259, i64 0, i64 0
  %261 = load double, ptr %260, align 8, !tbaa !20
  %262 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %263 = load i8, ptr %262, align 8, !tbaa !9, !range !18, !noundef !19
  %264 = trunc i8 %263 to i1
  %265 = call noundef double @_Z6gate_Cddbbb(double noundef %261, double noundef 0.000000e+00, i1 noundef zeroext %264, i1 noundef zeroext false, i1 noundef zeroext false)
  %266 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 23
  %267 = getelementptr inbounds [20 x double], ptr %266, i64 0, i64 0
  %268 = load double, ptr %267, align 8, !tbaa !20
  %269 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %270 = load i8, ptr %269, align 8, !tbaa !9, !range !18, !noundef !19
  %271 = trunc i8 %270 to i1
  %272 = call noundef double @_Z6gate_Cddbbb(double noundef %268, double noundef 0.000000e+00, i1 noundef zeroext %271, i1 noundef zeroext false, i1 noundef zeroext false)
  %273 = fadd double %265, %272
  %274 = fdiv double %258, %273
  store double %274, ptr %3, align 8, !tbaa !20
  %275 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 16
  %276 = load i32, ptr %275, align 8, !tbaa !39
  %277 = load double, ptr %8, align 8, !tbaa !20
  %278 = load double, ptr %3, align 8, !tbaa !20
  %279 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 22
  %280 = getelementptr inbounds [20 x double], ptr %279, i64 0, i64 0
  %281 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 23
  %282 = getelementptr inbounds [20 x double], ptr %281, i64 0, i64 0
  %283 = load double, ptr %4, align 8, !tbaa !20
  %284 = load double, ptr %6, align 8, !tbaa !20
  %285 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %286 = load i8, ptr %285, align 8, !tbaa !9, !range !18, !noundef !19
  %287 = trunc i8 %286 to i1
  %288 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 2), align 8, !tbaa !37
  %289 = call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %10, i32 noundef %276, double noundef %277, double noundef %278, ptr noundef %280, ptr noundef %282, double noundef %283, double noundef %284, i1 noundef zeroext %287, i1 noundef zeroext false, double noundef %288)
  %290 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 14
  store i32 %289, ptr %290, align 8, !tbaa !41
  br label %291

291:                                              ; preds = %227, %223
  br label %396

292:                                              ; preds = %77
  %293 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  %294 = load i32, ptr %293, align 8, !tbaa !24
  %295 = icmp eq i32 %294, 2
  br i1 %295, label %296, label %343

296:                                              ; preds = %292
  %297 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %298 = fmul double 2.000000e+00, %297
  %299 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 20
  %300 = getelementptr inbounds [20 x double], ptr %299, i64 0, i64 0
  store double %298, ptr %300, align 8, !tbaa !20
  %301 = load double, ptr %6, align 8, !tbaa !20
  %302 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %303 = fmul double %301, %302
  %304 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 21
  %305 = getelementptr inbounds [20 x double], ptr %304, i64 0, i64 0
  store double %303, ptr %305, align 8, !tbaa !20
  %306 = load double, ptr %7, align 8, !tbaa !20
  %307 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 5
  %308 = load double, ptr %307, align 8, !tbaa !35
  %309 = fmul double %306, %308
  %310 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 20
  %311 = getelementptr inbounds [20 x double], ptr %310, i64 0, i64 0
  %312 = load double, ptr %311, align 8, !tbaa !20
  %313 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %314 = load i8, ptr %313, align 8, !tbaa !9, !range !18, !noundef !19
  %315 = trunc i8 %314 to i1
  %316 = call noundef double @_Z6gate_Cddbbb(double noundef %312, double noundef 0.000000e+00, i1 noundef zeroext %315, i1 noundef zeroext false, i1 noundef zeroext false)
  %317 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 21
  %318 = getelementptr inbounds [20 x double], ptr %317, i64 0, i64 0
  %319 = load double, ptr %318, align 8, !tbaa !20
  %320 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %321 = load i8, ptr %320, align 8, !tbaa !9, !range !18, !noundef !19
  %322 = trunc i8 %321 to i1
  %323 = call noundef double @_Z6gate_Cddbbb(double noundef %319, double noundef 0.000000e+00, i1 noundef zeroext %322, i1 noundef zeroext false, i1 noundef zeroext false)
  %324 = fadd double %316, %323
  %325 = fdiv double %309, %324
  store double %325, ptr %3, align 8, !tbaa !20
  %326 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 16
  %327 = load i32, ptr %326, align 8, !tbaa !39
  %328 = load double, ptr %7, align 8, !tbaa !20
  %329 = load double, ptr %3, align 8, !tbaa !20
  %330 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 20
  %331 = getelementptr inbounds [20 x double], ptr %330, i64 0, i64 0
  %332 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 21
  %333 = getelementptr inbounds [20 x double], ptr %332, i64 0, i64 0
  %334 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 5
  %335 = load double, ptr %334, align 8, !tbaa !35
  %336 = load double, ptr %6, align 8, !tbaa !20
  %337 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %338 = load i8, ptr %337, align 8, !tbaa !9, !range !18, !noundef !19
  %339 = trunc i8 %338 to i1
  %340 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 2), align 8, !tbaa !37
  %341 = call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %10, i32 noundef %327, double noundef %328, double noundef %329, ptr noundef %331, ptr noundef %333, double noundef %335, double noundef %336, i1 noundef zeroext %339, i1 noundef zeroext false, double noundef %340)
  %342 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 13
  store i32 %341, ptr %342, align 4, !tbaa !40
  br label %395

343:                                              ; preds = %292
  %344 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 12
  %345 = load i32, ptr %344, align 8, !tbaa !24
  %346 = icmp eq i32 %345, 3
  br i1 %346, label %347, label %394

347:                                              ; preds = %343
  %348 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %349 = fmul double 3.000000e+00, %348
  %350 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 22
  %351 = getelementptr inbounds [20 x double], ptr %350, i64 0, i64 0
  store double %349, ptr %351, align 8, !tbaa !20
  %352 = load double, ptr %6, align 8, !tbaa !20
  %353 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 1), align 8, !tbaa !28
  %354 = fmul double %352, %353
  %355 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 23
  %356 = getelementptr inbounds [20 x double], ptr %355, i64 0, i64 0
  store double %354, ptr %356, align 8, !tbaa !20
  %357 = load double, ptr %8, align 8, !tbaa !20
  %358 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 5
  %359 = load double, ptr %358, align 8, !tbaa !35
  %360 = fmul double %357, %359
  %361 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 22
  %362 = getelementptr inbounds [20 x double], ptr %361, i64 0, i64 0
  %363 = load double, ptr %362, align 8, !tbaa !20
  %364 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %365 = load i8, ptr %364, align 8, !tbaa !9, !range !18, !noundef !19
  %366 = trunc i8 %365 to i1
  %367 = call noundef double @_Z6gate_Cddbbb(double noundef %363, double noundef 0.000000e+00, i1 noundef zeroext %366, i1 noundef zeroext false, i1 noundef zeroext false)
  %368 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 23
  %369 = getelementptr inbounds [20 x double], ptr %368, i64 0, i64 0
  %370 = load double, ptr %369, align 8, !tbaa !20
  %371 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %372 = load i8, ptr %371, align 8, !tbaa !9, !range !18, !noundef !19
  %373 = trunc i8 %372 to i1
  %374 = call noundef double @_Z6gate_Cddbbb(double noundef %370, double noundef 0.000000e+00, i1 noundef zeroext %373, i1 noundef zeroext false, i1 noundef zeroext false)
  %375 = fadd double %367, %374
  %376 = fdiv double %360, %375
  store double %376, ptr %3, align 8, !tbaa !20
  %377 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 16
  %378 = load i32, ptr %377, align 8, !tbaa !39
  %379 = load double, ptr %8, align 8, !tbaa !20
  %380 = load double, ptr %3, align 8, !tbaa !20
  %381 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 22
  %382 = getelementptr inbounds [20 x double], ptr %381, i64 0, i64 0
  %383 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 23
  %384 = getelementptr inbounds [20 x double], ptr %383, i64 0, i64 0
  %385 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 5
  %386 = load double, ptr %385, align 8, !tbaa !35
  %387 = load double, ptr %6, align 8, !tbaa !20
  %388 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 31
  %389 = load i8, ptr %388, align 8, !tbaa !9, !range !18, !noundef !19
  %390 = trunc i8 %389 to i1
  %391 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 2), align 8, !tbaa !37
  %392 = call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %10, i32 noundef %378, double noundef %379, double noundef %380, ptr noundef %382, ptr noundef %384, double noundef %386, double noundef %387, i1 noundef zeroext %390, i1 noundef zeroext false, double noundef %391)
  %393 = getelementptr inbounds %class.PredecBlk, ptr %10, i32 0, i32 14
  store i32 %392, ptr %393, align 8, !tbaa !41
  br label %394

394:                                              ; preds = %347, %343
  br label %395

395:                                              ; preds = %394, %296
  br label %396

396:                                              ; preds = %395, %291
  store i32 0, ptr %9, align 4
  br label %397

397:                                              ; preds = %396, %30
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  %398 = load i32, ptr %9, align 4
  switch i32 %398, label %400 [
    i32 0, label %399
    i32 1, label %399
  ]

399:                                              ; preds = %397, %397
  ret void

400:                                              ; preds = %397
  unreachable
}

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

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

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


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

@.str.1 = external hidden unnamed_addr constant [70 x i8], align 1
@g_tp = external local_unnamed_addr global %class.TechnologyParameter, align 8
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@__PRETTY_FUNCTION__._ZN9PredecBlk14compute_widthsEv = external hidden unnamed_addr constant [33 x i8], align 1

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

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

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

declare noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280), i32 noundef, double noundef, double noundef, ptr noundef, ptr noundef, double noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, double noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN9PredecBlk14compute_widthsEv(ptr noundef nonnull align 8 dereferenceable(1697) %0) local_unnamed_addr #2 align 2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 1696
  %3 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %4 = trunc nuw i8 %3 to i1
  %5 = tail call noundef double @_Z21pmos_to_nmos_sz_ratiobb(i1 noundef zeroext %4, i1 noundef zeroext false)
  %6 = fadd double %5, 2.000000e+00
  %7 = fadd double %5, 1.000000e+00
  %8 = fdiv double %6, %7
  %9 = fadd double %5, 3.000000e+00
  %10 = fdiv double %9, %7
  %11 = getelementptr inbounds i8, ptr %0, i64 288
  %12 = load i8, ptr %11, align 8, !tbaa !19, !range !17, !noundef !18
  %13 = icmp eq i8 %12, 0
  br i1 %13, label %212, label %14

14:                                               ; preds = %1
  %15 = getelementptr inbounds i8, ptr %0, i64 292
  %16 = load i32, ptr %15, align 4, !tbaa !20
  switch i32 %16, label %45 [
    i32 1, label %160
    i32 2, label %160
    i32 3, label %17
    i32 4, label %18
    i32 5, label %23
    i32 6, label %28
    i32 7, label %33
    i32 8, label %37
    i32 9, label %41
  ]

17:                                               ; preds = %14
  br label %160

18:                                               ; preds = %14
  %19 = getelementptr inbounds i8, ptr %0, i64 320
  store i8 0, ptr %19, align 8, !tbaa !21
  %20 = getelementptr inbounds i8, ptr %0, i64 328
  store i32 2, ptr %20, align 8, !tbaa !22
  %21 = getelementptr inbounds i8, ptr %0, i64 324
  store i32 2, ptr %21, align 4, !tbaa !23
  %22 = getelementptr inbounds i8, ptr %0, i64 312
  store i32 4, ptr %22, align 8, !tbaa !24
  br label %48

23:                                               ; preds = %14
  %24 = getelementptr inbounds i8, ptr %0, i64 320
  store i8 1, ptr %24, align 8, !tbaa !21
  %25 = getelementptr inbounds i8, ptr %0, i64 324
  store i32 2, ptr %25, align 4, !tbaa !23
  %26 = getelementptr inbounds i8, ptr %0, i64 312
  store i32 8, ptr %26, align 8, !tbaa !24
  %27 = getelementptr inbounds i8, ptr %0, i64 316
  store i32 4, ptr %27, align 4, !tbaa !25
  br label %48

28:                                               ; preds = %14
  %29 = getelementptr inbounds i8, ptr %0, i64 320
  store i8 0, ptr %29, align 8, !tbaa !21
  %30 = getelementptr inbounds i8, ptr %0, i64 328
  store i32 3, ptr %30, align 8, !tbaa !22
  %31 = getelementptr inbounds i8, ptr %0, i64 324
  store i32 2, ptr %31, align 4, !tbaa !23
  %32 = getelementptr inbounds i8, ptr %0, i64 316
  store i32 8, ptr %32, align 4, !tbaa !25
  br label %48

33:                                               ; preds = %14
  %34 = getelementptr inbounds i8, ptr %0, i64 320
  store i8 1, ptr %34, align 8, !tbaa !21
  %35 = getelementptr inbounds i8, ptr %0, i64 324
  store i32 3, ptr %35, align 4, !tbaa !23
  %36 = getelementptr inbounds i8, ptr %0, i64 312
  store i32 32, ptr %36, align 8, !tbaa !24
  br label %46

37:                                               ; preds = %14
  %38 = getelementptr inbounds i8, ptr %0, i64 320
  store i8 1, ptr %38, align 8, !tbaa !21
  %39 = getelementptr inbounds i8, ptr %0, i64 324
  store i32 3, ptr %39, align 4, !tbaa !23
  %40 = getelementptr inbounds i8, ptr %0, i64 312
  store i32 64, ptr %40, align 8, !tbaa !24
  br label %46

41:                                               ; preds = %14
  %42 = getelementptr inbounds i8, ptr %0, i64 320
  store i8 0, ptr %42, align 8, !tbaa !21
  %43 = getelementptr inbounds i8, ptr %0, i64 328
  store i32 3, ptr %43, align 8, !tbaa !22
  %44 = getelementptr inbounds i8, ptr %0, i64 324
  store i32 3, ptr %44, align 4, !tbaa !23
  br label %46

45:                                               ; preds = %14
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 403, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN9PredecBlk14compute_widthsEv) #3
  unreachable

46:                                               ; preds = %41, %37, %33
  %.sink = phi i32 [ 64, %41 ], [ 32, %37 ], [ 16, %33 ]
  %47 = getelementptr inbounds i8, ptr %0, i64 316
  store i32 %.sink, ptr %47, align 4, !tbaa !25
  br label %48

48:                                               ; preds = %28, %23, %18, %46
  %.sink52 = phi double [ 3.000000e+00, %46 ], [ 2.000000e+00, %18 ], [ 2.000000e+00, %23 ], [ 2.000000e+00, %28 ]
  %.0 = phi double [ %10, %46 ], [ %8, %18 ], [ %8, %23 ], [ %8, %28 ]
  %49 = getelementptr inbounds i8, ptr %0, i64 324
  %50 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 8), align 8, !tbaa !26
  %51 = fmul double %50, %.sink52
  %52 = getelementptr inbounds i8, ptr %0, i64 1000
  store double %51, ptr %52, align 8, !tbaa !33
  %53 = fmul double %5, %50
  %54 = getelementptr inbounds i8, ptr %0, i64 1160
  store double %53, ptr %54, align 8, !tbaa !33
  %55 = getelementptr inbounds i8, ptr %0, i64 296
  %56 = load double, ptr %55, align 8, !tbaa !34
  %57 = getelementptr inbounds i8, ptr %0, i64 1000
  %58 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %59 = trunc nuw i8 %58 to i1
  %60 = tail call noundef double @_Z6gate_Cddbbb(double noundef %51, double noundef 0.000000e+00, i1 noundef zeroext %59, i1 noundef zeroext false, i1 noundef zeroext false)
  %61 = load double, ptr %54, align 8, !tbaa !33
  %62 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %63 = trunc nuw i8 %62 to i1
  %64 = tail call noundef double @_Z6gate_Cddbbb(double noundef %61, double noundef 0.000000e+00, i1 noundef zeroext %63, i1 noundef zeroext false, i1 noundef zeroext false)
  %65 = fadd double %60, %64
  %66 = fdiv double %56, %65
  %67 = fmul double %.0, %66
  %68 = getelementptr inbounds i8, ptr %0, i64 348
  %69 = load i32, ptr %68, align 4, !tbaa !35
  %70 = load i32, ptr %49, align 4, !tbaa !23
  %71 = icmp eq i32 %70, 2
  %72 = select i1 %71, double %8, double %10
  %73 = load double, ptr %55, align 8, !tbaa !34
  %74 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %75 = trunc nuw i8 %74 to i1
  %76 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 16), align 8, !tbaa !36
  %77 = tail call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %0, i32 noundef %69, double noundef %72, double noundef %67, ptr noundef nonnull %57, ptr noundef nonnull %54, double noundef %73, double noundef %5, i1 noundef zeroext %75, i1 noundef zeroext false, double noundef %76)
  %78 = getelementptr inbounds i8, ptr %0, i64 340
  store i32 %77, ptr %78, align 4, !tbaa !37
  %79 = getelementptr inbounds i8, ptr %0, i64 320
  %80 = load i8, ptr %79, align 8, !tbaa !21, !range !17, !noundef !18
  %81 = trunc nuw i8 %80 to i1
  %82 = getelementptr inbounds i8, ptr %0, i64 328
  %83 = load i32, ptr %82, align 8
  %84 = icmp eq i32 %83, 2
  %or.cond = select i1 %81, i1 true, i1 %84
  br i1 %or.cond, label %85, label %121

85:                                               ; preds = %48
  %86 = getelementptr inbounds i8, ptr %0, i64 312
  %87 = load i32, ptr %86, align 8, !tbaa !24
  %88 = sitofp i32 %87 to double
  %89 = load double, ptr %57, align 8, !tbaa !33
  %90 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %91 = trunc nuw i8 %90 to i1
  %92 = tail call noundef double @_Z6gate_Cddbbb(double noundef %89, double noundef 0.000000e+00, i1 noundef zeroext %91, i1 noundef zeroext false, i1 noundef zeroext false)
  %93 = load double, ptr %54, align 8, !tbaa !33
  %94 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %95 = trunc nuw i8 %94 to i1
  %96 = tail call noundef double @_Z6gate_Cddbbb(double noundef %93, double noundef 0.000000e+00, i1 noundef zeroext %95, i1 noundef zeroext false, i1 noundef zeroext false)
  %97 = fadd double %92, %96
  %98 = fmul double %97, %88
  %99 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 8), align 8, !tbaa !26
  %100 = fmul double %99, 2.000000e+00
  %101 = getelementptr inbounds i8, ptr %0, i64 360
  store double %100, ptr %101, align 8, !tbaa !33
  %102 = fmul double %5, %99
  %103 = getelementptr inbounds i8, ptr %0, i64 520
  store double %102, ptr %103, align 8, !tbaa !33
  %104 = fmul double %8, %98
  %105 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %106 = trunc nuw i8 %105 to i1
  %107 = tail call noundef double @_Z6gate_Cddbbb(double noundef %100, double noundef 0.000000e+00, i1 noundef zeroext %106, i1 noundef zeroext false, i1 noundef zeroext false)
  %108 = load double, ptr %103, align 8, !tbaa !33
  %109 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %110 = trunc nuw i8 %109 to i1
  %111 = tail call noundef double @_Z6gate_Cddbbb(double noundef %108, double noundef 0.000000e+00, i1 noundef zeroext %110, i1 noundef zeroext false, i1 noundef zeroext false)
  %112 = fadd double %107, %111
  %113 = fdiv double %104, %112
  %114 = getelementptr inbounds i8, ptr %0, i64 344
  %115 = load i32, ptr %114, align 8, !tbaa !38
  %116 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %117 = trunc nuw i8 %116 to i1
  %118 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 16), align 8, !tbaa !36
  %119 = tail call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %0, i32 noundef %115, double noundef %8, double noundef %113, ptr noundef nonnull %101, ptr noundef nonnull %103, double noundef %98, double noundef %5, i1 noundef zeroext %117, i1 noundef zeroext false, double noundef %118)
  %120 = getelementptr inbounds i8, ptr %0, i64 332
  store i32 %119, ptr %120, align 4, !tbaa !39
  %.pre = load i8, ptr %79, align 8, !tbaa !21, !range !17
  %.pre44 = load i32, ptr %82, align 8
  %.pre45 = trunc nuw i8 %.pre to i1
  br label %121

121:                                              ; preds = %48, %85
  %.pre-phi = phi i1 [ %81, %48 ], [ %.pre45, %85 ]
  %122 = phi i32 [ %83, %48 ], [ %.pre44, %85 ]
  %123 = icmp eq i32 %122, 3
  %or.cond43 = select i1 %.pre-phi, i1 true, i1 %123
  br i1 %or.cond43, label %124, label %212

124:                                              ; preds = %121
  %125 = getelementptr inbounds i8, ptr %0, i64 316
  %126 = load i32, ptr %125, align 4, !tbaa !25
  %127 = sitofp i32 %126 to double
  %128 = load double, ptr %57, align 8, !tbaa !33
  %129 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %130 = trunc nuw i8 %129 to i1
  %131 = tail call noundef double @_Z6gate_Cddbbb(double noundef %128, double noundef 0.000000e+00, i1 noundef zeroext %130, i1 noundef zeroext false, i1 noundef zeroext false)
  %132 = load double, ptr %54, align 8, !tbaa !33
  %133 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %134 = trunc nuw i8 %133 to i1
  %135 = tail call noundef double @_Z6gate_Cddbbb(double noundef %132, double noundef 0.000000e+00, i1 noundef zeroext %134, i1 noundef zeroext false, i1 noundef zeroext false)
  %136 = fadd double %131, %135
  %137 = fmul double %136, %127
  %138 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 8), align 8, !tbaa !26
  %139 = fmul double %138, 3.000000e+00
  %140 = getelementptr inbounds i8, ptr %0, i64 680
  store double %139, ptr %140, align 8, !tbaa !33
  %141 = fmul double %5, %138
  %142 = getelementptr inbounds i8, ptr %0, i64 840
  store double %141, ptr %142, align 8, !tbaa !33
  %143 = fmul double %10, %137
  %144 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %145 = trunc nuw i8 %144 to i1
  %146 = tail call noundef double @_Z6gate_Cddbbb(double noundef %139, double noundef 0.000000e+00, i1 noundef zeroext %145, i1 noundef zeroext false, i1 noundef zeroext false)
  %147 = load double, ptr %142, align 8, !tbaa !33
  %148 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %149 = trunc nuw i8 %148 to i1
  %150 = tail call noundef double @_Z6gate_Cddbbb(double noundef %147, double noundef 0.000000e+00, i1 noundef zeroext %149, i1 noundef zeroext false, i1 noundef zeroext false)
  %151 = fadd double %146, %150
  %152 = fdiv double %143, %151
  %153 = getelementptr inbounds i8, ptr %0, i64 344
  %154 = load i32, ptr %153, align 8, !tbaa !38
  %155 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %156 = trunc nuw i8 %155 to i1
  %157 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 16), align 8, !tbaa !36
  %158 = tail call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %0, i32 noundef %154, double noundef %10, double noundef %152, ptr noundef nonnull %140, ptr noundef nonnull %142, double noundef %137, double noundef %5, i1 noundef zeroext %156, i1 noundef zeroext false, double noundef %157)
  %159 = getelementptr inbounds i8, ptr %0, i64 336
  store i32 %158, ptr %159, align 8, !tbaa !40
  br label %212

160:                                              ; preds = %14, %14, %17
  %switch.not.not = phi i1 [ false, %17 ], [ true, %14 ], [ true, %14 ]
  %.sink54 = phi i32 [ 3, %17 ], [ 2, %14 ], [ 2, %14 ]
  %161 = getelementptr inbounds i8, ptr %0, i64 320
  store i8 0, ptr %161, align 8, !tbaa !21
  %162 = getelementptr inbounds i8, ptr %0, i64 328
  store i32 %.sink54, ptr %162, align 8, !tbaa !22
  %163 = getelementptr inbounds i8, ptr %0, i64 324
  store i32 0, ptr %163, align 4, !tbaa !23
  %164 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 8), align 8, !tbaa !26
  %165 = fmul double %5, %164
  %166 = getelementptr inbounds i8, ptr %0, i64 296
  %167 = getelementptr inbounds i8, ptr %0, i64 344
  br i1 %switch.not.not, label %168, label %190

168:                                              ; preds = %160
  %169 = fmul double %164, 2.000000e+00
  %170 = getelementptr inbounds i8, ptr %0, i64 360
  store double %169, ptr %170, align 8, !tbaa !33
  %171 = getelementptr inbounds i8, ptr %0, i64 520
  store double %165, ptr %171, align 8, !tbaa !33
  %172 = load double, ptr %166, align 8, !tbaa !34
  %173 = fmul double %8, %172
  %174 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %175 = trunc nuw i8 %174 to i1
  %176 = tail call noundef double @_Z6gate_Cddbbb(double noundef %169, double noundef 0.000000e+00, i1 noundef zeroext %175, i1 noundef zeroext false, i1 noundef zeroext false)
  %177 = load double, ptr %171, align 8, !tbaa !33
  %178 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %179 = trunc nuw i8 %178 to i1
  %180 = tail call noundef double @_Z6gate_Cddbbb(double noundef %177, double noundef 0.000000e+00, i1 noundef zeroext %179, i1 noundef zeroext false, i1 noundef zeroext false)
  %181 = fadd double %176, %180
  %182 = fdiv double %173, %181
  %183 = load i32, ptr %167, align 8, !tbaa !38
  %184 = load double, ptr %166, align 8, !tbaa !34
  %185 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %186 = trunc nuw i8 %185 to i1
  %187 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 16), align 8, !tbaa !36
  %188 = tail call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %0, i32 noundef %183, double noundef %8, double noundef %182, ptr noundef nonnull %170, ptr noundef nonnull %171, double noundef %184, double noundef %5, i1 noundef zeroext %186, i1 noundef zeroext false, double noundef %187)
  %189 = getelementptr inbounds i8, ptr %0, i64 332
  store i32 %188, ptr %189, align 4, !tbaa !39
  br label %212

190:                                              ; preds = %160
  %191 = fmul double %164, 3.000000e+00
  %192 = getelementptr inbounds i8, ptr %0, i64 680
  store double %191, ptr %192, align 8, !tbaa !33
  %193 = getelementptr inbounds i8, ptr %0, i64 840
  store double %165, ptr %193, align 8, !tbaa !33
  %194 = load double, ptr %166, align 8, !tbaa !34
  %195 = fmul double %10, %194
  %196 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %197 = trunc nuw i8 %196 to i1
  %198 = tail call noundef double @_Z6gate_Cddbbb(double noundef %191, double noundef 0.000000e+00, i1 noundef zeroext %197, i1 noundef zeroext false, i1 noundef zeroext false)
  %199 = load double, ptr %193, align 8, !tbaa !33
  %200 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %201 = trunc nuw i8 %200 to i1
  %202 = tail call noundef double @_Z6gate_Cddbbb(double noundef %199, double noundef 0.000000e+00, i1 noundef zeroext %201, i1 noundef zeroext false, i1 noundef zeroext false)
  %203 = fadd double %198, %202
  %204 = fdiv double %195, %203
  %205 = load i32, ptr %167, align 8, !tbaa !38
  %206 = load double, ptr %166, align 8, !tbaa !34
  %207 = load i8, ptr %2, align 8, !tbaa !5, !range !17, !noundef !18
  %208 = trunc nuw i8 %207 to i1
  %209 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 16), align 8, !tbaa !36
  %210 = tail call noundef i32 @_ZN9Component14logical_effortEiddPdS0_ddbbd(ptr noundef nonnull align 8 dereferenceable(280) %0, i32 noundef %205, double noundef %10, double noundef %204, ptr noundef nonnull %192, ptr noundef nonnull %193, double noundef %206, double noundef %5, i1 noundef zeroext %208, i1 noundef zeroext false, double noundef %209)
  %211 = getelementptr inbounds i8, ptr %0, i64 336
  store i32 %210, ptr %211, align 8, !tbaa !40
  br label %212

212:                                              ; preds = %124, %190, %168, %121, %1
  ret void
}

attributes #0 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress 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 = { noreturn nounwind }

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

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


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