; LLVM IR from gem5/gem5 :: ext/mcpat/cacti/parameter.ll (ZN16DynamicParameterC2Ebiidjjjjjb)

; 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.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.DynamicParameter = type <{ i8, i8, i8, i8, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, [7 x i8], double, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], double, i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], %class.Area, %class.Area, i8, [7 x i8] }>
%class.Area = type { double, double, double }
%class.InputParameter = type { i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i8, i8, i32, i32, i8, double, double, i8, i32, i32, i8 }

@g_ip = external dso_local global ptr, align 8
@g_tp = external dso_local global %class.TechnologyParameter, align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.86 = external hidden unnamed_addr constant [18 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: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16DynamicParameterC2Ebiidjjjjjb(ptr noundef nonnull align 8 dereferenceable(265) %0, i1 noundef zeroext %1, i32 noundef %2, i32 noundef %3, double noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i1 noundef zeroext %10) unnamed_addr #2 align 2 {
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i8, align 1
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  store ptr %0, ptr %12, align 8, !tbaa !5
  %34 = zext i1 %1 to i8
  store i8 %34, ptr %13, align 1, !tbaa !9
  store i32 %2, ptr %14, align 4, !tbaa !11
  store i32 %3, ptr %15, align 4, !tbaa !11
  store double %4, ptr %16, align 8, !tbaa !13
  store i32 %5, ptr %17, align 4, !tbaa !11
  store i32 %6, ptr %18, align 4, !tbaa !11
  store i32 %7, ptr %19, align 4, !tbaa !11
  store i32 %8, ptr %20, align 4, !tbaa !11
  store i32 %9, ptr %21, align 4, !tbaa !11
  %35 = zext i1 %10 to i8
  store i8 %35, ptr %22, align 1, !tbaa !9
  %36 = load ptr, ptr %12, align 8
  %37 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %38 = load i8, ptr %13, align 1, !tbaa !9, !range !15, !noundef !16
  %39 = trunc i8 %38 to i1
  %40 = zext i1 %39 to i8
  store i8 %40, ptr %37, align 8, !tbaa !17
  %41 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 1
  %42 = load i32, ptr %14, align 4, !tbaa !11
  %43 = icmp ne i32 %42, 0
  %44 = zext i1 %43 to i8
  store i8 %44, ptr %41, align 1, !tbaa !20
  %45 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %46 = load i32, ptr %15, align 4, !tbaa !11
  %47 = icmp ne i32 %46, 0
  %48 = zext i1 %47 to i8
  store i8 %48, ptr %45, align 2, !tbaa !21
  %49 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 0, ptr %49, align 4, !tbaa !22
  %50 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %51 = load double, ptr %16, align 8, !tbaa !13
  store double %51, ptr %50, align 8, !tbaa !23
  %52 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %53 = load i32, ptr %17, align 4, !tbaa !11
  store i32 %53, ptr %52, align 8, !tbaa !24
  %54 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %55 = load i32, ptr %18, align 4, !tbaa !11
  store i32 %55, ptr %54, align 4, !tbaa !25
  %56 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 10
  %57 = load i32, ptr %19, align 4, !tbaa !11
  store i32 %57, ptr %56, align 8, !tbaa !26
  %58 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %59 = load i32, ptr %20, align 4, !tbaa !11
  store i32 %59, ptr %58, align 4, !tbaa !27
  %60 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %61 = load i32, ptr %21, align 4, !tbaa !11
  store i32 %61, ptr %60, align 8, !tbaa !28
  %62 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 29
  store i32 0, ptr %62, align 4, !tbaa !29
  %63 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  store double 0.000000e+00, ptr %63, align 8, !tbaa !30
  %64 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 46
  store i32 0, ptr %64, align 8, !tbaa !31
  %65 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 53
  %66 = load i8, ptr %22, align 1, !tbaa !9, !range !15, !noundef !16
  %67 = trunc i8 %66 to i1
  %68 = zext i1 %67 to i8
  store i8 %68, ptr %65, align 4, !tbaa !32
  %69 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  call void @_ZN4AreaC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69)
  %70 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 56
  call void @_ZN4AreaC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %70)
  %71 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 57
  store i8 0, ptr %71, align 8, !tbaa !33
  %72 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %73 = load i8, ptr %72, align 8, !tbaa !17, !range !15, !noundef !16
  %74 = trunc i8 %73 to i1
  br i1 %74, label %75, label %79

75:                                               ; preds = %11
  %76 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %77 = getelementptr inbounds %class.InputParameter, ptr %76, i32 0, i32 31
  %78 = load i32, ptr %77, align 8, !tbaa !34
  br label %83

79:                                               ; preds = %11
  %80 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %81 = getelementptr inbounds %class.InputParameter, ptr %80, i32 0, i32 29
  %82 = load i32, ptr %81, align 8, !tbaa !37
  br label %83

83:                                               ; preds = %79, %75
  %84 = phi i32 [ %78, %75 ], [ %82, %79 ]
  %85 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 43
  store i32 %84, ptr %85, align 8, !tbaa !38
  %86 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 43
  %87 = load i32, ptr %86, align 8, !tbaa !38
  %88 = icmp eq i32 %87, 3
  br i1 %88, label %93, label %89

89:                                               ; preds = %83
  %90 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 43
  %91 = load i32, ptr %90, align 8, !tbaa !38
  %92 = icmp eq i32 %91, 4
  br label %93

93:                                               ; preds = %89, %83
  %94 = phi i1 [ true, %83 ], [ %92, %89 ]
  %95 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 32
  %96 = zext i1 %94 to i8
  store i8 %96, ptr %95, align 8, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %97 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %98 = getelementptr inbounds %class.InputParameter, ptr %97, i32 0, i32 0
  %99 = load i32, ptr %98, align 8, !tbaa !40
  %100 = udiv i32 %99, 1
  store i32 %100, ptr %23, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  store ptr getelementptr (i8, ptr @g_tp, i64 1200), ptr %24, align 8, !tbaa !5
  %101 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %102 = getelementptr inbounds %class.InputParameter, ptr %101, i32 0, i32 81
  %103 = load i8, ptr %102, align 1, !tbaa !41, !range !15, !noundef !16
  %104 = trunc i8 %103 to i1
  %105 = zext i1 %104 to i64
  %106 = select i1 %104, i1 true, i1 false
  %107 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %108 = zext i1 %106 to i8
  store i8 %108, ptr %107, align 1, !tbaa !42
  %109 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %110 = load i8, ptr %109, align 1, !tbaa !42, !range !15, !noundef !16
  %111 = trunc i8 %110 to i1
  br i1 %111, label %116, label %112

112:                                              ; preds = %93
  %113 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %114 = load i8, ptr %113, align 2, !tbaa !21, !range !15, !noundef !16
  %115 = trunc i8 %114 to i1
  br i1 %115, label %116, label %146

116:                                              ; preds = %112, %93
  %117 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %118 = load i32, ptr %117, align 8, !tbaa !24
  %119 = icmp ne i32 %118, 1
  br i1 %119, label %144, label %120

120:                                              ; preds = %116
  %121 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 10
  %122 = load i32, ptr %121, align 8, !tbaa !26
  %123 = icmp ne i32 %122, 1
  br i1 %123, label %144, label %124

124:                                              ; preds = %120
  %125 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %126 = load double, ptr %125, align 8, !tbaa !23
  %127 = fcmp olt double %126, 1.000000e+00
  br i1 %127, label %144, label %128

128:                                              ; preds = %124
  %129 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %130 = load double, ptr %129, align 8, !tbaa !23
  %131 = fcmp ogt double %130, 1.000000e+00
  br i1 %131, label %144, label %132

132:                                              ; preds = %128
  %133 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %134 = load i32, ptr %133, align 4, !tbaa !27
  %135 = icmp ne i32 %134, 1
  br i1 %135, label %144, label %136

136:                                              ; preds = %132
  %137 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %138 = load i32, ptr %137, align 8, !tbaa !28
  %139 = icmp ne i32 %138, 1
  br i1 %139, label %144, label %140

140:                                              ; preds = %136
  %141 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %142 = load i32, ptr %141, align 4, !tbaa !25
  %143 = icmp slt i32 %142, 2
  br i1 %143, label %144, label %145

144:                                              ; preds = %140, %136, %132, %128, %124, %120, %116
  store i32 1, ptr %25, align 4
  br label %1716

145:                                              ; preds = %140
  br label %146

146:                                              ; preds = %145, %112
  %147 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 32
  %148 = load i8, ptr %147, align 8, !tbaa !39, !range !15, !noundef !16
  %149 = trunc i8 %148 to i1
  br i1 %149, label %150, label %159

150:                                              ; preds = %146
  %151 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %152 = load i8, ptr %151, align 8, !tbaa !17, !range !15, !noundef !16
  %153 = trunc i8 %152 to i1
  br i1 %153, label %159, label %154

154:                                              ; preds = %150
  %155 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 10
  %156 = load i32, ptr %155, align 8, !tbaa !26
  %157 = icmp sgt i32 %156, 1
  br i1 %157, label %158, label %159

158:                                              ; preds = %154
  store i32 1, ptr %25, align 4
  br label %1716

159:                                              ; preds = %154, %150, %146
  %160 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %161 = load i8, ptr %160, align 1, !tbaa !42, !range !15, !noundef !16
  %162 = trunc i8 %161 to i1
  %163 = zext i1 %162 to i32
  %164 = icmp eq i32 %163, 0
  br i1 %164, label %165, label %174

165:                                              ; preds = %159
  %166 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %167 = load i32, ptr %166, align 8, !tbaa !24
  %168 = icmp slt i32 %167, 1
  br i1 %168, label %173, label %169

169:                                              ; preds = %165
  %170 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %171 = load i32, ptr %170, align 4, !tbaa !25
  %172 = icmp slt i32 %171, 1
  br i1 %172, label %173, label %174

173:                                              ; preds = %169, %165
  store i32 1, ptr %25, align 4
  br label %1716

174:                                              ; preds = %169, %159
  %175 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %176 = load i8, ptr %175, align 1, !tbaa !42, !range !15, !noundef !16
  %177 = trunc i8 %176 to i1
  br i1 %177, label %334, label %178

178:                                              ; preds = %174
  %179 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %180 = load i8, ptr %179, align 2, !tbaa !21, !range !15, !noundef !16
  %181 = trunc i8 %180 to i1
  br i1 %181, label %334, label %182

182:                                              ; preds = %178
  %183 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %184 = load i8, ptr %183, align 8, !tbaa !17, !range !15, !noundef !16
  %185 = trunc i8 %184 to i1
  br i1 %185, label %186, label %264

186:                                              ; preds = %182
  %187 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %188 = getelementptr inbounds %class.InputParameter, ptr %187, i32 0, i32 5
  %189 = load i8, ptr %188, align 4, !tbaa !43, !range !15, !noundef !16
  %190 = trunc i8 %189 to i1
  br i1 %190, label %191, label %196

191:                                              ; preds = %186
  %192 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %193 = getelementptr inbounds %class.InputParameter, ptr %192, i32 0, i32 6
  %194 = load i32, ptr %193, align 8, !tbaa !44
  %195 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %194, ptr %195, align 4, !tbaa !22
  br label %216

196:                                              ; preds = %186
  %197 = load i32, ptr %23, align 4, !tbaa !11
  %198 = zext i32 %197 to i64
  %199 = call noundef i32 @_Z5_log2m(i64 noundef %198)
  %200 = sub i32 47, %199
  %201 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %202 = getelementptr inbounds %class.InputParameter, ptr %201, i32 0, i32 78
  %203 = load i32, ptr %202, align 4, !tbaa !45
  %204 = mul i32 %203, 2
  %205 = sub i32 %204, 1
  %206 = zext i32 %205 to i64
  %207 = call noundef i32 @_Z5_log2m(i64 noundef %206)
  %208 = add i32 %200, %207
  %209 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %210 = getelementptr inbounds %class.InputParameter, ptr %209, i32 0, i32 3
  %211 = load i32, ptr %210, align 4, !tbaa !46
  %212 = zext i32 %211 to i64
  %213 = call noundef i32 @_Z5_log2m(i64 noundef %212)
  %214 = sub i32 %208, %213
  %215 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %214, ptr %215, align 4, !tbaa !22
  br label %216

216:                                              ; preds = %196, %191
  %217 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %218 = load i32, ptr %217, align 4, !tbaa !22
  %219 = add nsw i32 %218, 3
  %220 = ashr i32 %219, 2
  %221 = shl i32 %220, 2
  %222 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %221, ptr %222, align 4, !tbaa !22
  %223 = load i32, ptr %23, align 4, !tbaa !11
  %224 = uitofp i32 %223 to double
  %225 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %226 = getelementptr inbounds %class.InputParameter, ptr %225, i32 0, i32 3
  %227 = load i32, ptr %226, align 4, !tbaa !46
  %228 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %229 = getelementptr inbounds %class.InputParameter, ptr %228, i32 0, i32 77
  %230 = load i32, ptr %229, align 8, !tbaa !47
  %231 = mul i32 %227, %230
  %232 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %233 = getelementptr inbounds %class.InputParameter, ptr %232, i32 0, i32 78
  %234 = load i32, ptr %233, align 4, !tbaa !45
  %235 = mul i32 %231, %234
  %236 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %237 = load i32, ptr %236, align 4, !tbaa !25
  %238 = mul i32 %235, %237
  %239 = uitofp i32 %238 to double
  %240 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %241 = load double, ptr %240, align 8, !tbaa !23
  %242 = fmul double %239, %241
  %243 = fdiv double %224, %242
  %244 = call double @llvm.ceil.f64(double %243)
  %245 = fptosi double %244 to i32
  %246 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  store i32 %245, ptr %246, align 8, !tbaa !48
  %247 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %248 = load i32, ptr %247, align 4, !tbaa !22
  %249 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %250 = getelementptr inbounds %class.InputParameter, ptr %249, i32 0, i32 78
  %251 = load i32, ptr %250, align 4, !tbaa !45
  %252 = mul i32 %248, %251
  %253 = uitofp i32 %252 to double
  %254 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %255 = load double, ptr %254, align 8, !tbaa !23
  %256 = fmul double %253, %255
  %257 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %258 = load i32, ptr %257, align 8, !tbaa !24
  %259 = sitofp i32 %258 to double
  %260 = fdiv double %256, %259
  %261 = call double @llvm.ceil.f64(double %260)
  %262 = fptosi double %261 to i32
  %263 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 36
  store i32 %262, ptr %263, align 4, !tbaa !49
  br label %308

264:                                              ; preds = %182
  %265 = load i32, ptr %23, align 4, !tbaa !11
  %266 = uitofp i32 %265 to double
  %267 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %268 = getelementptr inbounds %class.InputParameter, ptr %267, i32 0, i32 3
  %269 = load i32, ptr %268, align 4, !tbaa !46
  %270 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %271 = getelementptr inbounds %class.InputParameter, ptr %270, i32 0, i32 77
  %272 = load i32, ptr %271, align 8, !tbaa !47
  %273 = mul i32 %269, %272
  %274 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %275 = getelementptr inbounds %class.InputParameter, ptr %274, i32 0, i32 79
  %276 = load i32, ptr %275, align 8, !tbaa !50
  %277 = mul i32 %273, %276
  %278 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %279 = load i32, ptr %278, align 4, !tbaa !25
  %280 = mul i32 %277, %279
  %281 = uitofp i32 %280 to double
  %282 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %283 = load double, ptr %282, align 8, !tbaa !23
  %284 = fmul double %281, %283
  %285 = fdiv double %266, %284
  %286 = call double @llvm.ceil.f64(double %285)
  %287 = fptosi double %286 to i32
  %288 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  store i32 %287, ptr %288, align 8, !tbaa !48
  %289 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %290 = getelementptr inbounds %class.InputParameter, ptr %289, i32 0, i32 77
  %291 = load i32, ptr %290, align 8, !tbaa !47
  %292 = mul i32 8, %291
  %293 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %294 = getelementptr inbounds %class.InputParameter, ptr %293, i32 0, i32 79
  %295 = load i32, ptr %294, align 8, !tbaa !50
  %296 = mul i32 %292, %295
  %297 = uitofp i32 %296 to double
  %298 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %299 = load double, ptr %298, align 8, !tbaa !23
  %300 = fmul double %297, %299
  %301 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %302 = load i32, ptr %301, align 8, !tbaa !24
  %303 = sitofp i32 %302 to double
  %304 = fdiv double %300, %303
  %305 = call double @llvm.ceil.f64(double %304)
  %306 = fptosi double %305 to i32
  %307 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 36
  store i32 %306, ptr %307, align 4, !tbaa !49
  br label %308

308:                                              ; preds = %264, %216
  %309 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %310 = load i32, ptr %309, align 8, !tbaa !48
  %311 = icmp ult i32 %310, 16
  br i1 %311, label %312, label %313

312:                                              ; preds = %308
  store i32 1, ptr %25, align 4
  br label %1716

313:                                              ; preds = %308
  %314 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %315 = load i32, ptr %314, align 8, !tbaa !48
  %316 = icmp eq i32 %315, 0
  br i1 %316, label %317, label %318

317:                                              ; preds = %313
  store i32 1, ptr %25, align 4
  br label %1716

318:                                              ; preds = %313
  %319 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %320 = load i32, ptr %319, align 8, !tbaa !48
  %321 = icmp ugt i32 %320, 262144
  br i1 %321, label %322, label %323

322:                                              ; preds = %318
  store i32 1, ptr %25, align 4
  br label %1716

323:                                              ; preds = %318
  %324 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 36
  %325 = load i32, ptr %324, align 4, !tbaa !49
  %326 = icmp ult i32 %325, 2
  br i1 %326, label %327, label %328

327:                                              ; preds = %323
  store i32 1, ptr %25, align 4
  br label %1716

328:                                              ; preds = %323
  %329 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 36
  %330 = load i32, ptr %329, align 4, !tbaa !49
  %331 = icmp ugt i32 %330, 262144
  br i1 %331, label %332, label %333

332:                                              ; preds = %328
  store i32 1, ptr %25, align 4
  br label %1716

333:                                              ; preds = %328
  br label %506

334:                                              ; preds = %178, %174
  %335 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %336 = load i8, ptr %335, align 2, !tbaa !21, !range !15, !noundef !16
  %337 = trunc i8 %336 to i1
  br i1 %337, label %338, label %403

338:                                              ; preds = %334
  %339 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %340 = getelementptr inbounds %class.InputParameter, ptr %339, i32 0, i32 5
  %341 = load i8, ptr %340, align 4, !tbaa !43, !range !15, !noundef !16
  %342 = trunc i8 %341 to i1
  br i1 %342, label %343, label %353

343:                                              ; preds = %338
  %344 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %345 = getelementptr inbounds %class.InputParameter, ptr %344, i32 0, i32 6
  %346 = load i32, ptr %345, align 8, !tbaa !44
  %347 = uitofp i32 %346 to double
  %348 = fdiv double %347, 8.000000e+00
  %349 = call double @llvm.ceil.f64(double %348)
  %350 = fmul double %349, 8.000000e+00
  %351 = fptosi double %350 to i32
  %352 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %351, ptr %352, align 4, !tbaa !22
  br label %358

353:                                              ; preds = %338
  %354 = call double @llvm.ceil.f64(double 5.875000e+00)
  %355 = fmul double %354, 8.000000e+00
  %356 = fptosi double %355 to i32
  %357 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %356, ptr %357, align 4, !tbaa !22
  br label %358

358:                                              ; preds = %353, %343
  %359 = load i32, ptr %23, align 4, !tbaa !11
  %360 = uitofp i32 %359 to double
  %361 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %362 = getelementptr inbounds %class.InputParameter, ptr %361, i32 0, i32 3
  %363 = load i32, ptr %362, align 4, !tbaa !46
  %364 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %365 = load i32, ptr %364, align 4, !tbaa !22
  %366 = mul i32 %363, %365
  %367 = uitofp i32 %366 to double
  %368 = fdiv double %367, 8.000000e+00
  %369 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %370 = load i32, ptr %369, align 4, !tbaa !25
  %371 = sitofp i32 %370 to double
  %372 = fmul double %368, %371
  %373 = fdiv double %360, %372
  %374 = call double @llvm.ceil.f64(double %373)
  %375 = fptosi double %374 to i32
  %376 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  store i32 %375, ptr %376, align 8, !tbaa !51
  %377 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %378 = load i32, ptr %377, align 4, !tbaa !22
  %379 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  store i32 %378, ptr %379, align 4, !tbaa !52
  %380 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  %381 = load i32, ptr %380, align 8, !tbaa !51
  %382 = icmp eq i32 %381, 0
  br i1 %382, label %383, label %384

383:                                              ; preds = %358
  store i32 1, ptr %25, align 4
  br label %1716

384:                                              ; preds = %358
  %385 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  %386 = load i32, ptr %385, align 8, !tbaa !51
  %387 = icmp sgt i32 %386, 262144
  br i1 %387, label %388, label %389

388:                                              ; preds = %384
  store i32 1, ptr %25, align 4
  br label %1716

389:                                              ; preds = %384
  %390 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  %391 = load i32, ptr %390, align 4, !tbaa !52
  %392 = icmp slt i32 %391, 2
  br i1 %392, label %393, label %394

393:                                              ; preds = %389
  store i32 1, ptr %25, align 4
  br label %1716

394:                                              ; preds = %389
  %395 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  %396 = load i32, ptr %395, align 4, !tbaa !52
  %397 = icmp sgt i32 %396, 262144
  br i1 %397, label %398, label %399

398:                                              ; preds = %394
  store i32 1, ptr %25, align 4
  br label %1716

399:                                              ; preds = %394
  %400 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  %401 = load i32, ptr %400, align 8, !tbaa !51
  %402 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  store i32 %401, ptr %402, align 8, !tbaa !48
  br label %505

403:                                              ; preds = %334
  %404 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %405 = getelementptr inbounds %class.InputParameter, ptr %404, i32 0, i32 5
  %406 = load i8, ptr %405, align 4, !tbaa !43, !range !15, !noundef !16
  %407 = trunc i8 %406 to i1
  br i1 %407, label %408, label %413

408:                                              ; preds = %403
  %409 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %410 = getelementptr inbounds %class.InputParameter, ptr %409, i32 0, i32 6
  %411 = load i32, ptr %410, align 8, !tbaa !44
  %412 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %411, ptr %412, align 4, !tbaa !22
  br label %421

413:                                              ; preds = %403
  %414 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %415 = getelementptr inbounds %class.InputParameter, ptr %414, i32 0, i32 77
  %416 = load i32, ptr %415, align 8, !tbaa !47
  %417 = zext i32 %416 to i64
  %418 = call noundef i32 @_Z5_log2m(i64 noundef %417)
  %419 = sub i32 47, %418
  %420 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %419, ptr %420, align 4, !tbaa !22
  br label %421

421:                                              ; preds = %413, %408
  %422 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %423 = load i32, ptr %422, align 4, !tbaa !22
  %424 = add nsw i32 %423, 3
  %425 = ashr i32 %424, 2
  %426 = shl i32 %425, 2
  %427 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  store i32 %426, ptr %427, align 4, !tbaa !22
  %428 = load i32, ptr %23, align 4, !tbaa !11
  %429 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %430 = getelementptr inbounds %class.InputParameter, ptr %429, i32 0, i32 3
  %431 = load i32, ptr %430, align 4, !tbaa !46
  %432 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %433 = getelementptr inbounds %class.InputParameter, ptr %432, i32 0, i32 77
  %434 = load i32, ptr %433, align 8, !tbaa !47
  %435 = mul i32 %431, %434
  %436 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %437 = load i32, ptr %436, align 4, !tbaa !25
  %438 = mul i32 %435, %437
  %439 = udiv i32 %428, %438
  %440 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  store i32 %439, ptr %440, align 8, !tbaa !51
  %441 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %442 = load i32, ptr %441, align 4, !tbaa !22
  %443 = sitofp i32 %442 to double
  %444 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 7
  %445 = load double, ptr %444, align 8, !tbaa !23
  %446 = fmul double %443, %445
  %447 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %448 = load i32, ptr %447, align 8, !tbaa !24
  %449 = sitofp i32 %448 to double
  %450 = fdiv double %446, %449
  %451 = call double @llvm.ceil.f64(double %450)
  %452 = fptosi double %451 to i32
  %453 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  store i32 %452, ptr %453, align 4, !tbaa !52
  %454 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  %455 = load i32, ptr %454, align 8, !tbaa !51
  %456 = icmp eq i32 %455, 0
  br i1 %456, label %457, label %458

457:                                              ; preds = %421
  store i32 1, ptr %25, align 4
  br label %1716

458:                                              ; preds = %421
  %459 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  %460 = load i32, ptr %459, align 8, !tbaa !51
  %461 = icmp sgt i32 %460, 262144
  br i1 %461, label %462, label %463

462:                                              ; preds = %458
  store i32 1, ptr %25, align 4
  br label %1716

463:                                              ; preds = %458
  %464 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  %465 = load i32, ptr %464, align 4, !tbaa !52
  %466 = icmp slt i32 %465, 2
  br i1 %466, label %467, label %468

467:                                              ; preds = %463
  store i32 1, ptr %25, align 4
  br label %1716

468:                                              ; preds = %463
  %469 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  %470 = load i32, ptr %469, align 4, !tbaa !52
  %471 = icmp sgt i32 %470, 262144
  br i1 %471, label %472, label %473

472:                                              ; preds = %468
  store i32 1, ptr %25, align 4
  br label %1716

473:                                              ; preds = %468
  %474 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  %475 = load i32, ptr %474, align 8, !tbaa !51
  %476 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 39
  store i32 %475, ptr %476, align 8, !tbaa !53
  %477 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %478 = getelementptr inbounds %class.InputParameter, ptr %477, i32 0, i32 77
  %479 = load i32, ptr %478, align 8, !tbaa !47
  %480 = mul i32 8, %479
  %481 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 40
  store i32 %480, ptr %481, align 4, !tbaa !54
  %482 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 39
  %483 = load i32, ptr %482, align 8, !tbaa !53
  %484 = icmp eq i32 %483, 0
  br i1 %484, label %485, label %486

485:                                              ; preds = %473
  store i32 1, ptr %25, align 4
  br label %1716

486:                                              ; preds = %473
  %487 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 39
  %488 = load i32, ptr %487, align 8, !tbaa !53
  %489 = icmp sgt i32 %488, 262144
  br i1 %489, label %490, label %491

490:                                              ; preds = %486
  store i32 1, ptr %25, align 4
  br label %1716

491:                                              ; preds = %486
  %492 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 40
  %493 = load i32, ptr %492, align 4, !tbaa !54
  %494 = icmp slt i32 %493, 2
  br i1 %494, label %495, label %496

495:                                              ; preds = %491
  store i32 1, ptr %25, align 4
  br label %1716

496:                                              ; preds = %491
  %497 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 40
  %498 = load i32, ptr %497, align 4, !tbaa !54
  %499 = icmp sgt i32 %498, 262144
  br i1 %499, label %500, label %501

500:                                              ; preds = %496
  store i32 1, ptr %25, align 4
  br label %1716

501:                                              ; preds = %496
  %502 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 37
  %503 = load i32, ptr %502, align 8, !tbaa !51
  %504 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  store i32 %503, ptr %504, align 8, !tbaa !48
  br label %505

505:                                              ; preds = %501, %399
  br label %506

506:                                              ; preds = %505, %333
  %507 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %508 = load i32, ptr %507, align 8, !tbaa !24
  %509 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %510 = load i32, ptr %509, align 4, !tbaa !25
  %511 = mul nsw i32 %508, %510
  %512 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  store i32 %511, ptr %512, align 8, !tbaa !55
  %513 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %514 = load i8, ptr %513, align 1, !tbaa !42, !range !15, !noundef !16
  %515 = trunc i8 %514 to i1
  br i1 %515, label %520, label %516

516:                                              ; preds = %506
  %517 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %518 = load i8, ptr %517, align 2, !tbaa !21, !range !15, !noundef !16
  %519 = trunc i8 %518 to i1
  br i1 %519, label %520, label %651

520:                                              ; preds = %516, %506
  %521 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 1), align 8, !tbaa !56
  %522 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %523 = fmul double 2.000000e+00, %522
  %524 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %525 = getelementptr inbounds %class.InputParameter, ptr %524, i32 0, i32 14
  %526 = load i32, ptr %525, align 8, !tbaa !64
  %527 = sub i32 %526, 1
  %528 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %529 = getelementptr inbounds %class.InputParameter, ptr %528, i32 0, i32 15
  %530 = load i32, ptr %529, align 4, !tbaa !65
  %531 = add i32 %527, %530
  %532 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %533 = getelementptr inbounds %class.InputParameter, ptr %532, i32 0, i32 16
  %534 = load i32, ptr %533, align 8, !tbaa !66
  %535 = add i32 %531, %534
  %536 = uitofp i32 %535 to double
  %537 = call double @llvm.fmuladd.f64(double %523, double %536, double %521)
  %538 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %539 = fmul double 2.000000e+00, %538
  %540 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %541 = getelementptr inbounds %class.InputParameter, ptr %540, i32 0, i32 18
  %542 = load i32, ptr %541, align 8, !tbaa !67
  %543 = sub i32 %542, 1
  %544 = uitofp i32 %543 to double
  %545 = call double @llvm.fmuladd.f64(double %539, double %544, double %537)
  %546 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %547 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %548 = getelementptr inbounds %class.InputParameter, ptr %547, i32 0, i32 17
  %549 = load i32, ptr %548, align 4, !tbaa !68
  %550 = uitofp i32 %549 to double
  %551 = call double @llvm.fmuladd.f64(double %546, double %550, double %545)
  %552 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 56
  %553 = getelementptr inbounds %class.Area, ptr %552, i32 0, i32 1
  store double %551, ptr %553, align 8, !tbaa !69
  %554 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), align 8, !tbaa !70
  %555 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %556 = fmul double 2.000000e+00, %555
  %557 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %558 = getelementptr inbounds %class.InputParameter, ptr %557, i32 0, i32 14
  %559 = load i32, ptr %558, align 8, !tbaa !64
  %560 = sub i32 %559, 1
  %561 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %562 = getelementptr inbounds %class.InputParameter, ptr %561, i32 0, i32 15
  %563 = load i32, ptr %562, align 4, !tbaa !65
  %564 = add i32 %560, %563
  %565 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %566 = getelementptr inbounds %class.InputParameter, ptr %565, i32 0, i32 16
  %567 = load i32, ptr %566, align 8, !tbaa !66
  %568 = add i32 %564, %567
  %569 = uitofp i32 %568 to double
  %570 = call double @llvm.fmuladd.f64(double %556, double %569, double %554)
  %571 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %572 = fmul double 2.000000e+00, %571
  %573 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %574 = getelementptr inbounds %class.InputParameter, ptr %573, i32 0, i32 18
  %575 = load i32, ptr %574, align 8, !tbaa !67
  %576 = sub i32 %575, 1
  %577 = uitofp i32 %576 to double
  %578 = call double @llvm.fmuladd.f64(double %572, double %577, double %570)
  %579 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %580 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %581 = getelementptr inbounds %class.InputParameter, ptr %580, i32 0, i32 17
  %582 = load i32, ptr %581, align 4, !tbaa !68
  %583 = uitofp i32 %582 to double
  %584 = call double @llvm.fmuladd.f64(double %579, double %583, double %578)
  %585 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 56
  %586 = getelementptr inbounds %class.Area, ptr %585, i32 0, i32 0
  store double %584, ptr %586, align 8, !tbaa !71
  %587 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 54), i32 0, i32 1), align 8, !tbaa !72
  %588 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %589 = fmul double 2.000000e+00, %588
  %590 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %591 = getelementptr inbounds %class.InputParameter, ptr %590, i32 0, i32 16
  %592 = load i32, ptr %591, align 8, !tbaa !66
  %593 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %594 = getelementptr inbounds %class.InputParameter, ptr %593, i32 0, i32 14
  %595 = load i32, ptr %594, align 8, !tbaa !64
  %596 = add i32 %592, %595
  %597 = sub i32 %596, 1
  %598 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %599 = getelementptr inbounds %class.InputParameter, ptr %598, i32 0, i32 15
  %600 = load i32, ptr %599, align 4, !tbaa !65
  %601 = add i32 %597, %600
  %602 = uitofp i32 %601 to double
  %603 = call double @llvm.fmuladd.f64(double %589, double %602, double %587)
  %604 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %605 = fmul double 2.000000e+00, %604
  %606 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %607 = getelementptr inbounds %class.InputParameter, ptr %606, i32 0, i32 18
  %608 = load i32, ptr %607, align 8, !tbaa !67
  %609 = sub i32 %608, 1
  %610 = uitofp i32 %609 to double
  %611 = call double @llvm.fmuladd.f64(double %605, double %610, double %603)
  %612 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %613 = getelementptr inbounds %class.Area, ptr %612, i32 0, i32 1
  store double %611, ptr %613, align 8, !tbaa !73
  %614 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 54), align 8, !tbaa !74
  %615 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %616 = fmul double 2.000000e+00, %615
  %617 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %618 = getelementptr inbounds %class.InputParameter, ptr %617, i32 0, i32 14
  %619 = load i32, ptr %618, align 8, !tbaa !64
  %620 = sub i32 %619, 1
  %621 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %622 = getelementptr inbounds %class.InputParameter, ptr %621, i32 0, i32 15
  %623 = load i32, ptr %622, align 4, !tbaa !65
  %624 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %625 = getelementptr inbounds %class.InputParameter, ptr %624, i32 0, i32 17
  %626 = load i32, ptr %625, align 4, !tbaa !68
  %627 = sub i32 %623, %626
  %628 = add i32 %620, %627
  %629 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %630 = getelementptr inbounds %class.InputParameter, ptr %629, i32 0, i32 16
  %631 = load i32, ptr %630, align 8, !tbaa !66
  %632 = add i32 %628, %631
  %633 = uitofp i32 %632 to double
  %634 = call double @llvm.fmuladd.f64(double %616, double %633, double %614)
  %635 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), align 8, !tbaa !75
  %636 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %637 = getelementptr inbounds %class.InputParameter, ptr %636, i32 0, i32 17
  %638 = load i32, ptr %637, align 4, !tbaa !68
  %639 = uitofp i32 %638 to double
  %640 = call double @llvm.fmuladd.f64(double %635, double %639, double %634)
  %641 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %642 = fmul double 2.000000e+00, %641
  %643 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %644 = getelementptr inbounds %class.InputParameter, ptr %643, i32 0, i32 18
  %645 = load i32, ptr %644, align 8, !tbaa !67
  %646 = sub i32 %645, 1
  %647 = uitofp i32 %646 to double
  %648 = call double @llvm.fmuladd.f64(double %642, double %647, double %640)
  %649 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %650 = getelementptr inbounds %class.Area, ptr %649, i32 0, i32 0
  store double %648, ptr %650, align 8, !tbaa !76
  br label %766

651:                                              ; preds = %516
  %652 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %653 = load i8, ptr %652, align 8, !tbaa !17, !range !15, !noundef !16
  %654 = trunc i8 %653 to i1
  br i1 %654, label %655, label %704

655:                                              ; preds = %651
  %656 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 54), i32 0, i32 1), align 8, !tbaa !72
  %657 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %658 = fmul double 2.000000e+00, %657
  %659 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %660 = getelementptr inbounds %class.InputParameter, ptr %659, i32 0, i32 14
  %661 = load i32, ptr %660, align 8, !tbaa !64
  %662 = sub i32 %661, 1
  %663 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %664 = getelementptr inbounds %class.InputParameter, ptr %663, i32 0, i32 15
  %665 = load i32, ptr %664, align 4, !tbaa !65
  %666 = add i32 %662, %665
  %667 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %668 = getelementptr inbounds %class.InputParameter, ptr %667, i32 0, i32 16
  %669 = load i32, ptr %668, align 8, !tbaa !66
  %670 = add i32 %666, %669
  %671 = uitofp i32 %670 to double
  %672 = call double @llvm.fmuladd.f64(double %658, double %671, double %656)
  %673 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %674 = getelementptr inbounds %class.Area, ptr %673, i32 0, i32 1
  store double %672, ptr %674, align 8, !tbaa !73
  %675 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 54), align 8, !tbaa !74
  %676 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %677 = fmul double 2.000000e+00, %676
  %678 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %679 = getelementptr inbounds %class.InputParameter, ptr %678, i32 0, i32 14
  %680 = load i32, ptr %679, align 8, !tbaa !64
  %681 = sub i32 %680, 1
  %682 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %683 = getelementptr inbounds %class.InputParameter, ptr %682, i32 0, i32 16
  %684 = load i32, ptr %683, align 8, !tbaa !66
  %685 = add i32 %681, %684
  %686 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %687 = getelementptr inbounds %class.InputParameter, ptr %686, i32 0, i32 15
  %688 = load i32, ptr %687, align 4, !tbaa !65
  %689 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %690 = getelementptr inbounds %class.InputParameter, ptr %689, i32 0, i32 17
  %691 = load i32, ptr %690, align 4, !tbaa !68
  %692 = sub i32 %688, %691
  %693 = add i32 %685, %692
  %694 = uitofp i32 %693 to double
  %695 = call double @llvm.fmuladd.f64(double %677, double %694, double %675)
  %696 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %697 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %698 = getelementptr inbounds %class.InputParameter, ptr %697, i32 0, i32 17
  %699 = load i32, ptr %698, align 4, !tbaa !68
  %700 = uitofp i32 %699 to double
  %701 = call double @llvm.fmuladd.f64(double %696, double %700, double %695)
  %702 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %703 = getelementptr inbounds %class.Area, ptr %702, i32 0, i32 0
  store double %701, ptr %703, align 8, !tbaa !76
  br label %765

704:                                              ; preds = %651
  %705 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 32
  %706 = load i8, ptr %705, align 8, !tbaa !39, !range !15, !noundef !16
  %707 = trunc i8 %706 to i1
  br i1 %707, label %708, label %715

708:                                              ; preds = %704
  %709 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 55), i32 0, i32 1), align 8, !tbaa !77
  %710 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %711 = getelementptr inbounds %class.Area, ptr %710, i32 0, i32 1
  store double %709, ptr %711, align 8, !tbaa !73
  %712 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 55), align 8, !tbaa !78
  %713 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %714 = getelementptr inbounds %class.Area, ptr %713, i32 0, i32 0
  store double %712, ptr %714, align 8, !tbaa !76
  br label %764

715:                                              ; preds = %704
  %716 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 54), i32 0, i32 1), align 8, !tbaa !72
  %717 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %718 = fmul double 2.000000e+00, %717
  %719 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %720 = getelementptr inbounds %class.InputParameter, ptr %719, i32 0, i32 16
  %721 = load i32, ptr %720, align 8, !tbaa !66
  %722 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %723 = getelementptr inbounds %class.InputParameter, ptr %722, i32 0, i32 14
  %724 = load i32, ptr %723, align 8, !tbaa !64
  %725 = add i32 %721, %724
  %726 = sub i32 %725, 1
  %727 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %728 = getelementptr inbounds %class.InputParameter, ptr %727, i32 0, i32 15
  %729 = load i32, ptr %728, align 4, !tbaa !65
  %730 = add i32 %726, %729
  %731 = uitofp i32 %730 to double
  %732 = call double @llvm.fmuladd.f64(double %718, double %731, double %716)
  %733 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %734 = getelementptr inbounds %class.Area, ptr %733, i32 0, i32 1
  store double %732, ptr %734, align 8, !tbaa !73
  %735 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 54), align 8, !tbaa !74
  %736 = load double, ptr getelementptr (i8, ptr @g_tp, i64 1200), align 8, !tbaa !63
  %737 = fmul double 2.000000e+00, %736
  %738 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %739 = getelementptr inbounds %class.InputParameter, ptr %738, i32 0, i32 14
  %740 = load i32, ptr %739, align 8, !tbaa !64
  %741 = sub i32 %740, 1
  %742 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %743 = getelementptr inbounds %class.InputParameter, ptr %742, i32 0, i32 15
  %744 = load i32, ptr %743, align 4, !tbaa !65
  %745 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %746 = getelementptr inbounds %class.InputParameter, ptr %745, i32 0, i32 17
  %747 = load i32, ptr %746, align 4, !tbaa !68
  %748 = sub i32 %744, %747
  %749 = add i32 %741, %748
  %750 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %751 = getelementptr inbounds %class.InputParameter, ptr %750, i32 0, i32 16
  %752 = load i32, ptr %751, align 8, !tbaa !66
  %753 = add i32 %749, %752
  %754 = uitofp i32 %753 to double
  %755 = call double @llvm.fmuladd.f64(double %737, double %754, double %735)
  %756 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), align 8, !tbaa !75
  %757 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %758 = getelementptr inbounds %class.InputParameter, ptr %757, i32 0, i32 17
  %759 = load i32, ptr %758, align 4, !tbaa !68
  %760 = uitofp i32 %759 to double
  %761 = call double @llvm.fmuladd.f64(double %756, double %760, double %755)
  %762 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %763 = getelementptr inbounds %class.Area, ptr %762, i32 0, i32 0
  store double %761, ptr %763, align 8, !tbaa !76
  br label %764

764:                                              ; preds = %715, %708
  br label %765

765:                                              ; preds = %764, %655
  br label %766

766:                                              ; preds = %765, %520
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %767 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %768 = getelementptr inbounds %class.Area, ptr %767, i32 0, i32 1
  %769 = load double, ptr %768, align 8, !tbaa !73
  %770 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr (i8, ptr @g_tp, i64 1200), i32 0, i32 2), align 8, !tbaa !79
  %771 = fmul double %769, %770
  store double %771, ptr %26, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %772 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %773 = load i8, ptr %772, align 1, !tbaa !42, !range !15, !noundef !16
  %774 = trunc i8 %773 to i1
  br i1 %774, label %880, label %775

775:                                              ; preds = %766
  %776 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %777 = load i8, ptr %776, align 2, !tbaa !21, !range !15, !noundef !16
  %778 = trunc i8 %777 to i1
  br i1 %778, label %880, label %779

779:                                              ; preds = %775
  %780 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 32
  %781 = load i8, ptr %780, align 8, !tbaa !39, !range !15, !noundef !16
  %782 = trunc i8 %781 to i1
  br i1 %782, label %783, label %851

783:                                              ; preds = %779
  %784 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  store i32 1, ptr %784, align 4, !tbaa !80
  %785 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 43
  %786 = load i32, ptr %785, align 8, !tbaa !38
  %787 = icmp eq i32 %786, 4
  br i1 %787, label %788, label %810

788:                                              ; preds = %783
  %789 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %790 = load i32, ptr %789, align 8, !tbaa !48
  %791 = uitofp i32 %790 to double
  %792 = load double, ptr %26, align 8, !tbaa !13
  %793 = fmul double %791, %792
  store double %793, ptr %27, align 8, !tbaa !13
  %794 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 28), align 8, !tbaa !81
  %795 = fdiv double %794, 2.000000e+00
  %796 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 30), align 8, !tbaa !82
  %797 = fmul double %795, %796
  %798 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 30), align 8, !tbaa !82
  %799 = load double, ptr %27, align 8, !tbaa !13
  %800 = fadd double %798, %799
  %801 = fdiv double %797, %800
  %802 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  store double %801, ptr %802, align 8, !tbaa !30
  %803 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  %804 = load double, ptr %803, align 8, !tbaa !30
  %805 = fcmp olt double %804, 8.000000e-02
  br i1 %805, label %806, label %807

806:                                              ; preds = %788
  store i32 1, ptr %25, align 4
  br label %1715

807:                                              ; preds = %788
  %808 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  store double 8.000000e-02, ptr %808, align 8, !tbaa !30
  %809 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 45
  store double 6.400000e-02, ptr %809, align 8, !tbaa !83
  br label %850

810:                                              ; preds = %783
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %811 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 55), i32 0, i32 2), align 8, !tbaa !84
  %812 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %813 = getelementptr inbounds %class.Area, ptr %812, i32 0, i32 0
  %814 = load double, ptr %813, align 8, !tbaa !76
  %815 = call noundef double @_Z8drain_C_diiidbbb(double noundef %811, i32 noundef 1, i32 noundef 1, i32 noundef 0, double noundef %814, i1 noundef zeroext true, i1 noundef zeroext true, i1 noundef zeroext false)
  %816 = fdiv double %815, 2.000000e+00
  store double %816, ptr %28, align 8, !tbaa !13
  %817 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %818 = load i32, ptr %817, align 8, !tbaa !48
  %819 = uitofp i32 %818 to double
  %820 = load double, ptr %28, align 8, !tbaa !13
  %821 = load double, ptr %26, align 8, !tbaa !13
  %822 = fadd double %820, %821
  %823 = fmul double %819, %822
  store double %823, ptr %27, align 8, !tbaa !13
  %824 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 28), align 8, !tbaa !81
  %825 = fdiv double %824, 2.000000e+00
  %826 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 30), align 8, !tbaa !82
  %827 = fmul double %825, %826
  %828 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 30), align 8, !tbaa !82
  %829 = load double, ptr %27, align 8, !tbaa !13
  %830 = fadd double %828, %829
  %831 = fdiv double %827, %830
  %832 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  store double %831, ptr %832, align 8, !tbaa !30
  %833 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  %834 = load double, ptr %833, align 8, !tbaa !30
  %835 = fcmp olt double %834, 8.000000e-02
  br i1 %835, label %836, label %837

836:                                              ; preds = %810
  store i32 1, ptr %25, align 4
  br label %847

837:                                              ; preds = %810
  %838 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  store double 8.000000e-02, ptr %838, align 8, !tbaa !30
  %839 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 30), align 8, !tbaa !82
  %840 = fmul double 9.000000e-01, %839
  %841 = fmul double %840, 1.250000e-01
  %842 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 28), align 8, !tbaa !81
  %843 = fmul double %841, %842
  %844 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 29), align 8, !tbaa !85
  %845 = fdiv double %843, %844
  %846 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 45
  store double %845, ptr %846, align 8, !tbaa !83
  store i32 0, ptr %25, align 4
  br label %847

847:                                              ; preds = %837, %836
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  %848 = load i32, ptr %25, align 4
  switch i32 %848, label %1715 [
    i32 0, label %849
  ]

849:                                              ; preds = %847
  br label %850

850:                                              ; preds = %849, %807
  br label %879

851:                                              ; preds = %779
  %852 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 45), i32 0, i32 9), align 8, !tbaa !86
  %853 = fmul double 5.000000e-02, %852
  %854 = fcmp ogt double %853, 8.000000e-02
  br i1 %854, label %855, label %858

855:                                              ; preds = %851
  %856 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 45), i32 0, i32 9), align 8, !tbaa !86
  %857 = fmul double 5.000000e-02, %856
  br label %859

858:                                              ; preds = %851
  br label %859

859:                                              ; preds = %858, %855
  %860 = phi double [ %857, %855 ], [ 8.000000e-02, %858 ]
  %861 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  store double %860, ptr %861, align 8, !tbaa !30
  %862 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 10
  %863 = load i32, ptr %862, align 8, !tbaa !26
  %864 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  store i32 %863, ptr %864, align 4, !tbaa !80
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %865 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 54), i32 0, i32 2), align 8, !tbaa !87
  %866 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 55
  %867 = getelementptr inbounds %class.Area, ptr %866, i32 0, i32 0
  %868 = load double, ptr %867, align 8, !tbaa !76
  %869 = call noundef double @_Z8drain_C_diiidbbb(double noundef %865, i32 noundef 1, i32 noundef 1, i32 noundef 0, double noundef %868, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false)
  %870 = fdiv double %869, 2.000000e+00
  store double %870, ptr %29, align 8, !tbaa !13
  %871 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %872 = load i32, ptr %871, align 8, !tbaa !48
  %873 = uitofp i32 %872 to double
  %874 = load double, ptr %29, align 8, !tbaa !13
  %875 = load double, ptr %26, align 8, !tbaa !13
  %876 = fadd double %874, %875
  %877 = fmul double %873, %876
  store double %877, ptr %27, align 8, !tbaa !13
  %878 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 45
  store double 0.000000e+00, ptr %878, align 8, !tbaa !83
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %879

879:                                              ; preds = %859, %850
  br label %911

880:                                              ; preds = %775, %766
  %881 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 56
  %882 = getelementptr inbounds %class.Area, ptr %881, i32 0, i32 1
  %883 = load double, ptr %882, align 8, !tbaa !69
  %884 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr (i8, ptr @g_tp, i64 1200), i32 0, i32 2), align 8, !tbaa !79
  %885 = fmul double %883, %884
  store double %885, ptr %26, align 8, !tbaa !13
  %886 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 45), i32 0, i32 9), align 8, !tbaa !86
  %887 = fmul double 5.000000e-02, %886
  %888 = fcmp ogt double %887, 8.000000e-02
  br i1 %888, label %889, label %892

889:                                              ; preds = %880
  %890 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::DeviceType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 45), i32 0, i32 9), align 8, !tbaa !86
  %891 = fmul double 5.000000e-02, %890
  br label %893

892:                                              ; preds = %880
  br label %893

893:                                              ; preds = %892, %889
  %894 = phi double [ %891, %889 ], [ 8.000000e-02, %892 ]
  %895 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 34
  store double %894, ptr %895, align 8, !tbaa !30
  %896 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  store i32 1, ptr %896, align 4, !tbaa !80
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %897 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::MemoryType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 56), i32 0, i32 2), align 8, !tbaa !88
  %898 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 56
  %899 = getelementptr inbounds %class.Area, ptr %898, i32 0, i32 0
  %900 = load double, ptr %899, align 8, !tbaa !71
  %901 = call noundef double @_Z8drain_C_diiidbbb(double noundef %897, i32 noundef 1, i32 noundef 1, i32 noundef 0, double noundef %900, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false)
  %902 = fdiv double %901, 2.000000e+00
  store double %902, ptr %30, align 8, !tbaa !13
  %903 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %904 = load i32, ptr %903, align 8, !tbaa !48
  %905 = uitofp i32 %904 to double
  %906 = load double, ptr %30, align 8, !tbaa !13
  %907 = load double, ptr %26, align 8, !tbaa !13
  %908 = fadd double %906, %907
  %909 = fmul double %905, %908
  store double %909, ptr %27, align 8, !tbaa !13
  %910 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 45
  store double 0.000000e+00, ptr %910, align 8, !tbaa !83
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %911

911:                                              ; preds = %893, %879
  %912 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %913 = load i8, ptr %912, align 1, !tbaa !42, !range !15, !noundef !16
  %914 = trunc i8 %913 to i1
  br i1 %914, label %919, label %915

915:                                              ; preds = %911
  %916 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %917 = load i8, ptr %916, align 2, !tbaa !21, !range !15, !noundef !16
  %918 = trunc i8 %917 to i1
  br i1 %918, label %919, label %986

919:                                              ; preds = %915, %911
  %920 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %921 = load i32, ptr %920, align 4, !tbaa !25
  switch i32 %921, label %931 [
    i32 0, label %922
    i32 1, label %925
    i32 2, label %928
  ]

922:                                              ; preds = %919
  %923 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.86)
  %924 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %923, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #9
  unreachable

925:                                              ; preds = %919
  %926 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  store i32 1, ptr %926, align 8, !tbaa !89
  %927 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 42
  store i32 1, ptr %927, align 4, !tbaa !90
  br label %950

928:                                              ; preds = %919
  %929 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  store i32 1, ptr %929, align 8, !tbaa !89
  %930 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 42
  store i32 1, ptr %930, align 4, !tbaa !90
  br label %950

931:                                              ; preds = %919
  %932 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %933 = load i32, ptr %932, align 4, !tbaa !25
  %934 = sitofp i32 %933 to double
  %935 = fdiv double %934, 4.000000e+00
  %936 = call double @sqrt(double noundef %935) #8
  %937 = call double @llvm.floor.f64(double %936)
  %938 = fptosi double %937 to i32
  %939 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  store i32 %938, ptr %939, align 8, !tbaa !89
  %940 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %941 = load i32, ptr %940, align 4, !tbaa !25
  %942 = sitofp i32 %941 to double
  %943 = fdiv double %942, 4.000000e+00
  %944 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  %945 = load i32, ptr %944, align 8, !tbaa !89
  %946 = sitofp i32 %945 to double
  %947 = fdiv double %943, %946
  %948 = fptosi double %947 to i32
  %949 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 42
  store i32 %948, ptr %949, align 4, !tbaa !90
  br label %950

950:                                              ; preds = %931, %928, %925
  %951 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  %952 = load i32, ptr %951, align 8, !tbaa !89
  %953 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 42
  %954 = load i32, ptr %953, align 4, !tbaa !90
  %955 = mul nsw i32 %952, %954
  %956 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 6
  store i32 %955, ptr %956, align 4, !tbaa !91
  %957 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %958 = load i8, ptr %957, align 1, !tbaa !42, !range !15, !noundef !16
  %959 = trunc i8 %958 to i1
  br i1 %959, label %960, label %970

960:                                              ; preds = %950
  %961 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 40
  %962 = load i32, ptr %961, align 4, !tbaa !54
  %963 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 24
  store i32 %962, ptr %963, align 8, !tbaa !92
  %964 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 40
  %965 = load i32, ptr %964, align 4, !tbaa !54
  %966 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %967 = load i32, ptr %966, align 4, !tbaa !22
  %968 = add nsw i32 %965, %967
  %969 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  store i32 %968, ptr %969, align 8, !tbaa !93
  br label %985

970:                                              ; preds = %950
  %971 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %972 = load i32, ptr %971, align 8, !tbaa !48
  %973 = call noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %972)
  %974 = call double @llvm.ceil.f64(double %973)
  %975 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  %976 = load i32, ptr %975, align 8, !tbaa !55
  %977 = call noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %976)
  %978 = call double @llvm.ceil.f64(double %977)
  %979 = fadd double %974, %978
  %980 = fptosi double %979 to i32
  %981 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 24
  store i32 %980, ptr %981, align 8, !tbaa !92
  %982 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %983 = load i32, ptr %982, align 4, !tbaa !22
  %984 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  store i32 %983, ptr %984, align 8, !tbaa !93
  br label %985

985:                                              ; preds = %970, %960
  br label %1057

986:                                              ; preds = %915
  %987 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %988 = load i32, ptr %987, align 8, !tbaa !24
  %989 = sdiv i32 %988, 2
  %990 = icmp sgt i32 %989, 1
  br i1 %990, label %991, label %995

991:                                              ; preds = %986
  %992 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 8
  %993 = load i32, ptr %992, align 8, !tbaa !24
  %994 = sdiv i32 %993, 2
  br label %996

995:                                              ; preds = %986
  br label %996

996:                                              ; preds = %995, %991
  %997 = phi i32 [ %994, %991 ], [ 1, %995 ]
  %998 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  store i32 %997, ptr %998, align 8, !tbaa !89
  %999 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %1000 = load i32, ptr %999, align 4, !tbaa !25
  %1001 = sdiv i32 %1000, 2
  %1002 = icmp sgt i32 %1001, 1
  br i1 %1002, label %1003, label %1007

1003:                                             ; preds = %996
  %1004 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 9
  %1005 = load i32, ptr %1004, align 4, !tbaa !25
  %1006 = sdiv i32 %1005, 2
  br label %1008

1007:                                             ; preds = %996
  br label %1008

1008:                                             ; preds = %1007, %1003
  %1009 = phi i32 [ %1006, %1003 ], [ 1, %1007 ]
  %1010 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 42
  store i32 %1009, ptr %1010, align 4, !tbaa !90
  %1011 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  %1012 = load i32, ptr %1011, align 8, !tbaa !89
  %1013 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 42
  %1014 = load i32, ptr %1013, align 4, !tbaa !90
  %1015 = mul nsw i32 %1012, %1014
  %1016 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 6
  store i32 %1015, ptr %1016, align 4, !tbaa !91
  %1017 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  %1018 = load i32, ptr %1017, align 8, !tbaa !55
  %1019 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 6
  %1020 = load i32, ptr %1019, align 4, !tbaa !91
  %1021 = sdiv i32 %1018, %1020
  %1022 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 36
  %1023 = load i32, ptr %1022, align 4, !tbaa !49
  %1024 = mul i32 %1021, %1023
  %1025 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  %1026 = load i32, ptr %1025, align 4, !tbaa !80
  %1027 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1028 = load i32, ptr %1027, align 4, !tbaa !27
  %1029 = mul nsw i32 %1026, %1028
  %1030 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %1031 = load i32, ptr %1030, align 8, !tbaa !28
  %1032 = mul nsw i32 %1029, %1031
  %1033 = udiv i32 %1024, %1032
  %1034 = icmp ugt i32 %1033, 1
  br i1 %1034, label %1035, label %1053

1035:                                             ; preds = %1008
  %1036 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  %1037 = load i32, ptr %1036, align 8, !tbaa !55
  %1038 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 6
  %1039 = load i32, ptr %1038, align 4, !tbaa !91
  %1040 = sdiv i32 %1037, %1039
  %1041 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 36
  %1042 = load i32, ptr %1041, align 4, !tbaa !49
  %1043 = mul i32 %1040, %1042
  %1044 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  %1045 = load i32, ptr %1044, align 4, !tbaa !80
  %1046 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1047 = load i32, ptr %1046, align 4, !tbaa !27
  %1048 = mul nsw i32 %1045, %1047
  %1049 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %1050 = load i32, ptr %1049, align 8, !tbaa !28
  %1051 = mul nsw i32 %1048, %1050
  %1052 = udiv i32 %1043, %1051
  br label %1054

1053:                                             ; preds = %1008
  br label %1054

1054:                                             ; preds = %1053, %1035
  %1055 = phi i32 [ %1052, %1035 ], [ 1, %1053 ]
  %1056 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  store i32 %1055, ptr %1056, align 8, !tbaa !93
  br label %1057

1057:                                             ; preds = %1054, %985
  %1058 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1059 = load i8, ptr %1058, align 1, !tbaa !42, !range !15, !noundef !16
  %1060 = trunc i8 %1059 to i1
  br i1 %1060, label %1075, label %1061

1061:                                             ; preds = %1057
  %1062 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %1063 = load i8, ptr %1062, align 2, !tbaa !21, !range !15, !noundef !16
  %1064 = trunc i8 %1063 to i1
  br i1 %1064, label %1075, label %1065

1065:                                             ; preds = %1061
  %1066 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1067 = load i32, ptr %1066, align 8, !tbaa !93
  %1068 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  %1069 = load i32, ptr %1068, align 8, !tbaa !55
  %1070 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 6
  %1071 = load i32, ptr %1070, align 4, !tbaa !91
  %1072 = sdiv i32 %1069, %1071
  %1073 = icmp slt i32 %1067, %1072
  br i1 %1073, label %1074, label %1075

1074:                                             ; preds = %1065
  store i32 1, ptr %25, align 4
  br label %1715

1075:                                             ; preds = %1065, %1061, %1057
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %1076 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1077 = load i8, ptr %1076, align 1, !tbaa !42, !range !15, !noundef !16
  %1078 = trunc i8 %1077 to i1
  br i1 %1078, label %1157, label %1079

1079:                                             ; preds = %1075
  %1080 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %1081 = load i8, ptr %1080, align 2, !tbaa !21, !range !15, !noundef !16
  %1082 = trunc i8 %1081 to i1
  br i1 %1082, label %1157, label %1083

1083:                                             ; preds = %1079
  %1084 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %1085 = load i8, ptr %1084, align 8, !tbaa !17, !range !15, !noundef !16
  %1086 = trunc i8 %1085 to i1
  br i1 %1086, label %1139, label %1087

1087:                                             ; preds = %1083
  %1088 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 53
  %1089 = load i8, ptr %1088, align 4, !tbaa !32, !range !15, !noundef !16
  %1090 = trunc i8 %1089 to i1
  %1091 = zext i1 %1090 to i32
  %1092 = icmp eq i32 %1091, 1
  br i1 %1092, label %1093, label %1104

1093:                                             ; preds = %1087
  %1094 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1095 = getelementptr inbounds %class.InputParameter, ptr %1094, i32 0, i32 34
  %1096 = load i32, ptr %1095, align 4, !tbaa !94
  %1097 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1098 = getelementptr inbounds %class.InputParameter, ptr %1097, i32 0, i32 4
  %1099 = load i32, ptr %1098, align 8, !tbaa !95
  %1100 = mul i32 %1096, %1099
  %1101 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  store i32 %1100, ptr %1101, align 8, !tbaa !96
  %1102 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1103 = load i32, ptr %1102, align 4, !tbaa !27
  store i32 %1103, ptr %31, align 4, !tbaa !11
  br label %1138

1104:                                             ; preds = %1087
  %1105 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1106 = getelementptr inbounds %class.InputParameter, ptr %1105, i32 0, i32 76
  %1107 = load i8, ptr %1106, align 4, !tbaa !97, !range !15, !noundef !16
  %1108 = trunc i8 %1107 to i1
  %1109 = zext i1 %1108 to i32
  %1110 = icmp eq i32 %1109, 1
  br i1 %1110, label %1111, label %1122

1111:                                             ; preds = %1104
  %1112 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1113 = getelementptr inbounds %class.InputParameter, ptr %1112, i32 0, i32 4
  %1114 = load i32, ptr %1113, align 8, !tbaa !95
  %1115 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1116 = getelementptr inbounds %class.InputParameter, ptr %1115, i32 0, i32 79
  %1117 = load i32, ptr %1116, align 8, !tbaa !50
  %1118 = mul i32 %1114, %1117
  %1119 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  store i32 %1118, ptr %1119, align 8, !tbaa !96
  %1120 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1121 = load i32, ptr %1120, align 4, !tbaa !27
  store i32 %1121, ptr %31, align 4, !tbaa !11
  br label %1137

1122:                                             ; preds = %1104
  %1123 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1124 = getelementptr inbounds %class.InputParameter, ptr %1123, i32 0, i32 4
  %1125 = load i32, ptr %1124, align 8, !tbaa !95
  %1126 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  store i32 %1125, ptr %1126, align 8, !tbaa !96
  %1127 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1128 = load i32, ptr %1127, align 4, !tbaa !27
  %1129 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1130 = getelementptr inbounds %class.InputParameter, ptr %1129, i32 0, i32 79
  %1131 = load i32, ptr %1130, align 8, !tbaa !50
  %1132 = udiv i32 %1128, %1131
  store i32 %1132, ptr %31, align 4, !tbaa !11
  %1133 = load i32, ptr %31, align 4, !tbaa !11
  %1134 = icmp slt i32 %1133, 1
  br i1 %1134, label %1135, label %1136

1135:                                             ; preds = %1122
  store i32 1, ptr %25, align 4
  br label %1714

1136:                                             ; preds = %1122
  br label %1137

1137:                                             ; preds = %1136, %1111
  br label %1138

1138:                                             ; preds = %1137, %1093
  br label %1156

1139:                                             ; preds = %1083
  %1140 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1141 = load i32, ptr %1140, align 4, !tbaa !22
  %1142 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1143 = getelementptr inbounds %class.InputParameter, ptr %1142, i32 0, i32 78
  %1144 = load i32, ptr %1143, align 4, !tbaa !45
  %1145 = mul i32 %1141, %1144
  %1146 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  store i32 %1145, ptr %1146, align 8, !tbaa !96
  %1147 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1148 = load i32, ptr %1147, align 8, !tbaa !93
  %1149 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1150 = load i32, ptr %1149, align 4, !tbaa !22
  %1151 = icmp slt i32 %1148, %1150
  br i1 %1151, label %1152, label %1153

1152:                                             ; preds = %1139
  store i32 1, ptr %25, align 4
  br label %1714

1153:                                             ; preds = %1139
  %1154 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1155 = load i32, ptr %1154, align 4, !tbaa !27
  store i32 %1155, ptr %31, align 4, !tbaa !11
  br label %1156

1156:                                             ; preds = %1153, %1138
  br label %1189

1157:                                             ; preds = %1079, %1075
  %1158 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1159 = load i8, ptr %1158, align 1, !tbaa !42, !range !15, !noundef !16
  %1160 = trunc i8 %1159 to i1
  br i1 %1160, label %1161, label %1173

1161:                                             ; preds = %1157
  %1162 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1163 = getelementptr inbounds %class.InputParameter, ptr %1162, i32 0, i32 77
  %1164 = load i32, ptr %1163, align 8, !tbaa !47
  %1165 = mul i32 8, %1164
  %1166 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 26
  store i32 %1165, ptr %1166, align 8, !tbaa !98
  %1167 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 26
  %1168 = load i32, ptr %1167, align 8, !tbaa !98
  %1169 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  %1170 = load i32, ptr %1169, align 4, !tbaa !52
  %1171 = add nsw i32 %1168, %1170
  %1172 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  store i32 %1171, ptr %1172, align 8, !tbaa !96
  br label %1188

1173:                                             ; preds = %1157
  %1174 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %1175 = load i32, ptr %1174, align 8, !tbaa !48
  %1176 = call noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %1175)
  %1177 = call double @llvm.ceil.f64(double %1176)
  %1178 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  %1179 = load i32, ptr %1178, align 8, !tbaa !55
  %1180 = call noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %1179)
  %1181 = call double @llvm.ceil.f64(double %1180)
  %1182 = fadd double %1177, %1181
  %1183 = fptosi double %1182 to i32
  %1184 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 26
  store i32 %1183, ptr %1184, align 8, !tbaa !98
  %1185 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 38
  %1186 = load i32, ptr %1185, align 4, !tbaa !52
  %1187 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  store i32 %1186, ptr %1187, align 8, !tbaa !96
  br label %1188

1188:                                             ; preds = %1173, %1161
  store i32 1, ptr %31, align 4, !tbaa !11
  br label %1189

1189:                                             ; preds = %1188, %1156
  %1190 = load i32, ptr %31, align 4, !tbaa !11
  %1191 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 12
  store i32 %1190, ptr %1191, align 8, !tbaa !99
  %1192 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1193 = load i8, ptr %1192, align 1, !tbaa !42, !range !15, !noundef !16
  %1194 = trunc i8 %1193 to i1
  br i1 %1194, label %1199, label %1195

1195:                                             ; preds = %1189
  %1196 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %1197 = load i8, ptr %1196, align 2, !tbaa !21, !range !15, !noundef !16
  %1198 = trunc i8 %1197 to i1
  br i1 %1198, label %1199, label %1204

1199:                                             ; preds = %1195, %1189
  %1200 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  store i32 1, ptr %1200, align 8, !tbaa !100
  %1201 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  %1202 = load i32, ptr %1201, align 8, !tbaa !89
  %1203 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 31
  store i32 %1202, ptr %1203, align 4, !tbaa !101
  br label %1216

1204:                                             ; preds = %1195
  %1205 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  %1206 = load i32, ptr %1205, align 8, !tbaa !96
  %1207 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1208 = load i32, ptr %1207, align 8, !tbaa !93
  %1209 = sdiv i32 %1206, %1208
  %1210 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  store i32 %1209, ptr %1210, align 8, !tbaa !100
  %1211 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1212 = load i32, ptr %1211, align 8, !tbaa !100
  %1213 = icmp eq i32 %1212, 0
  br i1 %1213, label %1214, label %1215

1214:                                             ; preds = %1204
  store i32 1, ptr %25, align 4
  br label %1714

1215:                                             ; preds = %1204
  br label %1216

1216:                                             ; preds = %1215, %1199
  %1217 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %1218 = load i8, ptr %1217, align 8, !tbaa !17, !range !15, !noundef !16
  %1219 = trunc i8 %1218 to i1
  br i1 %1219, label %1220, label %1243

1220:                                             ; preds = %1216
  %1221 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1222 = load i8, ptr %1221, align 1, !tbaa !42, !range !15, !noundef !16
  %1223 = trunc i8 %1222 to i1
  br i1 %1223, label %1242, label %1224

1224:                                             ; preds = %1220
  %1225 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %1226 = load i8, ptr %1225, align 2, !tbaa !21, !range !15, !noundef !16
  %1227 = trunc i8 %1226 to i1
  br i1 %1227, label %1242, label %1228

1228:                                             ; preds = %1224
  %1229 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1230 = getelementptr inbounds %class.InputParameter, ptr %1229, i32 0, i32 78
  %1231 = load i32, ptr %1230, align 4, !tbaa !45
  %1232 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1233 = load i32, ptr %1232, align 8, !tbaa !100
  %1234 = udiv i32 %1231, %1233
  %1235 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  store i32 %1234, ptr %1235, align 8, !tbaa !93
  %1236 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1237 = load i32, ptr %1236, align 8, !tbaa !100
  %1238 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1239 = load i32, ptr %1238, align 8, !tbaa !93
  %1240 = mul nsw i32 %1237, %1239
  %1241 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  store i32 %1240, ptr %1241, align 8, !tbaa !96
  br label %1242

1242:                                             ; preds = %1228, %1224, %1220
  br label %1243

1243:                                             ; preds = %1242, %1216
  %1244 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1245 = getelementptr inbounds %class.InputParameter, ptr %1244, i32 0, i32 20
  %1246 = load i8, ptr %1245, align 1, !tbaa !102, !range !15, !noundef !16
  %1247 = trunc i8 %1246 to i1
  %1248 = zext i1 %1247 to i32
  %1249 = icmp eq i32 %1248, 0
  br i1 %1249, label %1250, label %1274

1250:                                             ; preds = %1243
  %1251 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 53
  %1252 = load i8, ptr %1251, align 4, !tbaa !32, !range !15, !noundef !16
  %1253 = trunc i8 %1252 to i1
  %1254 = zext i1 %1253 to i32
  %1255 = icmp eq i32 %1254, 1
  br i1 %1255, label %1256, label %1274

1256:                                             ; preds = %1250
  %1257 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1258 = load i32, ptr %1257, align 8, !tbaa !100
  %1259 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1260 = load i32, ptr %1259, align 8, !tbaa !93
  %1261 = mul nsw i32 %1258, %1260
  %1262 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1263 = load i32, ptr %1262, align 4, !tbaa !27
  %1264 = mul nsw i32 %1261, %1263
  %1265 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %1266 = load i32, ptr %1265, align 8, !tbaa !28
  %1267 = mul nsw i32 %1264, %1266
  %1268 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1269 = getelementptr inbounds %class.InputParameter, ptr %1268, i32 0, i32 35
  %1270 = load i32, ptr %1269, align 8, !tbaa !103
  %1271 = icmp ne i32 %1267, %1270
  br i1 %1271, label %1272, label %1273

1272:                                             ; preds = %1256
  store i32 1, ptr %25, align 4
  br label %1714

1273:                                             ; preds = %1256
  br label %1274

1274:                                             ; preds = %1273, %1250, %1243
  %1275 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %1276 = load i8, ptr %1275, align 8, !tbaa !17, !range !15, !noundef !16
  %1277 = trunc i8 %1276 to i1
  %1278 = zext i1 %1277 to i32
  %1279 = icmp eq i32 %1278, 0
  br i1 %1279, label %1280, label %1312

1280:                                             ; preds = %1274
  %1281 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1282 = getelementptr inbounds %class.InputParameter, ptr %1281, i32 0, i32 19
  %1283 = load i8, ptr %1282, align 4, !tbaa !104, !range !15, !noundef !16
  %1284 = trunc i8 %1283 to i1
  %1285 = zext i1 %1284 to i32
  %1286 = icmp eq i32 %1285, 1
  br i1 %1286, label %1287, label %1312

1287:                                             ; preds = %1280
  %1288 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1289 = load i32, ptr %1288, align 8, !tbaa !100
  %1290 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1291 = load i32, ptr %1290, align 8, !tbaa !93
  %1292 = mul nsw i32 %1289, %1291
  %1293 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 13
  %1294 = load i32, ptr %1293, align 4, !tbaa !27
  %1295 = mul nsw i32 %1292, %1294
  %1296 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %1297 = load i32, ptr %1296, align 8, !tbaa !28
  %1298 = mul nsw i32 %1295, %1297
  %1299 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1300 = getelementptr inbounds %class.InputParameter, ptr %1299, i32 0, i32 4
  %1301 = load i32, ptr %1300, align 8, !tbaa !95
  %1302 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1303 = getelementptr inbounds %class.InputParameter, ptr %1302, i32 0, i32 33
  %1304 = load i32, ptr %1303, align 8, !tbaa !105
  %1305 = mul nsw i32 %1301, %1304
  %1306 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1307 = getelementptr inbounds %class.InputParameter, ptr %1306, i32 0, i32 79
  %1308 = load i32, ptr %1307, align 8, !tbaa !50
  %1309 = mul nsw i32 %1305, %1308
  %1310 = icmp slt i32 %1298, %1309
  br i1 %1310, label %1311, label %1312

1311:                                             ; preds = %1287
  store i32 1, ptr %25, align 4
  br label %1714

1312:                                             ; preds = %1287, %1280, %1274
  %1313 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1314 = load i32, ptr %1313, align 8, !tbaa !100
  %1315 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 41
  %1316 = load i32, ptr %1315, align 8, !tbaa !89
  %1317 = icmp sgt i32 %1314, %1316
  br i1 %1317, label %1318, label %1319

1318:                                             ; preds = %1312
  store i32 1, ptr %25, align 4
  br label %1714

1319:                                             ; preds = %1312
  %1320 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1321 = load i8, ptr %1320, align 1, !tbaa !42, !range !15, !noundef !16
  %1322 = trunc i8 %1321 to i1
  br i1 %1322, label %1356, label %1323

1323:                                             ; preds = %1319
  %1324 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %1325 = load i8, ptr %1324, align 2, !tbaa !21, !range !15, !noundef !16
  %1326 = trunc i8 %1325 to i1
  br i1 %1326, label %1356, label %1327

1327:                                             ; preds = %1323
  %1328 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %1329 = load i8, ptr %1328, align 8, !tbaa !17, !range !15, !noundef !16
  %1330 = trunc i8 %1329 to i1
  br i1 %1330, label %1351, label %1331

1331:                                             ; preds = %1327
  %1332 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1333 = getelementptr inbounds %class.InputParameter, ptr %1332, i32 0, i32 76
  %1334 = load i8, ptr %1333, align 4, !tbaa !97, !range !15, !noundef !16
  %1335 = trunc i8 %1334 to i1
  %1336 = zext i1 %1335 to i32
  %1337 = icmp eq i32 %1336, 1
  br i1 %1337, label %1338, label %1346

1338:                                             ; preds = %1331
  %1339 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1340 = load i32, ptr %1339, align 8, !tbaa !93
  %1341 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1342 = getelementptr inbounds %class.InputParameter, ptr %1341, i32 0, i32 79
  %1343 = load i32, ptr %1342, align 8, !tbaa !50
  %1344 = udiv i32 %1340, %1343
  %1345 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  store i32 %1344, ptr %1345, align 4, !tbaa !106
  br label %1350

1346:                                             ; preds = %1331
  %1347 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1348 = load i32, ptr %1347, align 8, !tbaa !93
  %1349 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  store i32 %1348, ptr %1349, align 4, !tbaa !106
  br label %1350

1350:                                             ; preds = %1346, %1338
  br label %1355

1351:                                             ; preds = %1327
  %1352 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1353 = load i32, ptr %1352, align 4, !tbaa !22
  %1354 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  store i32 %1353, ptr %1354, align 4, !tbaa !106
  br label %1355

1355:                                             ; preds = %1351, %1350
  br label %1375

1356:                                             ; preds = %1323, %1319
  %1357 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1358 = load i8, ptr %1357, align 1, !tbaa !42, !range !15, !noundef !16
  %1359 = trunc i8 %1358 to i1
  br i1 %1359, label %1360, label %1367

1360:                                             ; preds = %1356
  %1361 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1362 = load i32, ptr %1361, align 8, !tbaa !93
  %1363 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  store i32 %1362, ptr %1363, align 4, !tbaa !106
  %1364 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1365 = load i32, ptr %1364, align 4, !tbaa !22
  %1366 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 23
  store i32 %1365, ptr %1366, align 4, !tbaa !107
  br label %1374

1367:                                             ; preds = %1356
  %1368 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1369 = load i32, ptr %1368, align 4, !tbaa !22
  %1370 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  store i32 %1369, ptr %1370, align 4, !tbaa !106
  %1371 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1372 = load i32, ptr %1371, align 4, !tbaa !22
  %1373 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 23
  store i32 %1372, ptr %1373, align 4, !tbaa !107
  br label %1374

1374:                                             ; preds = %1367, %1360
  br label %1375

1375:                                             ; preds = %1374, %1355
  %1376 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  %1377 = load i32, ptr %1376, align 4, !tbaa !106
  %1378 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1379 = load i32, ptr %1378, align 8, !tbaa !100
  %1380 = mul nsw i32 %1377, %1379
  %1381 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 21
  store i32 %1380, ptr %1381, align 4, !tbaa !108
  %1382 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 23
  %1383 = load i32, ptr %1382, align 4, !tbaa !107
  %1384 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 25
  store i32 %1383, ptr %1384, align 4, !tbaa !109
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %1385 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %1386 = load i32, ptr %1385, align 8, !tbaa !48
  %1387 = zext i32 %1386 to i64
  %1388 = call noundef i32 @_Z5_log2m(i64 noundef %1387)
  store i32 %1388, ptr %32, align 4, !tbaa !11
  %1389 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1390 = load i8, ptr %1389, align 1, !tbaa !42, !range !15, !noundef !16
  %1391 = trunc i8 %1390 to i1
  br i1 %1391, label %1396, label %1392

1392:                                             ; preds = %1375
  %1393 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %1394 = load i8, ptr %1393, align 2, !tbaa !21, !range !15, !noundef !16
  %1395 = trunc i8 %1394 to i1
  br i1 %1395, label %1396, label %1406

1396:                                             ; preds = %1392, %1375
  %1397 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  %1398 = load i32, ptr %1397, align 8, !tbaa !55
  %1399 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 6
  %1400 = load i32, ptr %1399, align 4, !tbaa !91
  %1401 = sdiv i32 %1398, %1400
  %1402 = sext i32 %1401 to i64
  %1403 = call noundef i32 @_Z5_log2m(i64 noundef %1402)
  %1404 = load i32, ptr %32, align 4, !tbaa !11
  %1405 = add i32 %1404, %1403
  store i32 %1405, ptr %32, align 4, !tbaa !11
  br label %1406

1406:                                             ; preds = %1396, %1392
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %1407 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 6
  %1408 = load i32, ptr %1407, align 4, !tbaa !91
  %1409 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 30
  %1410 = load i32, ptr %1409, align 8, !tbaa !100
  %1411 = sdiv i32 %1408, %1410
  store i32 %1411, ptr %33, align 4, !tbaa !11
  %1412 = load i32, ptr %33, align 4, !tbaa !11
  %1413 = sext i32 %1412 to i64
  %1414 = call noundef i32 @_Z5_log2m(i64 noundef %1413)
  %1415 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 16
  store i32 %1414, ptr %1415, align 8, !tbaa !110
  %1416 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1417 = getelementptr inbounds %class.InputParameter, ptr %1416, i32 0, i32 14
  %1418 = load i32, ptr %1417, align 8, !tbaa !64
  %1419 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 47
  store i32 %1418, ptr %1419, align 4, !tbaa !111
  %1420 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1421 = getelementptr inbounds %class.InputParameter, ptr %1420, i32 0, i32 15
  %1422 = load i32, ptr %1421, align 4, !tbaa !65
  %1423 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 48
  store i32 %1422, ptr %1423, align 8, !tbaa !112
  %1424 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1425 = getelementptr inbounds %class.InputParameter, ptr %1424, i32 0, i32 16
  %1426 = load i32, ptr %1425, align 8, !tbaa !66
  %1427 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 49
  store i32 %1426, ptr %1427, align 4, !tbaa !113
  %1428 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1429 = getelementptr inbounds %class.InputParameter, ptr %1428, i32 0, i32 17
  %1430 = load i32, ptr %1429, align 4, !tbaa !68
  %1431 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 50
  store i32 %1430, ptr %1431, align 8, !tbaa !114
  %1432 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1433 = getelementptr inbounds %class.InputParameter, ptr %1432, i32 0, i32 18
  %1434 = load i32, ptr %1433, align 8, !tbaa !67
  %1435 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 51
  store i32 %1434, ptr %1435, align 4, !tbaa !115
  %1436 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 32
  %1437 = load i8, ptr %1436, align 8, !tbaa !39, !range !15, !noundef !16
  %1438 = trunc i8 %1437 to i1
  br i1 %1438, label %1439, label %1478

1439:                                             ; preds = %1406
  %1440 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 53
  %1441 = load i8, ptr %1440, align 4, !tbaa !32, !range !15, !noundef !16
  %1442 = trunc i8 %1441 to i1
  br i1 %1442, label %1443, label %1478

1443:                                             ; preds = %1439
  %1444 = load i32, ptr %32, align 4, !tbaa !11
  %1445 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  %1446 = load i32, ptr %1445, align 4, !tbaa !80
  %1447 = sext i32 %1446 to i64
  %1448 = call noundef i32 @_Z5_log2m(i64 noundef %1447)
  %1449 = load i32, ptr %31, align 4, !tbaa !11
  %1450 = sext i32 %1449 to i64
  %1451 = call noundef i32 @_Z5_log2m(i64 noundef %1450)
  %1452 = add i32 %1448, %1451
  %1453 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %1454 = load i32, ptr %1453, align 8, !tbaa !28
  %1455 = sext i32 %1454 to i64
  %1456 = call noundef i32 @_Z5_log2m(i64 noundef %1455)
  %1457 = add i32 %1452, %1456
  %1458 = icmp ugt i32 %1444, %1457
  br i1 %1458, label %1459, label %1461

1459:                                             ; preds = %1443
  %1460 = load i32, ptr %32, align 4, !tbaa !11
  br label %1475

1461:                                             ; preds = %1443
  %1462 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  %1463 = load i32, ptr %1462, align 4, !tbaa !80
  %1464 = sext i32 %1463 to i64
  %1465 = call noundef i32 @_Z5_log2m(i64 noundef %1464)
  %1466 = load i32, ptr %31, align 4, !tbaa !11
  %1467 = sext i32 %1466 to i64
  %1468 = call noundef i32 @_Z5_log2m(i64 noundef %1467)
  %1469 = add i32 %1465, %1468
  %1470 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %1471 = load i32, ptr %1470, align 8, !tbaa !28
  %1472 = sext i32 %1471 to i64
  %1473 = call noundef i32 @_Z5_log2m(i64 noundef %1472)
  %1474 = add i32 %1469, %1473
  br label %1475

1475:                                             ; preds = %1461, %1459
  %1476 = phi i32 [ %1460, %1459 ], [ %1474, %1461 ]
  %1477 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 15
  store i32 %1476, ptr %1477, align 4, !tbaa !116
  br label %1495

1478:                                             ; preds = %1439, %1406
  %1479 = load i32, ptr %32, align 4, !tbaa !11
  %1480 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 11
  %1481 = load i32, ptr %1480, align 4, !tbaa !80
  %1482 = sext i32 %1481 to i64
  %1483 = call noundef i32 @_Z5_log2m(i64 noundef %1482)
  %1484 = add i32 %1479, %1483
  %1485 = load i32, ptr %31, align 4, !tbaa !11
  %1486 = sext i32 %1485 to i64
  %1487 = call noundef i32 @_Z5_log2m(i64 noundef %1486)
  %1488 = add i32 %1484, %1487
  %1489 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 14
  %1490 = load i32, ptr %1489, align 8, !tbaa !28
  %1491 = sext i32 %1490 to i64
  %1492 = call noundef i32 @_Z5_log2m(i64 noundef %1491)
  %1493 = add i32 %1488, %1492
  %1494 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 15
  store i32 %1493, ptr %1494, align 4, !tbaa !116
  br label %1495

1495:                                             ; preds = %1478, %1475
  %1496 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1497 = load i8, ptr %1496, align 1, !tbaa !42, !range !15, !noundef !16
  %1498 = trunc i8 %1497 to i1
  br i1 %1498, label %1529, label %1499

1499:                                             ; preds = %1495
  %1500 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 2
  %1501 = load i8, ptr %1500, align 2, !tbaa !21, !range !15, !noundef !16
  %1502 = trunc i8 %1501 to i1
  br i1 %1502, label %1529, label %1503

1503:                                             ; preds = %1499
  %1504 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %1505 = load i8, ptr %1504, align 8, !tbaa !17, !range !15, !noundef !16
  %1506 = trunc i8 %1505 to i1
  br i1 %1506, label %1507, label %1515

1507:                                             ; preds = %1503
  %1508 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1509 = load i32, ptr %1508, align 4, !tbaa !22
  %1510 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 17
  store i32 %1509, ptr %1510, align 4, !tbaa !117
  %1511 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1512 = getelementptr inbounds %class.InputParameter, ptr %1511, i32 0, i32 79
  %1513 = load i32, ptr %1512, align 8, !tbaa !50
  %1514 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 18
  store i32 %1513, ptr %1514, align 8, !tbaa !118
  br label %1528

1515:                                             ; preds = %1503
  %1516 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1517 = getelementptr inbounds %class.InputParameter, ptr %1516, i32 0, i32 4
  %1518 = load i32, ptr %1517, align 8, !tbaa !95
  %1519 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1520 = getelementptr inbounds %class.InputParameter, ptr %1519, i32 0, i32 79
  %1521 = load i32, ptr %1520, align 8, !tbaa !50
  %1522 = add i32 %1518, %1521
  %1523 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 17
  store i32 %1522, ptr %1523, align 4, !tbaa !117
  %1524 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1525 = getelementptr inbounds %class.InputParameter, ptr %1524, i32 0, i32 4
  %1526 = load i32, ptr %1525, align 8, !tbaa !95
  %1527 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 18
  store i32 %1526, ptr %1527, align 8, !tbaa !118
  br label %1528

1528:                                             ; preds = %1515, %1507
  br label %1577

1529:                                             ; preds = %1499, %1495
  %1530 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 3
  %1531 = load i8, ptr %1530, align 1, !tbaa !42, !range !15, !noundef !16
  %1532 = trunc i8 %1531 to i1
  br i1 %1532, label %1533, label %1555

1533:                                             ; preds = %1529
  %1534 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1535 = getelementptr inbounds %class.InputParameter, ptr %1534, i32 0, i32 4
  %1536 = load i32, ptr %1535, align 8, !tbaa !95
  %1537 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1538 = load i32, ptr %1537, align 4, !tbaa !22
  %1539 = add i32 %1536, %1538
  %1540 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 17
  store i32 %1539, ptr %1540, align 4, !tbaa !117
  %1541 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1542 = load i32, ptr %1541, align 4, !tbaa !22
  %1543 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 27
  store i32 %1542, ptr %1543, align 4, !tbaa !119
  %1544 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1545 = getelementptr inbounds %class.InputParameter, ptr %1544, i32 0, i32 4
  %1546 = load i32, ptr %1545, align 8, !tbaa !95
  %1547 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1548 = load i32, ptr %1547, align 4, !tbaa !22
  %1549 = add i32 %1546, %1548
  %1550 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 18
  store i32 %1549, ptr %1550, align 8, !tbaa !118
  %1551 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1552 = getelementptr inbounds %class.InputParameter, ptr %1551, i32 0, i32 4
  %1553 = load i32, ptr %1552, align 8, !tbaa !95
  %1554 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 28
  store i32 %1553, ptr %1554, align 8, !tbaa !120
  br label %1576

1555:                                             ; preds = %1529
  %1556 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1557 = load i32, ptr %1556, align 4, !tbaa !22
  %1558 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 17
  store i32 %1557, ptr %1558, align 4, !tbaa !117
  %1559 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1560 = load i32, ptr %1559, align 4, !tbaa !22
  %1561 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 27
  store i32 %1560, ptr %1561, align 4, !tbaa !119
  %1562 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 4
  %1563 = load i32, ptr %1562, align 4, !tbaa !22
  %1564 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 18
  store i32 %1563, ptr %1564, align 8, !tbaa !118
  %1565 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 35
  %1566 = load i32, ptr %1565, align 8, !tbaa !48
  %1567 = call noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %1566)
  %1568 = call double @llvm.ceil.f64(double %1567)
  %1569 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 5
  %1570 = load i32, ptr %1569, align 8, !tbaa !55
  %1571 = call noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %1570)
  %1572 = call double @llvm.ceil.f64(double %1571)
  %1573 = fadd double %1568, %1572
  %1574 = fptosi double %1573 to i32
  %1575 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 28
  store i32 %1574, ptr %1575, align 8, !tbaa !120
  br label %1576

1576:                                             ; preds = %1555, %1533
  br label %1577

1577:                                             ; preds = %1576, %1528
  %1578 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 0
  %1579 = load i8, ptr %1578, align 8, !tbaa !17, !range !15, !noundef !16
  %1580 = trunc i8 %1579 to i1
  br i1 %1580, label %1596, label %1581

1581:                                             ; preds = %1577
  %1582 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1583 = getelementptr inbounds %class.InputParameter, ptr %1582, i32 0, i32 79
  %1584 = load i32, ptr %1583, align 8, !tbaa !50
  %1585 = icmp ugt i32 %1584, 1
  br i1 %1585, label %1586, label %1596

1586:                                             ; preds = %1581
  %1587 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1588 = getelementptr inbounds %class.InputParameter, ptr %1587, i32 0, i32 76
  %1589 = load i8, ptr %1588, align 4, !tbaa !97, !range !15, !noundef !16
  %1590 = trunc i8 %1589 to i1
  br i1 %1590, label %1596, label %1591

1591:                                             ; preds = %1586
  %1592 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1593 = getelementptr inbounds %class.InputParameter, ptr %1592, i32 0, i32 79
  %1594 = load i32, ptr %1593, align 8, !tbaa !50
  %1595 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 29
  store i32 %1594, ptr %1595, align 4, !tbaa !29
  br label %1596

1596:                                             ; preds = %1591, %1586, %1581, %1577
  %1597 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1598 = getelementptr inbounds %class.InputParameter, ptr %1597, i32 0, i32 84
  %1599 = load i8, ptr %1598, align 8, !tbaa !121, !range !15, !noundef !16
  %1600 = trunc i8 %1599 to i1
  %1601 = zext i1 %1600 to i32
  %1602 = icmp eq i32 %1601, 1
  br i1 %1602, label %1603, label %1712

1603:                                             ; preds = %1596
  %1604 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1605 = load i32, ptr %1604, align 8, !tbaa !93
  %1606 = sitofp i32 %1605 to double
  %1607 = fdiv double %1606, 8.000000e+00
  %1608 = call double @llvm.ceil.f64(double %1607)
  %1609 = fptosi double %1608 to i32
  %1610 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 20
  %1611 = load i32, ptr %1610, align 8, !tbaa !93
  %1612 = add nsw i32 %1611, %1609
  store i32 %1612, ptr %1610, align 8, !tbaa !93
  %1613 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  %1614 = load i32, ptr %1613, align 4, !tbaa !106
  %1615 = sitofp i32 %1614 to double
  %1616 = fdiv double %1615, 8.000000e+00
  %1617 = call double @llvm.ceil.f64(double %1616)
  %1618 = fptosi double %1617 to i32
  %1619 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 19
  %1620 = load i32, ptr %1619, align 4, !tbaa !106
  %1621 = add nsw i32 %1620, %1618
  store i32 %1621, ptr %1619, align 4, !tbaa !106
  %1622 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 21
  %1623 = load i32, ptr %1622, align 4, !tbaa !108
  %1624 = sitofp i32 %1623 to double
  %1625 = fdiv double %1624, 8.000000e+00
  %1626 = call double @llvm.ceil.f64(double %1625)
  %1627 = fptosi double %1626 to i32
  %1628 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 21
  %1629 = load i32, ptr %1628, align 4, !tbaa !108
  %1630 = add nsw i32 %1629, %1627
  store i32 %1630, ptr %1628, align 4, !tbaa !108
  %1631 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  %1632 = load i32, ptr %1631, align 8, !tbaa !96
  %1633 = sitofp i32 %1632 to double
  %1634 = fdiv double %1633, 8.000000e+00
  %1635 = call double @llvm.ceil.f64(double %1634)
  %1636 = fptosi double %1635 to i32
  %1637 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 22
  %1638 = load i32, ptr %1637, align 8, !tbaa !96
  %1639 = add nsw i32 %1638, %1636
  store i32 %1639, ptr %1637, align 8, !tbaa !96
  %1640 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 17
  %1641 = load i32, ptr %1640, align 4, !tbaa !117
  %1642 = sitofp i32 %1641 to double
  %1643 = fdiv double %1642, 8.000000e+00
  %1644 = call double @llvm.ceil.f64(double %1643)
  %1645 = fptosi double %1644 to i32
  %1646 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 17
  %1647 = load i32, ptr %1646, align 4, !tbaa !117
  %1648 = add nsw i32 %1647, %1645
  store i32 %1648, ptr %1646, align 4, !tbaa !117
  %1649 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 18
  %1650 = load i32, ptr %1649, align 8, !tbaa !118
  %1651 = sitofp i32 %1650 to double
  %1652 = fdiv double %1651, 8.000000e+00
  %1653 = call double @llvm.ceil.f64(double %1652)
  %1654 = fptosi double %1653 to i32
  %1655 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 18
  %1656 = load i32, ptr %1655, align 8, !tbaa !118
  %1657 = add nsw i32 %1656, %1654
  store i32 %1657, ptr %1655, align 8, !tbaa !118
  %1658 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 24
  %1659 = load i32, ptr %1658, align 8, !tbaa !92
  %1660 = sitofp i32 %1659 to double
  %1661 = fdiv double %1660, 8.000000e+00
  %1662 = call double @llvm.ceil.f64(double %1661)
  %1663 = fptosi double %1662 to i32
  %1664 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 24
  %1665 = load i32, ptr %1664, align 8, !tbaa !92
  %1666 = add nsw i32 %1665, %1663
  store i32 %1666, ptr %1664, align 8, !tbaa !92
  %1667 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 23
  %1668 = load i32, ptr %1667, align 4, !tbaa !107
  %1669 = sitofp i32 %1668 to double
  %1670 = fdiv double %1669, 8.000000e+00
  %1671 = call double @llvm.ceil.f64(double %1670)
  %1672 = fptosi double %1671 to i32
  %1673 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 23
  %1674 = load i32, ptr %1673, align 4, !tbaa !107
  %1675 = add nsw i32 %1674, %1672
  store i32 %1675, ptr %1673, align 4, !tbaa !107
  %1676 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 25
  %1677 = load i32, ptr %1676, align 4, !tbaa !109
  %1678 = sitofp i32 %1677 to double
  %1679 = fdiv double %1678, 8.000000e+00
  %1680 = call double @llvm.ceil.f64(double %1679)
  %1681 = fptosi double %1680 to i32
  %1682 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 25
  %1683 = load i32, ptr %1682, align 4, !tbaa !109
  %1684 = add nsw i32 %1683, %1681
  store i32 %1684, ptr %1682, align 4, !tbaa !109
  %1685 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 26
  %1686 = load i32, ptr %1685, align 8, !tbaa !98
  %1687 = sitofp i32 %1686 to double
  %1688 = fdiv double %1687, 8.000000e+00
  %1689 = call double @llvm.ceil.f64(double %1688)
  %1690 = fptosi double %1689 to i32
  %1691 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 26
  %1692 = load i32, ptr %1691, align 8, !tbaa !98
  %1693 = add nsw i32 %1692, %1690
  store i32 %1693, ptr %1691, align 8, !tbaa !98
  %1694 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 27
  %1695 = load i32, ptr %1694, align 4, !tbaa !119
  %1696 = sitofp i32 %1695 to double
  %1697 = fdiv double %1696, 8.000000e+00
  %1698 = call double @llvm.ceil.f64(double %1697)
  %1699 = fptosi double %1698 to i32
  %1700 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 27
  %1701 = load i32, ptr %1700, align 4, !tbaa !119
  %1702 = add nsw i32 %1701, %1699
  store i32 %1702, ptr %1700, align 4, !tbaa !119
  %1703 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 28
  %1704 = load i32, ptr %1703, align 8, !tbaa !120
  %1705 = sitofp i32 %1704 to double
  %1706 = fdiv double %1705, 8.000000e+00
  %1707 = call double @llvm.ceil.f64(double %1706)
  %1708 = fptosi double %1707 to i32
  %1709 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 28
  %1710 = load i32, ptr %1709, align 8, !tbaa !120
  %1711 = add nsw i32 %1710, %1708
  store i32 %1711, ptr %1709, align 8, !tbaa !120
  br label %1712

1712:                                             ; preds = %1603, %1596
  %1713 = getelementptr inbounds %class.DynamicParameter, ptr %36, i32 0, i32 57
  store i8 1, ptr %1713, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  store i32 0, ptr %25, align 4
  br label %1714

1714:                                             ; preds = %1712, %1318, %1311, %1272, %1214, %1152, %1135
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  br label %1715

1715:                                             ; preds = %1714, %1074, %847, %806
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %1716

1716:                                             ; preds = %1715, %500, %495, %490, %485, %472, %467, %462, %457, %398, %393, %388, %383, %332, %327, %322, %317, %312, %173, %158, %144
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  %1717 = load i32, ptr %25, align 4
  switch i32 %1717, label %1719 [
    i32 0, label %1718
    i32 1, label %1718
  ]

1718:                                             ; preds = %1716, %1716
  ret void

1719:                                             ; preds = %1716
  unreachable
}

declare noundef i32 @_Z5_log2m(i64 noundef) #4

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

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

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) #4

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #6

; Function Attrs: nounwind
declare double @sqrt(double noundef) #7

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "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 #8 = { nounwind }
attributes #9 = { 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, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{i8 0, i8 2}
!16 = !{}
!17 = !{!18, !10, i64 0}
!18 = !{!"_ZTS16DynamicParameter", !10, i64 0, !10, i64 1, !10, i64 2, !10, i64 3, !12, i64 4, !12, i64 8, !12, i64 12, !14, i64 16, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !10, i64 120, !14, i64 128, !12, i64 136, !12, i64 140, !12, i64 144, !12, i64 148, !12, i64 152, !12, i64 156, !12, i64 160, !12, i64 164, !12, i64 168, !14, i64 176, !12, i64 184, !12, i64 188, !12, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !10, i64 212, !19, i64 216, !19, i64 240, !10, i64 264}
!19 = !{!"_ZTS4Area", !14, i64 0, !14, i64 8, !14, i64 16}
!20 = !{!18, !10, i64 1}
!21 = !{!18, !10, i64 2}
!22 = !{!18, !12, i64 4}
!23 = !{!18, !14, i64 16}
!24 = !{!18, !12, i64 24}
!25 = !{!18, !12, i64 28}
!26 = !{!18, !12, i64 32}
!27 = !{!18, !12, i64 44}
!28 = !{!18, !12, i64 48}
!29 = !{!18, !12, i64 108}
!30 = !{!18, !14, i64 128}
!31 = !{!18, !12, i64 184}
!32 = !{!18, !10, i64 212}
!33 = !{!18, !10, i64 264}
!34 = !{!35, !12, i64 120}
!35 = !{!"_ZTS14InputParameter", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !10, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !14, i64 48, !14, i64 56, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !10, i64 84, !10, i64 85, !10, i64 86, !10, i64 87, !10, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !12, i64 120, !12, i64 124, !12, i64 128, !12, i64 132, !12, i64 136, !12, i64 140, !12, i64 144, !12, i64 148, !36, i64 152, !12, i64 156, !10, i64 160, !12, i64 164, !12, i64 168, !12, i64 172, !12, i64 176, !12, i64 180, !12, i64 184, !12, i64 188, !10, i64 192, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !12, i64 220, !12, i64 224, !12, i64 228, !12, i64 232, !12, i64 236, !12, i64 240, !12, i64 244, !12, i64 248, !12, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !12, i64 268, !12, i64 272, !12, i64 276, !12, i64 280, !12, i64 284, !12, i64 288, !12, i64 292, !12, i64 296, !10, i64 300, !12, i64 304, !12, i64 308, !12, i64 312, !10, i64 316, !10, i64 317, !12, i64 320, !12, i64 324, !10, i64 328, !14, i64 336, !14, i64 344, !10, i64 352, !12, i64 356, !12, i64 360, !10, i64 364}
!36 = !{!"_ZTS9Wire_type", !7, i64 0}
!37 = !{!35, !12, i64 112}
!38 = !{!18, !12, i64 168}
!39 = !{!18, !10, i64 120}
!40 = !{!35, !12, i64 0}
!41 = !{!35, !10, i64 317}
!42 = !{!18, !10, i64 3}
!43 = !{!35, !10, i64 20}
!44 = !{!35, !12, i64 24}
!45 = !{!35, !12, i64 308}
!46 = !{!35, !12, i64 12}
!47 = !{!35, !12, i64 304}
!48 = !{!18, !12, i64 136}
!49 = !{!18, !12, i64 140}
!50 = !{!35, !12, i64 312}
!51 = !{!18, !12, i64 144}
!52 = !{!18, !12, i64 148}
!53 = !{!18, !12, i64 152}
!54 = !{!18, !12, i64 156}
!55 = !{!18, !12, i64 8}
!56 = !{!57, !14, i64 1520}
!57 = !{!"_ZTS19TechnologyParameter", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !14, i64 208, !14, i64 216, !14, i64 224, !14, i64 232, !14, i64 240, !14, i64 248, !14, i64 256, !14, i64 264, !14, i64 272, !14, i64 280, !14, i64 288, !14, i64 296, !14, i64 304, !14, i64 312, !14, i64 320, !14, i64 328, !14, i64 336, !14, i64 344, !58, i64 352, !59, i64 360, !59, i64 528, !59, i64 696, !59, i64 864, !59, i64 1032, !60, i64 1200, !60, i64 1264, !60, i64 1328, !61, i64 1392, !62, i64 1416, !62, i64 1464, !62, i64 1512}
!58 = !{!"long", !7, i64 0}
!59 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160}
!60 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56}
!61 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !14, i64 0, !14, i64 8, !14, i64 16}
!62 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40}
!63 = !{!60, !14, i64 0}
!64 = !{!35, !12, i64 64}
!65 = !{!35, !12, i64 68}
!66 = !{!35, !12, i64 72}
!67 = !{!35, !12, i64 80}
!68 = !{!35, !12, i64 76}
!69 = !{!18, !14, i64 248}
!70 = !{!57, !14, i64 1512}
!71 = !{!18, !14, i64 240}
!72 = !{!57, !14, i64 1424}
!73 = !{!18, !14, i64 224}
!74 = !{!57, !14, i64 1416}
!75 = !{!57, !14, i64 1200}
!76 = !{!18, !14, i64 216}
!77 = !{!57, !14, i64 1472}
!78 = !{!57, !14, i64 1464}
!79 = !{!60, !14, i64 16}
!80 = !{!18, !12, i64 36}
!81 = !{!57, !14, i64 224}
!82 = !{!57, !14, i64 240}
!83 = !{!18, !14, i64 176}
!84 = !{!57, !14, i64 1480}
!85 = !{!57, !14, i64 232}
!86 = !{!57, !14, i64 432}
!87 = !{!57, !14, i64 1432}
!88 = !{!57, !14, i64 1528}
!89 = !{!18, !12, i64 160}
!90 = !{!18, !12, i64 164}
!91 = !{!18, !12, i64 12}
!92 = !{!18, !12, i64 88}
!93 = !{!18, !12, i64 72}
!94 = !{!35, !12, i64 132}
!95 = !{!35, !12, i64 16}
!96 = !{!18, !12, i64 80}
!97 = !{!35, !10, i64 300}
!98 = !{!18, !12, i64 96}
!99 = !{!18, !12, i64 40}
!100 = !{!18, !12, i64 112}
!101 = !{!18, !12, i64 116}
!102 = !{!35, !10, i64 85}
!103 = !{!35, !12, i64 136}
!104 = !{!35, !10, i64 84}
!105 = !{!35, !12, i64 128}
!106 = !{!18, !12, i64 68}
!107 = !{!18, !12, i64 84}
!108 = !{!18, !12, i64 76}
!109 = !{!18, !12, i64 92}
!110 = !{!18, !12, i64 56}
!111 = !{!18, !12, i64 188}
!112 = !{!18, !12, i64 192}
!113 = !{!18, !12, i64 196}
!114 = !{!18, !12, i64 200}
!115 = !{!18, !12, i64 204}
!116 = !{!18, !12, i64 52}
!117 = !{!18, !12, i64 60}
!118 = !{!18, !12, i64 64}
!119 = !{!18, !12, i64 100}
!120 = !{!18, !12, i64 104}
!121 = !{!35, !10, i64 328}


; 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 }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@g_ip = external dso_local local_unnamed_addr global ptr, align 8
@g_tp = external dso_local local_unnamed_addr global %class.TechnologyParameter, align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.86 = external hidden unnamed_addr constant [18 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #0

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN16DynamicParameterC2Ebiidjjjjjb(ptr noundef nonnull align 8 dereferenceable(265) %0, i1 noundef zeroext %1, i32 noundef %2, i32 noundef %3, double noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9, i1 noundef zeroext %10) unnamed_addr #1 align 2 {
  %12 = zext i1 %1 to i8
  %13 = zext i1 %10 to i8
  store i8 %12, ptr %0, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %0, i64 1
  %15 = icmp ne i32 %2, 0
  %16 = zext i1 %15 to i8
  store i8 %16, ptr %14, align 1, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %0, i64 2
  %18 = icmp ne i32 %3, 0
  %19 = zext i1 %18 to i8
  store i8 %19, ptr %17, align 2, !tbaa !14
  %20 = getelementptr inbounds i8, ptr %0, i64 4
  store i32 0, ptr %20, align 4, !tbaa !15
  %21 = getelementptr inbounds i8, ptr %0, i64 16
  store double %4, ptr %21, align 8, !tbaa !16
  %22 = getelementptr inbounds i8, ptr %0, i64 24
  store i32 %5, ptr %22, align 8, !tbaa !17
  %23 = getelementptr inbounds i8, ptr %0, i64 28
  store i32 %6, ptr %23, align 4, !tbaa !18
  %24 = getelementptr inbounds i8, ptr %0, i64 32
  store i32 %7, ptr %24, align 8, !tbaa !19
  %25 = getelementptr inbounds i8, ptr %0, i64 44
  store i32 %8, ptr %25, align 4, !tbaa !20
  %26 = getelementptr inbounds i8, ptr %0, i64 48
  store i32 %9, ptr %26, align 8, !tbaa !21
  %27 = getelementptr inbounds i8, ptr %0, i64 108
  store i32 0, ptr %27, align 4, !tbaa !22
  %28 = getelementptr inbounds i8, ptr %0, i64 128
  store double 0.000000e+00, ptr %28, align 8, !tbaa !23
  %29 = getelementptr inbounds i8, ptr %0, i64 184
  store i32 0, ptr %29, align 8, !tbaa !24
  %30 = getelementptr inbounds i8, ptr %0, i64 212
  store i8 %13, ptr %30, align 4, !tbaa !25
  %31 = getelementptr inbounds i8, ptr %0, i64 216
  tail call void @_ZN4AreaC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31)
  %32 = getelementptr inbounds i8, ptr %0, i64 240
  tail call void @_ZN4AreaC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32)
  %33 = getelementptr inbounds i8, ptr %0, i64 264
  store i8 0, ptr %33, align 8, !tbaa !26
  %34 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %35 = trunc nuw i8 %34 to i1
  %36 = load ptr, ptr @g_ip, align 8
  %.in.v = select i1 %35, i64 120, i64 112
  %.in = getelementptr inbounds i8, ptr %36, i64 %.in.v
  %37 = load i32, ptr %.in, align 8, !tbaa !29
  %38 = getelementptr inbounds i8, ptr %0, i64 168
  store i32 %37, ptr %38, align 8, !tbaa !30
  %39 = add i32 %37, -3
  %40 = icmp ult i32 %39, 2
  %41 = getelementptr inbounds i8, ptr %0, i64 120
  %42 = zext i1 %40 to i8
  store i8 %42, ptr %41, align 8, !tbaa !31
  %43 = load i32, ptr %36, align 8, !tbaa !32
  %44 = getelementptr inbounds i8, ptr %36, i64 317
  %45 = load i8, ptr %44, align 1, !tbaa !35, !range !27, !noundef !28
  %46 = trunc nuw i8 %45 to i1
  %47 = getelementptr inbounds i8, ptr %0, i64 3
  store i8 %45, ptr %47, align 1, !tbaa !36
  br i1 %46, label %51, label %48

48:                                               ; preds = %11
  %49 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %50 = trunc nuw i8 %49 to i1
  br i1 %50, label %51, label %60

51:                                               ; preds = %48, %11
  %52 = load i32, ptr %22, align 8, !tbaa !17
  %.not = icmp eq i32 %52, 1
  %53 = load i32, ptr %24, align 8
  %.not52 = icmp eq i32 %53, 1
  %or.cond = select i1 %.not, i1 %.not52, i1 false
  br i1 %or.cond, label %54, label %.critedge

54:                                               ; preds = %51
  %55 = load double, ptr %21, align 8, !tbaa !16
  %or.cond58 = fcmp one double %55, 1.000000e+00
  %56 = load i32, ptr %25, align 4
  %.not53 = icmp ne i32 %56, 1
  %or.cond59.not90 = select i1 %or.cond58, i1 true, i1 %.not53
  %57 = load i32, ptr %26, align 8
  %.not54 = icmp ne i32 %57, 1
  %or.cond60.not89 = select i1 %or.cond59.not90, i1 true, i1 %.not54
  %58 = load i32, ptr %23, align 4
  %59 = icmp slt i32 %58, 2
  %or.cond62 = select i1 %or.cond60.not89, i1 true, i1 %59
  br i1 %or.cond62, label %.critedge, label %60

60:                                               ; preds = %54, %48
  br i1 %40, label %61, label %64

61:                                               ; preds = %60
  %62 = load i32, ptr %24, align 8
  %63 = icmp slt i32 %62, 2
  %or.cond65.not = select i1 %35, i1 true, i1 %63
  br i1 %or.cond65.not, label %64, label %.critedge

64:                                               ; preds = %60, %61
  %65 = icmp eq i8 %45, 0
  br i1 %65, label %66, label %71

66:                                               ; preds = %64
  %67 = load i32, ptr %22, align 8, !tbaa !17
  %68 = icmp slt i32 %67, 1
  %69 = load i32, ptr %23, align 4
  %70 = icmp slt i32 %69, 1
  %or.cond67 = select i1 %68, i1 true, i1 %70
  br i1 %or.cond67, label %.critedge, label %..thread_crit_edge

..thread_crit_edge:                               ; preds = %66
  %.pre111 = load i8, ptr %17, align 2, !tbaa !14, !range !27
  br label %.thread

71:                                               ; preds = %64
  %.pre112 = load i8, ptr %17, align 2, !tbaa !14, !range !27
  br i1 %46, label %._crit_edge, label %.thread

.thread:                                          ; preds = %..thread_crit_edge, %71
  %72 = phi i8 [ %.pre111, %..thread_crit_edge ], [ %.pre112, %71 ]
  %73 = trunc nuw i8 %72 to i1
  br i1 %73, label %._crit_edge, label %74

74:                                               ; preds = %.thread
  br i1 %35, label %75, label %123

75:                                               ; preds = %74
  %76 = getelementptr inbounds i8, ptr %36, i64 20
  %77 = load i8, ptr %76, align 4, !tbaa !37, !range !27, !noundef !28
  %78 = trunc nuw i8 %77 to i1
  br i1 %78, label %79, label %82

79:                                               ; preds = %75
  %80 = getelementptr inbounds i8, ptr %36, i64 24
  %81 = load i32, ptr %80, align 8, !tbaa !38
  br label %100

82:                                               ; preds = %75
  %83 = zext i32 %43 to i64
  %84 = tail call noundef i32 @_Z5_log2m(i64 noundef %83)
  %85 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %86 = getelementptr inbounds i8, ptr %85, i64 308
  %87 = load i32, ptr %86, align 4, !tbaa !41
  %88 = shl i32 %87, 1
  %89 = add i32 %88, -1
  %90 = zext i32 %89 to i64
  %91 = tail call noundef i32 @_Z5_log2m(i64 noundef %90)
  %92 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %93 = getelementptr inbounds i8, ptr %92, i64 12
  %94 = load i32, ptr %93, align 4, !tbaa !42
  %95 = zext i32 %94 to i64
  %96 = tail call noundef i32 @_Z5_log2m(i64 noundef %95)
  %97 = add i32 %91, 47
  %98 = add i32 %84, %96
  %99 = sub i32 %97, %98
  %.pre = load ptr, ptr @g_ip, align 8, !tbaa !39
  br label %100

100:                                              ; preds = %82, %79
  %101 = phi ptr [ %.pre, %82 ], [ %36, %79 ]
  %storemerge = phi i32 [ %99, %82 ], [ %81, %79 ]
  %102 = add nsw i32 %storemerge, 3
  %103 = and i32 %102, -4
  store i32 %103, ptr %20, align 4, !tbaa !15
  %104 = uitofp i32 %43 to double
  %105 = getelementptr inbounds i8, ptr %101, i64 12
  %106 = load i32, ptr %105, align 4, !tbaa !42
  %107 = getelementptr inbounds i8, ptr %101, i64 304
  %108 = load i32, ptr %107, align 8, !tbaa !43
  %109 = mul i32 %108, %106
  %110 = getelementptr inbounds i8, ptr %101, i64 308
  %111 = load i32, ptr %110, align 4, !tbaa !41
  %112 = mul i32 %109, %111
  %113 = load i32, ptr %23, align 4, !tbaa !18
  %114 = mul i32 %112, %113
  %115 = uitofp i32 %114 to double
  %116 = load double, ptr %21, align 8, !tbaa !16
  %117 = fmul double %116, %115
  %118 = fdiv double %104, %117
  %119 = tail call double @llvm.ceil.f64(double %118)
  %120 = fptosi double %119 to i32
  %121 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 %120, ptr %121, align 8, !tbaa !44
  %122 = mul i32 %111, %103
  br label %144

123:                                              ; preds = %74
  %124 = uitofp i32 %43 to double
  %125 = getelementptr inbounds i8, ptr %36, i64 12
  %126 = load i32, ptr %125, align 4, !tbaa !42
  %127 = getelementptr inbounds i8, ptr %36, i64 304
  %128 = load i32, ptr %127, align 8, !tbaa !43
  %129 = mul i32 %128, %126
  %130 = getelementptr inbounds i8, ptr %36, i64 312
  %131 = load i32, ptr %130, align 8, !tbaa !45
  %132 = mul i32 %129, %131
  %133 = load i32, ptr %23, align 4, !tbaa !18
  %134 = mul i32 %132, %133
  %135 = uitofp i32 %134 to double
  %136 = load double, ptr %21, align 8, !tbaa !16
  %137 = fmul double %136, %135
  %138 = fdiv double %124, %137
  %139 = tail call double @llvm.ceil.f64(double %138)
  %140 = fptosi double %139 to i32
  %141 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 %140, ptr %141, align 8, !tbaa !44
  %142 = shl i32 %128, 3
  %143 = mul i32 %142, %131
  br label %144

144:                                              ; preds = %123, %100
  %.sink120 = phi i32 [ %143, %123 ], [ %122, %100 ]
  %.sink = phi double [ %136, %123 ], [ %116, %100 ]
  %145 = phi ptr [ %36, %123 ], [ %101, %100 ]
  %146 = phi i32 [ %133, %123 ], [ %113, %100 ]
  %147 = phi i32 [ %140, %123 ], [ %120, %100 ]
  %148 = uitofp i32 %.sink120 to double
  %149 = fmul double %.sink, %148
  %150 = load i32, ptr %22, align 8, !tbaa !17
  %151 = sitofp i32 %150 to double
  %152 = fdiv double %149, %151
  %153 = tail call double @llvm.ceil.f64(double %152)
  %154 = fptosi double %153 to i32
  %155 = getelementptr inbounds i8, ptr %0, i64 140
  store i32 %154, ptr %155, align 4, !tbaa !46
  %156 = add i32 %147, -262145
  %or.cond68 = icmp ult i32 %156, -262129
  %157 = add i32 %154, -262145
  %or.cond69 = icmp ult i32 %157, -262143
  %or.cond121 = select i1 %or.cond68, i1 true, i1 %or.cond69
  br i1 %or.cond121, label %.critedge, label %236

._crit_edge:                                      ; preds = %71, %.thread
  %158 = phi i8 [ %72, %.thread ], [ %.pre112, %71 ]
  %159 = trunc nuw i8 %158 to i1
  %160 = getelementptr inbounds i8, ptr %36, i64 20
  %161 = load i8, ptr %160, align 4, !tbaa !37, !range !27, !noundef !28
  %162 = trunc nuw i8 %161 to i1
  br i1 %159, label %163, label %193

163:                                              ; preds = %._crit_edge
  br i1 %162, label %164, label %172

164:                                              ; preds = %163
  %165 = getelementptr inbounds i8, ptr %36, i64 24
  %166 = load i32, ptr %165, align 8, !tbaa !38
  %167 = uitofp i32 %166 to double
  %168 = fmul double %167, 1.250000e-01
  %169 = tail call double @llvm.ceil.f64(double %168)
  %170 = fmul double %169, 8.000000e+00
  %171 = fptosi double %170 to i32
  br label %172

172:                                              ; preds = %163, %164
  %storemerge56 = phi i32 [ %171, %164 ], [ 48, %163 ]
  store i32 %storemerge56, ptr %20, align 4, !tbaa !15
  %173 = uitofp i32 %43 to double
  %174 = getelementptr inbounds i8, ptr %36, i64 12
  %175 = load i32, ptr %174, align 4, !tbaa !42
  %176 = mul i32 %175, %storemerge56
  %177 = uitofp i32 %176 to double
  %178 = fmul double %177, 1.250000e-01
  %179 = load i32, ptr %23, align 4, !tbaa !18
  %180 = sitofp i32 %179 to double
  %181 = fmul double %178, %180
  %182 = fdiv double %173, %181
  %183 = tail call double @llvm.ceil.f64(double %182)
  %184 = fptosi double %183 to i32
  %185 = getelementptr inbounds i8, ptr %0, i64 144
  store i32 %184, ptr %185, align 8, !tbaa !47
  %186 = getelementptr inbounds i8, ptr %0, i64 148
  store i32 %storemerge56, ptr %186, align 4, !tbaa !48
  %187 = icmp eq i32 %184, 0
  %188 = icmp sgt i32 %184, 262144
  %or.cond70 = or i1 %187, %188
  %189 = add i32 %storemerge56, -262145
  %190 = icmp ult i32 %189, -262143
  %or.cond72 = select i1 %or.cond70, i1 true, i1 %190
  br i1 %or.cond72, label %.critedge, label %191

191:                                              ; preds = %172
  %192 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 %184, ptr %192, align 8, !tbaa !44
  %.pre99 = load i32, ptr %22, align 8, !tbaa !17
  br label %236

193:                                              ; preds = %._crit_edge
  br i1 %162, label %194, label %197

194:                                              ; preds = %193
  %195 = getelementptr inbounds i8, ptr %36, i64 24
  %196 = load i32, ptr %195, align 8, !tbaa !38
  br label %203

197:                                              ; preds = %193
  %198 = getelementptr inbounds i8, ptr %36, i64 304
  %199 = load i32, ptr %198, align 8, !tbaa !43
  %200 = zext i32 %199 to i64
  %201 = tail call noundef i32 @_Z5_log2m(i64 noundef %200)
  %202 = sub i32 47, %201
  %.pre98 = load ptr, ptr @g_ip, align 8, !tbaa !39
  br label %203

203:                                              ; preds = %197, %194
  %204 = phi ptr [ %.pre98, %197 ], [ %36, %194 ]
  %storemerge55 = phi i32 [ %202, %197 ], [ %196, %194 ]
  %205 = add nsw i32 %storemerge55, 3
  %206 = and i32 %205, -4
  store i32 %206, ptr %20, align 4, !tbaa !15
  %207 = getelementptr inbounds i8, ptr %204, i64 12
  %208 = load i32, ptr %207, align 4, !tbaa !42
  %209 = getelementptr inbounds i8, ptr %204, i64 304
  %210 = load i32, ptr %209, align 8, !tbaa !43
  %211 = mul i32 %210, %208
  %212 = load i32, ptr %23, align 4, !tbaa !18
  %213 = mul i32 %211, %212
  %214 = udiv i32 %43, %213
  %215 = getelementptr inbounds i8, ptr %0, i64 144
  store i32 %214, ptr %215, align 8, !tbaa !47
  %216 = sitofp i32 %206 to double
  %217 = load double, ptr %21, align 8, !tbaa !16
  %218 = fmul double %217, %216
  %219 = load i32, ptr %22, align 8, !tbaa !17
  %220 = sitofp i32 %219 to double
  %221 = fdiv double %218, %220
  %222 = tail call double @llvm.ceil.f64(double %221)
  %223 = fptosi double %222 to i32
  %224 = getelementptr inbounds i8, ptr %0, i64 148
  store i32 %223, ptr %224, align 4, !tbaa !48
  %225 = icmp ugt i32 %213, %43
  %226 = icmp sgt i32 %214, 262144
  %or.cond73 = or i1 %225, %226
  %227 = add i32 %223, -262145
  %228 = icmp ult i32 %227, -262143
  %or.cond75 = select i1 %or.cond73, i1 true, i1 %228
  br i1 %or.cond75, label %.critedge, label %229

229:                                              ; preds = %203
  %230 = getelementptr inbounds i8, ptr %0, i64 152
  store i32 %214, ptr %230, align 8, !tbaa !49
  %231 = shl i32 %210, 3
  %232 = getelementptr inbounds i8, ptr %0, i64 156
  store i32 %231, ptr %232, align 4, !tbaa !50
  %233 = add i32 %231, -262145
  %or.cond78 = icmp ult i32 %233, -262143
  br i1 %or.cond78, label %.critedge, label %234

234:                                              ; preds = %229
  %235 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 %214, ptr %235, align 8, !tbaa !44
  br label %236

236:                                              ; preds = %144, %191, %234
  %237 = phi i32 [ %184, %191 ], [ %214, %234 ], [ %147, %144 ]
  %238 = phi ptr [ %36, %191 ], [ %204, %234 ], [ %145, %144 ]
  %239 = phi i32 [ %179, %191 ], [ %212, %234 ], [ %146, %144 ]
  %240 = phi i32 [ %.pre99, %191 ], [ %219, %234 ], [ %150, %144 ]
  %241 = mul nsw i32 %239, %240
  %242 = getelementptr inbounds i8, ptr %0, i64 8
  store i32 %241, ptr %242, align 8, !tbaa !51
  %243 = load i8, ptr %47, align 1, !tbaa !36, !range !27, !noundef !28
  %244 = trunc nuw i8 %243 to i1
  br i1 %244, label %309, label %245

245:                                              ; preds = %236
  %246 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %247 = trunc nuw i8 %246 to i1
  br i1 %247, label %309, label %248

248:                                              ; preds = %245
  %249 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %250 = trunc nuw i8 %249 to i1
  br i1 %250, label %251, label %275

251:                                              ; preds = %248
  %252 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1424), align 8, !tbaa !52
  %253 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1200), align 8, !tbaa !59
  %254 = fmul double %253, 2.000000e+00
  %255 = getelementptr inbounds i8, ptr %238, i64 64
  %256 = load i32, ptr %255, align 8, !tbaa !60
  %257 = add i32 %256, -1
  %258 = getelementptr inbounds i8, ptr %238, i64 68
  %259 = load i32, ptr %258, align 4, !tbaa !61
  %260 = getelementptr inbounds i8, ptr %238, i64 72
  %261 = load i32, ptr %260, align 8, !tbaa !62
  %262 = add i32 %261, %257
  %263 = add i32 %262, %259
  %264 = uitofp i32 %263 to double
  %265 = tail call double @llvm.fmuladd.f64(double %254, double %264, double %252)
  %266 = getelementptr inbounds i8, ptr %0, i64 224
  store double %265, ptr %266, align 8, !tbaa !63
  %267 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1416), align 8, !tbaa !64
  %268 = getelementptr inbounds i8, ptr %238, i64 76
  %269 = load i32, ptr %268, align 4, !tbaa !65
  %270 = sub i32 %263, %269
  %271 = uitofp i32 %270 to double
  %272 = tail call double @llvm.fmuladd.f64(double %254, double %271, double %267)
  %273 = uitofp i32 %269 to double
  %274 = tail call double @llvm.fmuladd.f64(double %253, double %273, double %272)
  br label %.thread79

275:                                              ; preds = %248
  %276 = load i8, ptr %41, align 8, !tbaa !31, !range !27, !noundef !28
  %277 = trunc nuw i8 %276 to i1
  br i1 %277, label %278, label %282

278:                                              ; preds = %275
  %279 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1472), align 8, !tbaa !66
  %280 = getelementptr inbounds i8, ptr %0, i64 224
  store double %279, ptr %280, align 8, !tbaa !63
  %281 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1464), align 8, !tbaa !67
  br label %.thread79

282:                                              ; preds = %275
  %283 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1424), align 8, !tbaa !52
  %284 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1200), align 8, !tbaa !59
  %285 = fmul double %284, 2.000000e+00
  %286 = getelementptr inbounds i8, ptr %238, i64 72
  %287 = load i32, ptr %286, align 8, !tbaa !62
  %288 = getelementptr inbounds i8, ptr %238, i64 64
  %289 = load i32, ptr %288, align 8, !tbaa !60
  %290 = getelementptr inbounds i8, ptr %238, i64 68
  %291 = load i32, ptr %290, align 4, !tbaa !61
  %292 = add i32 %287, -1
  %293 = add i32 %292, %289
  %294 = add i32 %293, %291
  %295 = uitofp i32 %294 to double
  %296 = tail call double @llvm.fmuladd.f64(double %285, double %295, double %283)
  %297 = getelementptr inbounds i8, ptr %0, i64 224
  store double %296, ptr %297, align 8, !tbaa !63
  %298 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1416), align 8, !tbaa !64
  %299 = getelementptr inbounds i8, ptr %238, i64 76
  %300 = load i32, ptr %299, align 4, !tbaa !65
  %301 = sub i32 %294, %300
  %302 = uitofp i32 %301 to double
  %303 = tail call double @llvm.fmuladd.f64(double %285, double %302, double %298)
  %304 = uitofp i32 %300 to double
  %305 = tail call double @llvm.fmuladd.f64(double %284, double %304, double %303)
  br label %.thread79

.thread79:                                        ; preds = %251, %282, %278
  %.sink122 = phi double [ %274, %251 ], [ %305, %282 ], [ %281, %278 ]
  %306 = phi double [ %265, %251 ], [ %296, %282 ], [ %279, %278 ]
  store double %.sink122, ptr %31, align 8, !tbaa !68
  %307 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1216), align 8, !tbaa !69
  %308 = fmul double %306, %307
  br label %359

309:                                              ; preds = %236, %245
  %310 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1200), align 8, !tbaa !59
  %311 = fmul double %310, 2.000000e+00
  %312 = getelementptr inbounds i8, ptr %238, i64 64
  %313 = load i32, ptr %312, align 8, !tbaa !60
  %314 = add i32 %313, -1
  %315 = getelementptr inbounds i8, ptr %238, i64 68
  %316 = load i32, ptr %315, align 4, !tbaa !61
  %317 = getelementptr inbounds i8, ptr %238, i64 72
  %318 = load i32, ptr %317, align 8, !tbaa !62
  %319 = add i32 %318, %316
  %320 = add i32 %319, %314
  %321 = uitofp i32 %320 to double
  %322 = getelementptr inbounds i8, ptr %238, i64 80
  %323 = load i32, ptr %322, align 8, !tbaa !70
  %324 = add i32 %323, -1
  %325 = uitofp i32 %324 to double
  %326 = getelementptr inbounds i8, ptr %238, i64 76
  %327 = load i32, ptr %326, align 4, !tbaa !65
  %328 = uitofp i32 %327 to double
  %329 = load <2 x double>, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1512), align 8, !tbaa !71
  %330 = insertelement <2 x double> poison, double %311, i64 0
  %331 = shufflevector <2 x double> %330, <2 x double> poison, <2 x i32> zeroinitializer
  %332 = insertelement <2 x double> poison, double %321, i64 0
  %333 = shufflevector <2 x double> %332, <2 x double> poison, <2 x i32> zeroinitializer
  %334 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %331, <2 x double> %333, <2 x double> %329)
  %335 = insertelement <2 x double> poison, double %325, i64 0
  %336 = shufflevector <2 x double> %335, <2 x double> poison, <2 x i32> zeroinitializer
  %337 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %331, <2 x double> %336, <2 x double> %334)
  %338 = insertelement <2 x double> poison, double %310, i64 0
  %339 = shufflevector <2 x double> %338, <2 x double> poison, <2 x i32> zeroinitializer
  %340 = insertelement <2 x double> poison, double %328, i64 0
  %341 = shufflevector <2 x double> %340, <2 x double> poison, <2 x i32> zeroinitializer
  %342 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %339, <2 x double> %341, <2 x double> %337)
  store <2 x double> %342, ptr %32, align 8, !tbaa !71
  %343 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1424), align 8, !tbaa !52
  %344 = add i32 %314, %316
  %345 = add i32 %344, %318
  %346 = uitofp i32 %345 to double
  %347 = tail call double @llvm.fmuladd.f64(double %311, double %346, double %343)
  %348 = tail call double @llvm.fmuladd.f64(double %311, double %325, double %347)
  %349 = getelementptr inbounds i8, ptr %0, i64 224
  store double %348, ptr %349, align 8, !tbaa !63
  %350 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1416), align 8, !tbaa !64
  %351 = sub i32 %320, %327
  %352 = uitofp i32 %351 to double
  %353 = tail call double @llvm.fmuladd.f64(double %311, double %352, double %350)
  %354 = tail call double @llvm.fmuladd.f64(double %310, double %328, double %353)
  %355 = tail call double @llvm.fmuladd.f64(double %311, double %325, double %354)
  store double %355, ptr %31, align 8, !tbaa !68
  %356 = extractelement <2 x double> %342, i64 0
  br i1 %244, label %413, label %._crit_edge100

._crit_edge100:                                   ; preds = %309
  %357 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1216), align 8, !tbaa !69
  %358 = fmul double %348, %357
  %.pre101 = load i8, ptr %17, align 2, !tbaa !14, !range !27
  br label %359

359:                                              ; preds = %._crit_edge100, %.thread79
  %360 = phi double [ %.sink122, %.thread79 ], [ %355, %._crit_edge100 ]
  %361 = phi i8 [ %246, %.thread79 ], [ %.pre101, %._crit_edge100 ]
  %362 = phi double [ %308, %.thread79 ], [ %358, %._crit_edge100 ]
  %363 = trunc nuw i8 %361 to i1
  br i1 %363, label %._crit_edge102, label %364

._crit_edge102:                                   ; preds = %359
  %.pre103 = load double, ptr %32, align 8, !tbaa !72
  br label %413

364:                                              ; preds = %359
  %365 = load i8, ptr %41, align 8, !tbaa !31, !range !27, !noundef !28
  %366 = trunc nuw i8 %365 to i1
  br i1 %366, label %367, label %404

367:                                              ; preds = %364
  %368 = getelementptr inbounds i8, ptr %0, i64 36
  store i32 1, ptr %368, align 4, !tbaa !73
  %369 = load i32, ptr %38, align 8, !tbaa !30
  %370 = icmp eq i32 %369, 4
  br i1 %370, label %371, label %382

371:                                              ; preds = %367
  %372 = uitofp i32 %237 to double
  %373 = fmul double %362, %372
  %374 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 224), align 8, !tbaa !74
  %375 = fmul double %374, 5.000000e-01
  %376 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 240), align 8, !tbaa !75
  %377 = fmul double %375, %376
  %378 = fadd double %376, %373
  %379 = fdiv double %377, %378
  store double %379, ptr %28, align 8, !tbaa !23
  %380 = fcmp olt double %379, 8.000000e-02
  br i1 %380, label %.critedge, label %381

381:                                              ; preds = %371
  store double 8.000000e-02, ptr %28, align 8, !tbaa !23
  br label %422

382:                                              ; preds = %367
  %383 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1480), align 8, !tbaa !76
  %384 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %383, i32 noundef 1, i32 noundef 1, i32 noundef 0, double noundef %360, i1 noundef zeroext true, i1 noundef zeroext true, i1 noundef zeroext false)
  %385 = fmul double %384, 5.000000e-01
  %386 = getelementptr inbounds i8, ptr %0, i64 136
  %387 = load i32, ptr %386, align 8, !tbaa !44
  %388 = uitofp i32 %387 to double
  %389 = fadd double %362, %385
  %390 = fmul double %389, %388
  %391 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 224), align 8, !tbaa !74
  %392 = fmul double %391, 5.000000e-01
  %393 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 240), align 8, !tbaa !75
  %394 = fmul double %392, %393
  %395 = fadd double %393, %390
  %396 = fdiv double %394, %395
  store double %396, ptr %28, align 8, !tbaa !23
  %397 = fcmp uge double %396, 8.000000e-02
  br i1 %397, label %398, label %.critedge

398:                                              ; preds = %382
  store double 8.000000e-02, ptr %28, align 8, !tbaa !23
  %399 = fmul double %393, 9.000000e-01
  %400 = fmul double %399, 1.250000e-01
  %401 = fmul double %391, %400
  %402 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 232), align 8, !tbaa !77
  %403 = fdiv double %401, %402
  br label %422

404:                                              ; preds = %364
  %405 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 432), align 8
  %406 = fmul double %405, 5.000000e-02
  %407 = fcmp ogt double %406, 8.000000e-02
  %408 = select i1 %407, double %406, double 8.000000e-02
  store double %408, ptr %28, align 8, !tbaa !23
  %409 = load i32, ptr %24, align 8, !tbaa !19
  %410 = getelementptr inbounds i8, ptr %0, i64 36
  store i32 %409, ptr %410, align 4, !tbaa !73
  %411 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1432), align 8, !tbaa !78
  %412 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %411, i32 noundef 1, i32 noundef 1, i32 noundef 0, double noundef %360, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false)
  br label %422

413:                                              ; preds = %._crit_edge102, %309
  %414 = phi double [ %.pre103, %._crit_edge102 ], [ %356, %309 ]
  %415 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 432), align 8
  %416 = fmul double %415, 5.000000e-02
  %417 = fcmp ogt double %416, 8.000000e-02
  %418 = select i1 %417, double %416, double 8.000000e-02
  store double %418, ptr %28, align 8, !tbaa !23
  %419 = getelementptr inbounds i8, ptr %0, i64 36
  store i32 1, ptr %419, align 4, !tbaa !73
  %420 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1528), align 8, !tbaa !79
  %421 = tail call noundef double @_Z8drain_C_diiidbbb(double noundef %420, i32 noundef 1, i32 noundef 1, i32 noundef 0, double noundef %414, i1 noundef zeroext false, i1 noundef zeroext true, i1 noundef zeroext false)
  br label %422

422:                                              ; preds = %398, %404, %381, %413
  %.sink123 = phi double [ %403, %398 ], [ 0.000000e+00, %404 ], [ 6.400000e-02, %381 ], [ 0.000000e+00, %413 ]
  %423 = getelementptr inbounds i8, ptr %0, i64 176
  store double %.sink123, ptr %423, align 8, !tbaa !80
  %424 = load i8, ptr %47, align 1, !tbaa !36, !range !27, !noundef !28
  %425 = trunc nuw i8 %424 to i1
  br i1 %425, label %._crit_edge104, label %426

._crit_edge104:                                   ; preds = %422
  %.pre105 = load i32, ptr %23, align 4, !tbaa !18
  br label %429

426:                                              ; preds = %422
  %427 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %428 = trunc nuw i8 %427 to i1
  %.pre106 = load i32, ptr %23, align 4, !tbaa !18
  br i1 %428, label %429, label %481

429:                                              ; preds = %._crit_edge104, %426
  %430 = phi i32 [ %.pre105, %._crit_edge104 ], [ %.pre106, %426 ]
  switch i32 %430, label %440 [
    i32 0, label %431
    i32 1, label %434
    i32 2, label %437
  ]

431:                                              ; preds = %429
  %432 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.86)
  %433 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %432, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 0) #8
  unreachable

434:                                              ; preds = %429
  %435 = getelementptr inbounds i8, ptr %0, i64 160
  store i32 1, ptr %435, align 8, !tbaa !81
  %436 = getelementptr inbounds i8, ptr %0, i64 164
  store i32 1, ptr %436, align 4, !tbaa !82
  br label %454

437:                                              ; preds = %429
  %438 = getelementptr inbounds i8, ptr %0, i64 160
  store i32 1, ptr %438, align 8, !tbaa !81
  %439 = getelementptr inbounds i8, ptr %0, i64 164
  store i32 1, ptr %439, align 4, !tbaa !82
  br label %454

440:                                              ; preds = %429
  %441 = sitofp i32 %430 to double
  %442 = fmul double %441, 2.500000e-01
  %443 = tail call double @sqrt(double noundef %442) #9
  %444 = tail call double @llvm.floor.f64(double %443)
  %445 = fptosi double %444 to i32
  %446 = getelementptr inbounds i8, ptr %0, i64 160
  store i32 %445, ptr %446, align 8, !tbaa !81
  %447 = load i32, ptr %23, align 4, !tbaa !18
  %448 = sitofp i32 %447 to double
  %449 = fmul double %448, 2.500000e-01
  %450 = sitofp i32 %445 to double
  %451 = fdiv double %449, %450
  %452 = fptosi double %451 to i32
  %453 = getelementptr inbounds i8, ptr %0, i64 164
  store i32 %452, ptr %453, align 4, !tbaa !82
  %.pre107 = load i8, ptr %47, align 1, !tbaa !36, !range !27
  br label %454

454:                                              ; preds = %440, %437, %434
  %455 = phi i8 [ %.pre107, %440 ], [ %424, %437 ], [ %424, %434 ]
  %456 = phi i32 [ %452, %440 ], [ 1, %437 ], [ 1, %434 ]
  %457 = phi i32 [ %445, %440 ], [ 1, %437 ], [ 1, %434 ]
  %458 = mul nsw i32 %456, %457
  %459 = getelementptr inbounds i8, ptr %0, i64 12
  store i32 %458, ptr %459, align 4, !tbaa !83
  %460 = trunc nuw i8 %455 to i1
  br i1 %460, label %461, label %468

461:                                              ; preds = %454
  %462 = getelementptr inbounds i8, ptr %0, i64 156
  %463 = load i32, ptr %462, align 4, !tbaa !50
  %464 = getelementptr inbounds i8, ptr %0, i64 88
  store i32 %463, ptr %464, align 8, !tbaa !84
  %465 = load i32, ptr %20, align 4, !tbaa !15
  %466 = add nsw i32 %465, %463
  %467 = getelementptr inbounds i8, ptr %0, i64 72
  store i32 %466, ptr %467, align 8, !tbaa !85
  br label %507

468:                                              ; preds = %454
  %469 = getelementptr inbounds i8, ptr %0, i64 136
  %470 = load i32, ptr %469, align 8, !tbaa !44
  %471 = tail call noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %470)
  %472 = tail call double @llvm.ceil.f64(double %471)
  %473 = load i32, ptr %242, align 8, !tbaa !51
  %474 = tail call noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %473)
  %475 = tail call double @llvm.ceil.f64(double %474)
  %476 = fadd double %472, %475
  %477 = fptosi double %476 to i32
  %478 = getelementptr inbounds i8, ptr %0, i64 88
  store i32 %477, ptr %478, align 8, !tbaa !84
  %479 = load i32, ptr %20, align 4, !tbaa !15
  %480 = getelementptr inbounds i8, ptr %0, i64 72
  store i32 %479, ptr %480, align 8, !tbaa !85
  %.pre108 = load i8, ptr %47, align 1, !tbaa !36, !range !27
  br label %507

481:                                              ; preds = %426
  %482 = load i32, ptr %22, align 8, !tbaa !17
  %483 = icmp sgt i32 %482, 3
  %484 = sdiv i32 %482, 2
  %485 = select i1 %483, i32 %484, i32 1
  %486 = getelementptr inbounds i8, ptr %0, i64 160
  store i32 %485, ptr %486, align 8, !tbaa !81
  %487 = icmp sgt i32 %.pre106, 3
  %488 = sdiv i32 %.pre106, 2
  %489 = select i1 %487, i32 %488, i32 1
  %490 = getelementptr inbounds i8, ptr %0, i64 164
  store i32 %489, ptr %490, align 4, !tbaa !82
  %491 = mul nsw i32 %489, %485
  %492 = getelementptr inbounds i8, ptr %0, i64 12
  store i32 %491, ptr %492, align 4, !tbaa !83
  %493 = load i32, ptr %242, align 8, !tbaa !51
  %494 = sdiv i32 %493, %491
  %495 = getelementptr inbounds i8, ptr %0, i64 140
  %496 = load i32, ptr %495, align 4, !tbaa !46
  %497 = mul i32 %496, %494
  %498 = getelementptr inbounds i8, ptr %0, i64 36
  %499 = load i32, ptr %498, align 4, !tbaa !73
  %500 = load i32, ptr %25, align 4, !tbaa !20
  %501 = mul nsw i32 %500, %499
  %502 = load i32, ptr %26, align 8, !tbaa !21
  %503 = mul nsw i32 %501, %502
  %504 = udiv i32 %497, %503
  %505 = tail call i32 @llvm.umax.i32(i32 %504, i32 1)
  %506 = getelementptr inbounds i8, ptr %0, i64 72
  store i32 %505, ptr %506, align 8, !tbaa !85
  br label %507

507:                                              ; preds = %461, %468, %481
  %508 = phi i32 [ %466, %461 ], [ %479, %468 ], [ %505, %481 ]
  %509 = phi i8 [ %455, %461 ], [ %.pre108, %468 ], [ %424, %481 ]
  %510 = trunc nuw i8 %509 to i1
  br i1 %510, label %564, label %511

511:                                              ; preds = %507
  %512 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %513 = trunc nuw i8 %512 to i1
  br i1 %513, label %574, label %514

514:                                              ; preds = %511
  %515 = load i32, ptr %242, align 8, !tbaa !51
  %516 = getelementptr inbounds i8, ptr %0, i64 12
  %517 = load i32, ptr %516, align 4, !tbaa !83
  %518 = sdiv i32 %515, %517
  %519 = icmp slt i32 %508, %518
  br i1 %519, label %.critedge, label %520

520:                                              ; preds = %514
  %521 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %522 = trunc nuw i8 %521 to i1
  br i1 %522, label %554, label %523

523:                                              ; preds = %520
  %524 = load i8, ptr %30, align 4, !tbaa !25, !range !27, !noundef !28
  %525 = trunc nuw i8 %524 to i1
  %526 = load ptr, ptr @g_ip, align 8, !tbaa !39
  br i1 %525, label %527, label %535

527:                                              ; preds = %523
  %528 = getelementptr inbounds i8, ptr %526, i64 132
  %529 = load i32, ptr %528, align 4, !tbaa !86
  %530 = getelementptr inbounds i8, ptr %526, i64 16
  %531 = load i32, ptr %530, align 8, !tbaa !87
  %532 = mul i32 %531, %529
  %533 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %532, ptr %533, align 8, !tbaa !88
  %534 = load i32, ptr %25, align 4, !tbaa !20
  br label %588

535:                                              ; preds = %523
  %536 = getelementptr inbounds i8, ptr %526, i64 300
  %537 = load i8, ptr %536, align 4, !tbaa !89, !range !27, !noundef !28
  %538 = trunc nuw i8 %537 to i1
  %539 = getelementptr inbounds i8, ptr %526, i64 16
  %540 = load i32, ptr %539, align 8, !tbaa !87
  br i1 %538, label %541, label %547

541:                                              ; preds = %535
  %542 = getelementptr inbounds i8, ptr %526, i64 312
  %543 = load i32, ptr %542, align 8, !tbaa !45
  %544 = mul i32 %543, %540
  %545 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %544, ptr %545, align 8, !tbaa !88
  %546 = load i32, ptr %25, align 4, !tbaa !20
  br label %588

547:                                              ; preds = %535
  %548 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %540, ptr %548, align 8, !tbaa !88
  %549 = load i32, ptr %25, align 4, !tbaa !20
  %550 = getelementptr inbounds i8, ptr %526, i64 312
  %551 = load i32, ptr %550, align 8, !tbaa !45
  %552 = udiv i32 %549, %551
  %553 = icmp slt i32 %552, 1
  br i1 %553, label %.critedge, label %588

554:                                              ; preds = %520
  %555 = load i32, ptr %20, align 4, !tbaa !15
  %556 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %557 = getelementptr inbounds i8, ptr %556, i64 308
  %558 = load i32, ptr %557, align 4, !tbaa !41
  %559 = mul i32 %558, %555
  %560 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %559, ptr %560, align 8, !tbaa !88
  %561 = icmp slt i32 %508, %555
  br i1 %561, label %.critedge, label %562

562:                                              ; preds = %554
  %563 = load i32, ptr %25, align 4, !tbaa !20
  br label %588

564:                                              ; preds = %507
  %565 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %566 = getelementptr inbounds i8, ptr %565, i64 304
  %567 = load i32, ptr %566, align 8, !tbaa !43
  %568 = shl i32 %567, 3
  %569 = getelementptr inbounds i8, ptr %0, i64 96
  store i32 %568, ptr %569, align 8, !tbaa !90
  %570 = getelementptr inbounds i8, ptr %0, i64 148
  %571 = load i32, ptr %570, align 4, !tbaa !48
  %572 = add nsw i32 %571, %568
  %573 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %572, ptr %573, align 8, !tbaa !88
  br label %588

574:                                              ; preds = %511
  %575 = getelementptr inbounds i8, ptr %0, i64 136
  %576 = load i32, ptr %575, align 8, !tbaa !44
  %577 = tail call noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %576)
  %578 = tail call double @llvm.ceil.f64(double %577)
  %579 = load i32, ptr %242, align 8, !tbaa !51
  %580 = tail call noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %579)
  %581 = tail call double @llvm.ceil.f64(double %580)
  %582 = fadd double %578, %581
  %583 = fptosi double %582 to i32
  %584 = getelementptr inbounds i8, ptr %0, i64 96
  store i32 %583, ptr %584, align 8, !tbaa !90
  %585 = getelementptr inbounds i8, ptr %0, i64 148
  %586 = load i32, ptr %585, align 4, !tbaa !48
  %587 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %586, ptr %587, align 8, !tbaa !88
  %.pre109 = load i8, ptr %47, align 1, !tbaa !36, !range !27
  br label %588

588:                                              ; preds = %564, %574, %562, %541, %547, %527
  %589 = phi i32 [ %559, %562 ], [ %532, %527 ], [ %544, %541 ], [ %540, %547 ], [ %586, %574 ], [ %572, %564 ]
  %590 = phi i8 [ %509, %562 ], [ %509, %527 ], [ %509, %541 ], [ %509, %547 ], [ %.pre109, %574 ], [ %509, %564 ]
  %.036 = phi i32 [ %563, %562 ], [ %534, %527 ], [ %546, %541 ], [ %552, %547 ], [ 1, %574 ], [ 1, %564 ]
  %591 = getelementptr inbounds i8, ptr %0, i64 40
  store i32 %.036, ptr %591, align 8, !tbaa !91
  %592 = trunc nuw i8 %590 to i1
  br i1 %592, label %602, label %593

593:                                              ; preds = %588
  %594 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %595 = trunc nuw i8 %594 to i1
  br i1 %595, label %.thread87, label %596

596:                                              ; preds = %593
  %597 = getelementptr inbounds i8, ptr %0, i64 72
  %598 = load i32, ptr %597, align 8, !tbaa !85
  %599 = sdiv i32 %589, %598
  %600 = getelementptr inbounds i8, ptr %0, i64 112
  store i32 %599, ptr %600, align 8, !tbaa !92
  %601 = icmp eq i32 %599, 0
  br i1 %601, label %.critedge, label %.thread83

602:                                              ; preds = %588
  %603 = getelementptr inbounds i8, ptr %0, i64 112
  store i32 1, ptr %603, align 8, !tbaa !92
  %604 = getelementptr inbounds i8, ptr %0, i64 160
  %605 = load i32, ptr %604, align 8, !tbaa !81
  %606 = getelementptr inbounds i8, ptr %0, i64 116
  store i32 %605, ptr %606, align 4, !tbaa !93
  %607 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %608 = trunc nuw i8 %607 to i1
  br label %.thread84.thread

.thread87:                                        ; preds = %593
  %609 = getelementptr inbounds i8, ptr %0, i64 112
  store i32 1, ptr %609, align 8, !tbaa !92
  %610 = getelementptr inbounds i8, ptr %0, i64 160
  %611 = load i32, ptr %610, align 8, !tbaa !81
  %612 = getelementptr inbounds i8, ptr %0, i64 116
  store i32 %611, ptr %612, align 4, !tbaa !93
  %613 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %614 = trunc nuw i8 %613 to i1
  br label %.thread84.thread

.thread83:                                        ; preds = %596
  %615 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %616 = trunc nuw i8 %615 to i1
  br i1 %616, label %.thread84, label %.thread84.thread

.thread84:                                        ; preds = %.thread83
  %617 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %618 = getelementptr inbounds i8, ptr %617, i64 308
  %619 = load i32, ptr %618, align 4, !tbaa !41
  %620 = udiv i32 %619, %599
  %621 = getelementptr inbounds i8, ptr %0, i64 72
  store i32 %620, ptr %621, align 8, !tbaa !85
  %622 = mul nsw i32 %620, %599
  %623 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %622, ptr %623, align 8, !tbaa !88
  br label %.thread84.thread

.thread84.thread:                                 ; preds = %.thread87, %602, %.thread83, %.thread84
  %624 = phi i32 [ %599, %.thread83 ], [ %599, %.thread84 ], [ 1, %602 ], [ 1, %.thread87 ]
  %625 = phi i1 [ false, %.thread83 ], [ true, %.thread84 ], [ %608, %602 ], [ %614, %.thread87 ]
  %626 = phi i8 [ %615, %.thread83 ], [ %615, %.thread84 ], [ %607, %602 ], [ %613, %.thread87 ]
  %627 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %628 = getelementptr inbounds i8, ptr %627, i64 85
  %629 = load i8, ptr %628, align 1, !tbaa !94, !range !27, !noundef !28
  %630 = icmp eq i8 %629, 0
  br i1 %630, label %631, label %644

631:                                              ; preds = %.thread84.thread
  %632 = load i8, ptr %30, align 4, !tbaa !25, !range !27, !noundef !28
  %633 = trunc nuw i8 %632 to i1
  br i1 %633, label %634, label %644

634:                                              ; preds = %631
  %635 = getelementptr inbounds i8, ptr %0, i64 72
  %636 = load i32, ptr %635, align 8, !tbaa !85
  %637 = mul nsw i32 %636, %624
  %638 = load i32, ptr %25, align 4, !tbaa !20
  %639 = mul nsw i32 %637, %638
  %640 = load i32, ptr %26, align 8, !tbaa !21
  %641 = mul nsw i32 %639, %640
  %642 = getelementptr inbounds i8, ptr %627, i64 136
  %643 = load i32, ptr %642, align 8, !tbaa !95
  %.not57 = icmp eq i32 %641, %643
  br i1 %.not57, label %644, label %.critedge

644:                                              ; preds = %634, %631, %.thread84.thread
  %645 = icmp eq i8 %626, 0
  br i1 %645, label %646, label %667

646:                                              ; preds = %644
  %647 = getelementptr inbounds i8, ptr %627, i64 84
  %648 = load i8, ptr %647, align 4, !tbaa !96, !range !27, !noundef !28
  %649 = trunc nuw i8 %648 to i1
  br i1 %649, label %650, label %667

650:                                              ; preds = %646
  %651 = getelementptr inbounds i8, ptr %0, i64 72
  %652 = load i32, ptr %651, align 8, !tbaa !85
  %653 = mul nsw i32 %652, %624
  %654 = load i32, ptr %25, align 4, !tbaa !20
  %655 = mul nsw i32 %653, %654
  %656 = load i32, ptr %26, align 8, !tbaa !21
  %657 = mul nsw i32 %655, %656
  %658 = getelementptr inbounds i8, ptr %627, i64 16
  %659 = load i32, ptr %658, align 8, !tbaa !87
  %660 = getelementptr inbounds i8, ptr %627, i64 128
  %661 = load i32, ptr %660, align 8, !tbaa !97
  %662 = mul nsw i32 %661, %659
  %663 = getelementptr inbounds i8, ptr %627, i64 312
  %664 = load i32, ptr %663, align 8, !tbaa !45
  %665 = mul nsw i32 %662, %664
  %666 = icmp slt i32 %657, %665
  br i1 %666, label %.critedge, label %667

667:                                              ; preds = %650, %646, %644
  %668 = getelementptr inbounds i8, ptr %0, i64 112
  %669 = getelementptr inbounds i8, ptr %0, i64 160
  %670 = load i32, ptr %669, align 8, !tbaa !81
  %671 = icmp sgt i32 %624, %670
  br i1 %671, label %.critedge, label %672

672:                                              ; preds = %667
  br i1 %592, label %689, label %673

673:                                              ; preds = %672
  %674 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %675 = trunc nuw i8 %674 to i1
  br i1 %675, label %694, label %676

676:                                              ; preds = %673
  br i1 %625, label %687, label %677

677:                                              ; preds = %676
  %678 = getelementptr inbounds i8, ptr %627, i64 300
  %679 = load i8, ptr %678, align 4, !tbaa !89, !range !27, !noundef !28
  %680 = trunc nuw i8 %679 to i1
  %681 = getelementptr inbounds i8, ptr %0, i64 72
  %682 = load i32, ptr %681, align 8, !tbaa !85
  br i1 %680, label %683, label %697

683:                                              ; preds = %677
  %684 = getelementptr inbounds i8, ptr %627, i64 312
  %685 = load i32, ptr %684, align 8, !tbaa !45
  %686 = udiv i32 %682, %685
  br label %697

687:                                              ; preds = %676
  %688 = load i32, ptr %20, align 4, !tbaa !15
  br label %697

689:                                              ; preds = %672
  %690 = getelementptr inbounds i8, ptr %0, i64 72
  %691 = load i32, ptr %690, align 8, !tbaa !85
  %692 = getelementptr inbounds i8, ptr %0, i64 68
  store i32 %691, ptr %692, align 4, !tbaa !98
  %693 = load i32, ptr %20, align 4, !tbaa !15
  br label %697

694:                                              ; preds = %673
  %695 = load i32, ptr %20, align 4, !tbaa !15
  %696 = getelementptr inbounds i8, ptr %0, i64 68
  store i32 %695, ptr %696, align 4, !tbaa !98
  br label %697

697:                                              ; preds = %677, %689, %694, %687, %683
  %.sink127 = phi i64 [ 84, %689 ], [ 84, %694 ], [ 68, %687 ], [ 68, %683 ], [ 68, %677 ]
  %.sink125 = phi i32 [ %693, %689 ], [ %695, %694 ], [ %688, %687 ], [ %686, %683 ], [ %682, %677 ]
  %698 = phi i32 [ %691, %689 ], [ %695, %694 ], [ %688, %687 ], [ %686, %683 ], [ %682, %677 ]
  %699 = getelementptr inbounds i8, ptr %0, i64 %.sink127
  store i32 %.sink125, ptr %699, align 4, !tbaa !29
  %700 = mul nsw i32 %698, %624
  %701 = getelementptr inbounds i8, ptr %0, i64 76
  store i32 %700, ptr %701, align 4, !tbaa !99
  %702 = getelementptr inbounds i8, ptr %0, i64 84
  %703 = load i32, ptr %702, align 4, !tbaa !100
  %704 = getelementptr inbounds i8, ptr %0, i64 92
  store i32 %703, ptr %704, align 4, !tbaa !101
  %705 = getelementptr inbounds i8, ptr %0, i64 136
  %706 = load i32, ptr %705, align 8, !tbaa !44
  %707 = zext i32 %706 to i64
  %708 = tail call noundef i32 @_Z5_log2m(i64 noundef %707)
  %709 = load i8, ptr %47, align 1, !tbaa !36, !range !27, !noundef !28
  %710 = trunc nuw i8 %709 to i1
  br i1 %710, label %714, label %711

711:                                              ; preds = %697
  %712 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %713 = trunc nuw i8 %712 to i1
  br i1 %713, label %714, label %722

714:                                              ; preds = %711, %697
  %715 = load i32, ptr %242, align 8, !tbaa !51
  %716 = getelementptr inbounds i8, ptr %0, i64 12
  %717 = load i32, ptr %716, align 4, !tbaa !83
  %718 = sdiv i32 %715, %717
  %719 = sext i32 %718 to i64
  %720 = tail call noundef i32 @_Z5_log2m(i64 noundef %719)
  %721 = add i32 %720, %708
  br label %722

722:                                              ; preds = %714, %711
  %.035 = phi i32 [ %721, %714 ], [ %708, %711 ]
  %723 = getelementptr inbounds i8, ptr %0, i64 12
  %724 = load i32, ptr %723, align 4, !tbaa !83
  %725 = load i32, ptr %668, align 8, !tbaa !92
  %726 = sdiv i32 %724, %725
  %727 = sext i32 %726 to i64
  %728 = tail call noundef i32 @_Z5_log2m(i64 noundef %727)
  %729 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 %728, ptr %729, align 8, !tbaa !102
  %730 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %731 = getelementptr inbounds i8, ptr %730, i64 64
  %732 = getelementptr inbounds i8, ptr %0, i64 188
  %733 = load <4 x i32>, ptr %731, align 8, !tbaa !29
  store <4 x i32> %733, ptr %732, align 4, !tbaa !29
  %734 = getelementptr inbounds i8, ptr %730, i64 80
  %735 = load i32, ptr %734, align 8, !tbaa !70
  %736 = getelementptr inbounds i8, ptr %0, i64 204
  store i32 %735, ptr %736, align 4, !tbaa !103
  %737 = load i8, ptr %41, align 8, !tbaa !31, !range !27, !noundef !28
  %738 = trunc nuw i8 %737 to i1
  br i1 %738, label %739, label %761

739:                                              ; preds = %722
  %740 = load i8, ptr %30, align 4, !tbaa !25, !range !27, !noundef !28
  %741 = trunc nuw i8 %740 to i1
  br i1 %741, label %742, label %761

742:                                              ; preds = %739
  %743 = getelementptr inbounds i8, ptr %0, i64 36
  %744 = load i32, ptr %743, align 4, !tbaa !73
  %745 = sext i32 %744 to i64
  %746 = tail call noundef i32 @_Z5_log2m(i64 noundef %745)
  %747 = sext i32 %.036 to i64
  %748 = tail call noundef i32 @_Z5_log2m(i64 noundef %747)
  %749 = add i32 %748, %746
  %750 = load i32, ptr %26, align 8, !tbaa !21
  %751 = sext i32 %750 to i64
  %752 = tail call noundef i32 @_Z5_log2m(i64 noundef %751)
  %753 = add i32 %749, %752
  %754 = icmp ugt i32 %.035, %753
  br i1 %754, label %774, label %755

755:                                              ; preds = %742
  %756 = load i32, ptr %743, align 4, !tbaa !73
  %757 = sext i32 %756 to i64
  %758 = tail call noundef i32 @_Z5_log2m(i64 noundef %757)
  %759 = tail call noundef i32 @_Z5_log2m(i64 noundef %747)
  %760 = add i32 %759, %758
  br label %.sink.split

761:                                              ; preds = %739, %722
  %762 = getelementptr inbounds i8, ptr %0, i64 36
  %763 = load i32, ptr %762, align 4, !tbaa !73
  %764 = sext i32 %763 to i64
  %765 = tail call noundef i32 @_Z5_log2m(i64 noundef %764)
  %766 = add i32 %765, %.035
  %767 = sext i32 %.036 to i64
  %768 = tail call noundef i32 @_Z5_log2m(i64 noundef %767)
  %769 = add i32 %766, %768
  br label %.sink.split

.sink.split:                                      ; preds = %761, %755
  %.sink130 = phi i32 [ %760, %755 ], [ %769, %761 ]
  %770 = load i32, ptr %26, align 8, !tbaa !21
  %771 = sext i32 %770 to i64
  %772 = tail call noundef i32 @_Z5_log2m(i64 noundef %771)
  %773 = add i32 %.sink130, %772
  br label %774

774:                                              ; preds = %.sink.split, %742
  %.sink128 = phi i32 [ %.035, %742 ], [ %773, %.sink.split ]
  %775 = getelementptr inbounds i8, ptr %0, i64 52
  store i32 %.sink128, ptr %775, align 4, !tbaa !104
  %776 = load i8, ptr %47, align 1, !tbaa !36, !range !27, !noundef !28
  %777 = trunc nuw i8 %776 to i1
  br i1 %777, label %800, label %778

778:                                              ; preds = %774
  %779 = load i8, ptr %17, align 2, !tbaa !14, !range !27, !noundef !28
  %780 = trunc nuw i8 %779 to i1
  br i1 %780, label %810, label %781

781:                                              ; preds = %778
  %782 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %783 = trunc nuw i8 %782 to i1
  br i1 %783, label %784, label %791

784:                                              ; preds = %781
  %785 = load i32, ptr %20, align 4, !tbaa !15
  %786 = getelementptr inbounds i8, ptr %0, i64 60
  store i32 %785, ptr %786, align 4, !tbaa !105
  %787 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %788 = getelementptr inbounds i8, ptr %787, i64 312
  %789 = load i32, ptr %788, align 8, !tbaa !45
  %790 = getelementptr inbounds i8, ptr %0, i64 64
  store i32 %789, ptr %790, align 8, !tbaa !106
  br label %824

791:                                              ; preds = %781
  %792 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %793 = getelementptr inbounds i8, ptr %792, i64 16
  %794 = load i32, ptr %793, align 8, !tbaa !87
  %795 = getelementptr inbounds i8, ptr %792, i64 312
  %796 = load i32, ptr %795, align 8, !tbaa !45
  %797 = add i32 %796, %794
  %798 = getelementptr inbounds i8, ptr %0, i64 60
  store i32 %797, ptr %798, align 4, !tbaa !105
  %799 = getelementptr inbounds i8, ptr %0, i64 64
  store i32 %794, ptr %799, align 8, !tbaa !106
  br label %824

800:                                              ; preds = %774
  %801 = load ptr, ptr @g_ip, align 8, !tbaa !39
  %802 = getelementptr inbounds i8, ptr %801, i64 16
  %803 = load i32, ptr %802, align 8, !tbaa !87
  %804 = load i32, ptr %20, align 4, !tbaa !15
  %805 = add i32 %804, %803
  %806 = getelementptr inbounds i8, ptr %0, i64 60
  store i32 %805, ptr %806, align 4, !tbaa !105
  %807 = getelementptr inbounds i8, ptr %0, i64 100
  store i32 %804, ptr %807, align 4, !tbaa !107
  %808 = getelementptr inbounds i8, ptr %0, i64 64
  store i32 %805, ptr %808, align 8, !tbaa !106
  %809 = getelementptr inbounds i8, ptr %0, i64 104
  store i32 %803, ptr %809, align 8, !tbaa !108
  br label %824

810:                                              ; preds = %778
  %811 = load i32, ptr %20, align 4, !tbaa !15
  %812 = getelementptr inbounds i8, ptr %0, i64 60
  store i32 %811, ptr %812, align 4, !tbaa !105
  %813 = getelementptr inbounds i8, ptr %0, i64 100
  store i32 %811, ptr %813, align 4, !tbaa !107
  %814 = getelementptr inbounds i8, ptr %0, i64 64
  store i32 %811, ptr %814, align 8, !tbaa !106
  %815 = load i32, ptr %705, align 8, !tbaa !44
  %816 = tail call noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %815)
  %817 = tail call double @llvm.ceil.f64(double %816)
  %818 = load i32, ptr %242, align 8, !tbaa !51
  %819 = tail call noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef %818)
  %820 = tail call double @llvm.ceil.f64(double %819)
  %821 = fadd double %817, %820
  %822 = fptosi double %821 to i32
  %823 = getelementptr inbounds i8, ptr %0, i64 104
  store i32 %822, ptr %823, align 8, !tbaa !108
  %.pre110.pre = load ptr, ptr @g_ip, align 8, !tbaa !39
  br label %824

824:                                              ; preds = %800, %810, %784, %791
  %.pre110 = phi ptr [ %801, %800 ], [ %.pre110.pre, %810 ], [ %787, %784 ], [ %792, %791 ]
  %825 = load i8, ptr %0, align 8, !tbaa !5, !range !27, !noundef !28
  %826 = trunc nuw i8 %825 to i1
  br i1 %826, label %836, label %827

827:                                              ; preds = %824
  %828 = getelementptr inbounds i8, ptr %.pre110, i64 312
  %829 = load i32, ptr %828, align 8, !tbaa !45
  %830 = icmp ugt i32 %829, 1
  br i1 %830, label %831, label %836

831:                                              ; preds = %827
  %832 = getelementptr inbounds i8, ptr %.pre110, i64 300
  %833 = load i8, ptr %832, align 4, !tbaa !89, !range !27, !noundef !28
  %834 = trunc nuw i8 %833 to i1
  br i1 %834, label %836, label %835

835:                                              ; preds = %831
  store i32 %829, ptr %27, align 4, !tbaa !22
  br label %836

836:                                              ; preds = %835, %831, %827, %824
  %837 = getelementptr inbounds i8, ptr %.pre110, i64 328
  %838 = load i8, ptr %837, align 8, !tbaa !109, !range !27, !noundef !28
  %839 = trunc nuw i8 %838 to i1
  br i1 %839, label %840, label %860

840:                                              ; preds = %836
  %841 = getelementptr inbounds i8, ptr %0, i64 60
  %842 = load <4 x i32>, ptr %841, align 4, !tbaa !29
  %843 = sitofp <4 x i32> %842 to <4 x double>
  %844 = fmul <4 x double> %843, <double 1.250000e-01, double 1.250000e-01, double 1.250000e-01, double 1.250000e-01>
  %845 = tail call <4 x double> @llvm.ceil.v4f64(<4 x double> %844)
  %846 = fptosi <4 x double> %845 to <4 x i32>
  %847 = add nsw <4 x i32> %842, %846
  store <4 x i32> %847, ptr %841, align 4, !tbaa !29
  %848 = load <4 x i32>, ptr %701, align 4, !tbaa !29
  %849 = sitofp <4 x i32> %848 to <4 x double>
  %850 = fmul <4 x double> %849, <double 1.250000e-01, double 1.250000e-01, double 1.250000e-01, double 1.250000e-01>
  %851 = tail call <4 x double> @llvm.ceil.v4f64(<4 x double> %850)
  %852 = fptosi <4 x double> %851 to <4 x i32>
  %853 = add nsw <4 x i32> %848, %852
  store <4 x i32> %853, ptr %701, align 4, !tbaa !29
  %854 = load <4 x i32>, ptr %704, align 4, !tbaa !29
  %855 = sitofp <4 x i32> %854 to <4 x double>
  %856 = fmul <4 x double> %855, <double 1.250000e-01, double 1.250000e-01, double 1.250000e-01, double 1.250000e-01>
  %857 = tail call <4 x double> @llvm.ceil.v4f64(<4 x double> %856)
  %858 = fptosi <4 x double> %857 to <4 x i32>
  %859 = add nsw <4 x i32> %854, %858
  store <4 x i32> %859, ptr %704, align 4, !tbaa !29
  br label %860

860:                                              ; preds = %840, %836
  store i8 1, ptr %33, align 8, !tbaa !26
  br label %.critedge

.critedge:                                        ; preds = %371, %514, %667, %650, %634, %596, %554, %547, %860, %382, %229, %203, %172, %144, %66, %61, %51, %54
  ret void
}

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

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

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

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 #3

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #6

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4log2IjEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4log2IiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef) local_unnamed_addr #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x double> @llvm.ceil.v4f64(<4 x double>) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #7

attributes #0 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { "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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { noreturn nounwind }
attributes #9 = { 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, !7, i64 0}
!6 = !{!"_ZTS16DynamicParameter", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !10, i64 4, !10, i64 8, !10, i64 12, !11, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !7, i64 120, !11, i64 128, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !11, i64 176, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !7, i64 212, !12, i64 216, !12, i64 240, !7, i64 264}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!"_ZTS4Area", !11, i64 0, !11, i64 8, !11, i64 16}
!13 = !{!6, !7, i64 1}
!14 = !{!6, !7, i64 2}
!15 = !{!6, !10, i64 4}
!16 = !{!6, !11, i64 16}
!17 = !{!6, !10, i64 24}
!18 = !{!6, !10, i64 28}
!19 = !{!6, !10, i64 32}
!20 = !{!6, !10, i64 44}
!21 = !{!6, !10, i64 48}
!22 = !{!6, !10, i64 108}
!23 = !{!6, !11, i64 128}
!24 = !{!6, !10, i64 184}
!25 = !{!6, !7, i64 212}
!26 = !{!6, !7, i64 264}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!10, !10, i64 0}
!30 = !{!6, !10, i64 168}
!31 = !{!6, !7, i64 120}
!32 = !{!33, !10, i64 0}
!33 = !{!"_ZTS14InputParameter", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !11, i64 48, !11, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !7, i64 84, !7, i64 85, !7, i64 86, !7, i64 87, !7, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !34, i64 152, !10, i64 156, !7, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !7, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !10, i64 296, !7, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !7, i64 316, !7, i64 317, !10, i64 320, !10, i64 324, !7, i64 328, !11, i64 336, !11, i64 344, !7, i64 352, !10, i64 356, !10, i64 360, !7, i64 364}
!34 = !{!"_ZTS9Wire_type", !8, i64 0}
!35 = !{!33, !7, i64 317}
!36 = !{!6, !7, i64 3}
!37 = !{!33, !7, i64 20}
!38 = !{!33, !10, i64 24}
!39 = !{!40, !40, i64 0}
!40 = !{!"any pointer", !8, i64 0}
!41 = !{!33, !10, i64 308}
!42 = !{!33, !10, i64 12}
!43 = !{!33, !10, i64 304}
!44 = !{!6, !10, i64 136}
!45 = !{!33, !10, i64 312}
!46 = !{!6, !10, i64 140}
!47 = !{!6, !10, i64 144}
!48 = !{!6, !10, i64 148}
!49 = !{!6, !10, i64 152}
!50 = !{!6, !10, i64 156}
!51 = !{!6, !10, i64 8}
!52 = !{!53, !11, i64 1424}
!53 = !{!"_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, !54, i64 352, !55, i64 360, !55, i64 528, !55, i64 696, !55, i64 864, !55, i64 1032, !56, i64 1200, !56, i64 1264, !56, i64 1328, !57, i64 1392, !58, i64 1416, !58, i64 1464, !58, i64 1512}
!54 = !{!"long", !8, i64 0}
!55 = !{!"_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}
!56 = !{!"_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}
!57 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !11, i64 0, !11, i64 8, !11, i64 16}
!58 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}
!59 = !{!56, !11, i64 0}
!60 = !{!33, !10, i64 64}
!61 = !{!33, !10, i64 68}
!62 = !{!33, !10, i64 72}
!63 = !{!6, !11, i64 224}
!64 = !{!53, !11, i64 1416}
!65 = !{!33, !10, i64 76}
!66 = !{!53, !11, i64 1472}
!67 = !{!53, !11, i64 1464}
!68 = !{!6, !11, i64 216}
!69 = !{!56, !11, i64 16}
!70 = !{!33, !10, i64 80}
!71 = !{!11, !11, i64 0}
!72 = !{!6, !11, i64 240}
!73 = !{!6, !10, i64 36}
!74 = !{!53, !11, i64 224}
!75 = !{!53, !11, i64 240}
!76 = !{!53, !11, i64 1480}
!77 = !{!53, !11, i64 232}
!78 = !{!53, !11, i64 1432}
!79 = !{!53, !11, i64 1528}
!80 = !{!6, !11, i64 176}
!81 = !{!6, !10, i64 160}
!82 = !{!6, !10, i64 164}
!83 = !{!6, !10, i64 12}
!84 = !{!6, !10, i64 88}
!85 = !{!6, !10, i64 72}
!86 = !{!33, !10, i64 132}
!87 = !{!33, !10, i64 16}
!88 = !{!6, !10, i64 80}
!89 = !{!33, !7, i64 300}
!90 = !{!6, !10, i64 96}
!91 = !{!6, !10, i64 40}
!92 = !{!6, !10, i64 112}
!93 = !{!6, !10, i64 116}
!94 = !{!33, !7, i64 85}
!95 = !{!33, !10, i64 136}
!96 = !{!33, !7, i64 84}
!97 = !{!33, !10, i64 128}
!98 = !{!6, !10, i64 68}
!99 = !{!6, !10, i64 76}
!100 = !{!6, !10, i64 84}
!101 = !{!6, !10, i64 92}
!102 = !{!6, !10, i64 56}
!103 = !{!6, !10, i64 204}
!104 = !{!6, !10, i64 52}
!105 = !{!6, !10, i64 60}
!106 = !{!6, !10, i64 64}
!107 = !{!6, !10, i64 100}
!108 = !{!6, !10, i64 104}
!109 = !{!33, !7, i64 328}


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