; LLVM IR from gem5/gem5 :: ext/mcpat/cacti/mat.ll (ZN3MatC2ERK16DynamicParameter)

; 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.Mat = type { %class.Component, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, %class.powerDef, double, double, double, double, double, double, double, double, double, double, double, double, double, %class.Subarray, %class.powerDef, %class.powerDef, %class.powerDef, double, i32, i32, double, %class.Area, %class.Area, i8, i8, i8, i8, i32, %class.powerDef, double, double, double, double, double, double, %class.powerDef, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32 }
%class.Component = type { %class.Area, %class.powerDef, %class.powerDef, double, double }
%class.Subarray = type { %class.Component, ptr, i32, i32, i32, i32, %class.Area, %class.Area, i8, double, double, double, double, double, double, double, double }
%class.Area = type { double, double, double }
%class.powerDef = type { %class.powerComponents, %class.powerComponents, %class.powerComponents }
%class.powerComponents = type { double, double, double, double, double }
%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.InputParameter = type { i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, double, double, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i8, i8, i32, i32, i8, double, double, i8, i32, i32, i8 }
%class.PredecBlk = type <{ %class.Component, ptr, i8, [3 x i8], i32, double, double, i32, i32, i8, [3 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, [20 x double], [20 x double], [20 x double], [20 x double], [20 x double], [20 x double], double, double, %class.powerDef, %class.powerDef, %class.powerDef, i8, [7 x i8] }>

@.str = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter = external hidden unnamed_addr constant [35 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [27 x i8], align 1
@g_ip = external global ptr, align 8
@g_tp = external global %class.TechnologyParameter, align 8
@.str.3 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3MatC2ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(3064) %0, ptr noundef nonnull align 8 dereferenceable(265) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca double, align 8
  %8 = alloca i32, align 4
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %51 = load ptr, ptr %3, align 8
  call void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %51)
  %52 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %53, ptr %52, align 8, !tbaa !5
  %54 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 21
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %54)
          to label %55 unwind label %180

55:                                               ; preds = %2
  %56 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 22
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %56)
          to label %57 unwind label %180

57:                                               ; preds = %55
  %58 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 23
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %58)
          to label %59 unwind label %180

59:                                               ; preds = %57
  %60 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 24
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %60)
          to label %61 unwind label %180

61:                                               ; preds = %59
  %62 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 25
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %62)
          to label %63 unwind label %180

63:                                               ; preds = %61
  %64 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 26
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %64)
          to label %65 unwind label %180

65:                                               ; preds = %63
  %66 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 27
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %66)
          to label %67 unwind label %180

67:                                               ; preds = %65
  %68 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 28
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %68)
          to label %69 unwind label %180

69:                                               ; preds = %67
  %70 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 29
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %70)
          to label %71 unwind label %180

71:                                               ; preds = %69
  %72 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 30
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %72)
          to label %73 unwind label %180

73:                                               ; preds = %71
  %74 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 31
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %74)
          to label %75 unwind label %180

75:                                               ; preds = %73
  %76 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 32
  store double 0.000000e+00, ptr %76, align 8, !tbaa !9
  %77 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 33
  store double 0.000000e+00, ptr %77, align 8, !tbaa !19
  %78 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 34
  store double 0.000000e+00, ptr %78, align 8, !tbaa !20
  %79 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 35
  store double 0.000000e+00, ptr %79, align 8, !tbaa !21
  %80 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 36
  store double 0.000000e+00, ptr %80, align 8, !tbaa !22
  %81 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 37
  store double 0.000000e+00, ptr %81, align 8, !tbaa !23
  %82 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 38
  store double 0.000000e+00, ptr %82, align 8, !tbaa !24
  %83 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 39
  store double 0.000000e+00, ptr %83, align 8, !tbaa !25
  %84 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 40
  store double 0.000000e+00, ptr %84, align 8, !tbaa !26
  %85 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 41
  store double 0.000000e+00, ptr %85, align 8, !tbaa !27
  %86 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 42
  store double 0.000000e+00, ptr %86, align 8, !tbaa !28
  %87 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 43
  store double 0.000000e+00, ptr %87, align 8, !tbaa !29
  %88 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 44
  store double 0.000000e+00, ptr %88, align 8, !tbaa !30
  %89 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %90 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %91 = load ptr, ptr %90, align 8, !tbaa !31
  %92 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %93 = load ptr, ptr %92, align 8, !tbaa !31
  %94 = getelementptr inbounds %class.DynamicParameter, ptr %93, i32 0, i32 3
  %95 = load i8, ptr %94, align 1, !tbaa !32, !range !34, !noundef !35
  %96 = trunc i8 %95 to i1
  invoke void @_ZN8SubarrayC1ERK16DynamicParameterb(ptr noundef nonnull align 8 dereferenceable(424) %89, ptr noundef nonnull align 8 dereferenceable(265) %91, i1 noundef zeroext %96)
          to label %97 unwind label %180

97:                                               ; preds = %75
  %98 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 46
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %98)
          to label %99 unwind label %184

99:                                               ; preds = %97
  %100 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 47
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %100)
          to label %101 unwind label %184

101:                                              ; preds = %99
  %102 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 48
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %102)
          to label %103 unwind label %184

103:                                              ; preds = %101
  %104 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 49
  store double 0.000000e+00, ptr %104, align 8, !tbaa !36
  %105 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %106 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %107 = load ptr, ptr %106, align 8, !tbaa !31
  %108 = getelementptr inbounds %class.DynamicParameter, ptr %107, i32 0, i32 11
  %109 = load i32, ptr %108, align 4, !tbaa !37
  store i32 %109, ptr %105, align 8, !tbaa !38
  %110 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 51
  %111 = load ptr, ptr %4, align 8, !tbaa !5
  %112 = getelementptr inbounds %class.DynamicParameter, ptr %111, i32 0, i32 30
  %113 = load i32, ptr %112, align 8, !tbaa !39
  store i32 %113, ptr %110, align 4, !tbaa !40
  %114 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 52
  store double 0.000000e+00, ptr %114, align 8, !tbaa !41
  %115 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %116 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %117 = getelementptr inbounds %class.Subarray, ptr %116, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %115, ptr align 8 %117, i64 24, i1 false), !tbaa.struct !42
  %118 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  %119 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %120 = getelementptr inbounds %class.Subarray, ptr %119, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %118, ptr align 8 %120, i64 24, i1 false), !tbaa.struct !42
  %121 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %122 = load ptr, ptr %4, align 8, !tbaa !5
  %123 = getelementptr inbounds %class.DynamicParameter, ptr %122, i32 0, i32 32
  %124 = load i8, ptr %123, align 8, !tbaa !44, !range !34, !noundef !35
  %125 = trunc i8 %124 to i1
  %126 = zext i1 %125 to i8
  store i8 %126, ptr %121, align 8, !tbaa !45
  %127 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = getelementptr inbounds %class.DynamicParameter, ptr %128, i32 0, i32 2
  %130 = load i8, ptr %129, align 2, !tbaa !46, !range !34, !noundef !35
  %131 = trunc i8 %130 to i1
  %132 = zext i1 %131 to i8
  store i8 %132, ptr %127, align 2, !tbaa !47
  %133 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 59
  %134 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %135 = load ptr, ptr %134, align 8, !tbaa !31
  %136 = getelementptr inbounds %class.DynamicParameter, ptr %135, i32 0, i32 6
  %137 = load i32, ptr %136, align 4, !tbaa !48
  store i32 %137, ptr %133, align 4, !tbaa !49
  %138 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 60
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %138)
          to label %139 unwind label %184

139:                                              ; preds = %103
  %140 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 61
  store double 0.000000e+00, ptr %140, align 8, !tbaa !50
  %141 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 62
  store double 0.000000e+00, ptr %141, align 8, !tbaa !51
  %142 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 63
  store double 0.000000e+00, ptr %142, align 8, !tbaa !52
  %143 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 64
  store double 0.000000e+00, ptr %143, align 8, !tbaa !53
  %144 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 66
  store double 0.000000e+00, ptr %144, align 8, !tbaa !54
  %145 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 67
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %145)
          to label %146 unwind label %184

146:                                              ; preds = %139
  %147 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 68
  %148 = load ptr, ptr %4, align 8, !tbaa !5
  %149 = getelementptr inbounds %class.DynamicParameter, ptr %148, i32 0, i32 20
  %150 = load i32, ptr %149, align 8, !tbaa !55
  store i32 %150, ptr %147, align 8, !tbaa !56
  %151 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 69
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = getelementptr inbounds %class.DynamicParameter, ptr %152, i32 0, i32 24
  %154 = load i32, ptr %153, align 8, !tbaa !57
  store i32 %154, ptr %151, align 4, !tbaa !58
  %155 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %156 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %157 = load ptr, ptr %156, align 8, !tbaa !31
  %158 = getelementptr inbounds %class.DynamicParameter, ptr %157, i32 0, i32 5
  %159 = load i32, ptr %158, align 8, !tbaa !59
  %160 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %161 = load ptr, ptr %160, align 8, !tbaa !31
  %162 = getelementptr inbounds %class.DynamicParameter, ptr %161, i32 0, i32 6
  %163 = load i32, ptr %162, align 4, !tbaa !48
  %164 = sdiv i32 %159, %163
  store i32 %164, ptr %155, align 8, !tbaa !60
  %165 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %166 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %167 = load ptr, ptr %166, align 8, !tbaa !31
  %168 = getelementptr inbounds %class.DynamicParameter, ptr %167, i32 0, i32 8
  %169 = load i32, ptr %168, align 8, !tbaa !61
  %170 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %171 = load ptr, ptr %170, align 8, !tbaa !31
  %172 = getelementptr inbounds %class.DynamicParameter, ptr %171, i32 0, i32 41
  %173 = load i32, ptr %172, align 8, !tbaa !62
  %174 = sdiv i32 %169, %173
  store i32 %174, ptr %165, align 4, !tbaa !63
  %175 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %176 = load i32, ptr %175, align 8, !tbaa !60
  %177 = icmp ule i32 %176, 4
  br i1 %177, label %178, label %179

178:                                              ; preds = %146
  br label %189

179:                                              ; preds = %146
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 66, ptr noundef @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

180:                                              ; preds = %75, %73, %71, %69, %67, %65, %63, %61, %59, %57, %55, %2
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %5, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %6, align 4
  br label %1853

184:                                              ; preds = %139, %103, %101, %99, %97
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %5, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %6, align 4
  br label %1852

188:                                              ; No predecessors!
  br label %189

189:                                              ; preds = %188, %178
  %190 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %191 = load i32, ptr %190, align 4, !tbaa !63
  %192 = icmp ule i32 %191, 2
  br i1 %192, label %193, label %194

193:                                              ; preds = %189
  br label %196

194:                                              ; preds = %189
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 67, ptr noundef @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

195:                                              ; No predecessors!
  br label %196

196:                                              ; preds = %195, %193
  %197 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %198 = load ptr, ptr %197, align 8, !tbaa !31
  %199 = getelementptr inbounds %class.DynamicParameter, ptr %198, i32 0, i32 3
  %200 = load i8, ptr %199, align 1, !tbaa !32, !range !34, !noundef !35
  %201 = trunc i8 %200 to i1
  %202 = zext i1 %201 to i64
  %203 = select i1 %201, i1 true, i1 false
  %204 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %205 = zext i1 %203 to i8
  store i8 %205, ptr %204, align 1, !tbaa !64
  %206 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %207 = load i8, ptr %206, align 1, !tbaa !64, !range !34, !noundef !35
  %208 = trunc i8 %207 to i1
  br i1 %208, label %213, label %209

209:                                              ; preds = %196
  %210 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %211 = load i8, ptr %210, align 2, !tbaa !47, !range !34, !noundef !35
  %212 = trunc i8 %211 to i1
  br label %213

213:                                              ; preds = %209, %196
  %214 = phi i1 [ true, %196 ], [ %212, %209 ]
  %215 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 58
  %216 = zext i1 %214 to i8
  store i8 %216, ptr %215, align 1, !tbaa !65
  %217 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %218 = load i8, ptr %217, align 1, !tbaa !64, !range !34, !noundef !35
  %219 = trunc i8 %218 to i1
  br i1 %219, label %224, label %220

220:                                              ; preds = %213
  %221 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %222 = load i8, ptr %221, align 2, !tbaa !47, !range !34, !noundef !35
  %223 = trunc i8 %222 to i1
  br i1 %223, label %224, label %238

224:                                              ; preds = %220, %213
  %225 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %226 = load i32, ptr %225, align 8, !tbaa !60
  %227 = icmp ugt i32 %226, 2
  br i1 %227, label %228, label %232

228:                                              ; preds = %224
  %229 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %230 = load i32, ptr %229, align 8, !tbaa !60
  %231 = udiv i32 %230, 2
  br label %235

232:                                              ; preds = %224
  %233 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %234 = load i32, ptr %233, align 8, !tbaa !60
  br label %235

235:                                              ; preds = %232, %228
  %236 = phi i32 [ %231, %228 ], [ %234, %232 ]
  %237 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  store i32 %236, ptr %237, align 4, !tbaa !63
  br label %238

238:                                              ; preds = %235, %220
  %239 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %240 = load ptr, ptr %239, align 8, !tbaa !31
  %241 = getelementptr inbounds %class.DynamicParameter, ptr %240, i32 0, i32 46
  %242 = load i32, ptr %241, align 8, !tbaa !66
  %243 = icmp eq i32 %242, 1
  br i1 %243, label %244, label %265

244:                                              ; preds = %238
  %245 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %246 = load ptr, ptr %245, align 8, !tbaa !31
  %247 = getelementptr inbounds %class.DynamicParameter, ptr %246, i32 0, i32 47
  %248 = load i32, ptr %247, align 4, !tbaa !67
  %249 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  store i32 %248, ptr %249, align 8, !tbaa !68
  %250 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %251 = load ptr, ptr %250, align 8, !tbaa !31
  %252 = getelementptr inbounds %class.DynamicParameter, ptr %251, i32 0, i32 48
  %253 = load i32, ptr %252, align 8, !tbaa !69
  %254 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  store i32 %253, ptr %254, align 4, !tbaa !70
  %255 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %256 = load ptr, ptr %255, align 8, !tbaa !31
  %257 = getelementptr inbounds %class.DynamicParameter, ptr %256, i32 0, i32 49
  %258 = load i32, ptr %257, align 4, !tbaa !71
  %259 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 77
  store i32 %258, ptr %259, align 8, !tbaa !72
  %260 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %261 = load ptr, ptr %260, align 8, !tbaa !31
  %262 = getelementptr inbounds %class.DynamicParameter, ptr %261, i32 0, i32 51
  %263 = load i32, ptr %262, align 4, !tbaa !73
  %264 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 78
  store i32 %263, ptr %264, align 4, !tbaa !74
  br label %282

265:                                              ; preds = %238
  %266 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %267 = getelementptr inbounds %class.InputParameter, ptr %266, i32 0, i32 14
  %268 = load i32, ptr %267, align 8, !tbaa !75
  %269 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  store i32 %268, ptr %269, align 8, !tbaa !68
  %270 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %271 = getelementptr inbounds %class.InputParameter, ptr %270, i32 0, i32 15
  %272 = load i32, ptr %271, align 4, !tbaa !78
  %273 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  store i32 %272, ptr %273, align 4, !tbaa !70
  %274 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %275 = getelementptr inbounds %class.InputParameter, ptr %274, i32 0, i32 16
  %276 = load i32, ptr %275, align 8, !tbaa !79
  %277 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 77
  store i32 %276, ptr %277, align 8, !tbaa !72
  %278 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %279 = getelementptr inbounds %class.InputParameter, ptr %278, i32 0, i32 18
  %280 = load i32, ptr %279, align 8, !tbaa !80
  %281 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 78
  store i32 %280, ptr %281, align 4, !tbaa !74
  br label %282

282:                                              ; preds = %265, %244
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #11
  %283 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %284 = load i8, ptr %283, align 1, !tbaa !64, !range !34, !noundef !35
  %285 = trunc i8 %284 to i1
  br i1 %285, label %298, label %286

286:                                              ; preds = %282
  %287 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %288 = load i8, ptr %287, align 2, !tbaa !47, !range !34, !noundef !35
  %289 = trunc i8 %288 to i1
  br i1 %289, label %298, label %290

290:                                              ; preds = %286
  %291 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %292 = getelementptr inbounds %class.Subarray, ptr %291, i32 0, i32 3
  %293 = load i32, ptr %292, align 4, !tbaa !81
  %294 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %295 = load i32, ptr %294, align 8, !tbaa !38
  %296 = udiv i32 %293, %295
  %297 = uitofp i32 %296 to double
  store double %297, ptr %7, align 8, !tbaa !43
  br label %327

298:                                              ; preds = %286, %282
  %299 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %300 = load i8, ptr %299, align 1, !tbaa !64, !range !34, !noundef !35
  %301 = trunc i8 %300 to i1
  br i1 %301, label %302, label %318

302:                                              ; preds = %298
  %303 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %304 = load i8, ptr %303, align 2, !tbaa !47, !range !34, !noundef !35
  %305 = trunc i8 %304 to i1
  br i1 %305, label %318, label %306

306:                                              ; preds = %302
  %307 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %308 = getelementptr inbounds %class.Subarray, ptr %307, i32 0, i32 4
  %309 = load i32, ptr %308, align 8, !tbaa !82
  %310 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %311 = getelementptr inbounds %class.Subarray, ptr %310, i32 0, i32 5
  %312 = load i32, ptr %311, align 4, !tbaa !83
  %313 = add nsw i32 %309, %312
  %314 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %315 = load i32, ptr %314, align 8, !tbaa !38
  %316 = sdiv i32 %313, %315
  %317 = sitofp i32 %316 to double
  store double %317, ptr %7, align 8, !tbaa !43
  br label %326

318:                                              ; preds = %302, %298
  %319 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %320 = getelementptr inbounds %class.Subarray, ptr %319, i32 0, i32 4
  %321 = load i32, ptr %320, align 8, !tbaa !82
  %322 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %323 = load i32, ptr %322, align 8, !tbaa !38
  %324 = sdiv i32 %321, %323
  %325 = sitofp i32 %324 to double
  store double %325, ptr %7, align 8, !tbaa !43
  br label %326

326:                                              ; preds = %318, %306
  br label %327

327:                                              ; preds = %326, %290
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  %328 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %329 = getelementptr inbounds %class.Subarray, ptr %328, i32 0, i32 2
  %330 = load i32, ptr %329, align 8, !tbaa !84
  store i32 %330, ptr %8, align 4, !tbaa !85
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #11
  store double 0.000000e+00, ptr %9, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #11
  store double 0.000000e+00, ptr %10, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #11
  store double 0.000000e+00, ptr %11, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #11
  %331 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %332 = load i8, ptr %331, align 1, !tbaa !64, !range !34, !noundef !35
  %333 = trunc i8 %332 to i1
  br i1 %333, label %349, label %334

334:                                              ; preds = %327
  %335 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %336 = load i8, ptr %335, align 2, !tbaa !47, !range !34, !noundef !35
  %337 = trunc i8 %336 to i1
  br i1 %337, label %349, label %338

338:                                              ; preds = %334
  %339 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %340 = getelementptr inbounds %class.Subarray, ptr %339, i32 0, i32 3
  %341 = load i32, ptr %340, align 4, !tbaa !81
  %342 = uitofp i32 %341 to double
  %343 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %344 = getelementptr inbounds %class.Area, ptr %343, i32 0, i32 0
  %345 = load double, ptr %344, align 8, !tbaa !86
  %346 = fmul double %342, %345
  %347 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 1), align 8, !tbaa !87
  %348 = fmul double %346, %347
  store double %348, ptr %12, align 8, !tbaa !43
  br label %388

349:                                              ; preds = %334, %327
  %350 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %351 = load i8, ptr %350, align 1, !tbaa !64, !range !34, !noundef !35
  %352 = trunc i8 %351 to i1
  br i1 %352, label %353, label %376

353:                                              ; preds = %349
  %354 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %355 = load i8, ptr %354, align 2, !tbaa !47, !range !34, !noundef !35
  %356 = trunc i8 %355 to i1
  br i1 %356, label %376, label %357

357:                                              ; preds = %353
  %358 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %359 = getelementptr inbounds %class.Subarray, ptr %358, i32 0, i32 4
  %360 = load i32, ptr %359, align 8, !tbaa !82
  %361 = sitofp i32 %360 to double
  %362 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  %363 = getelementptr inbounds %class.Area, ptr %362, i32 0, i32 0
  %364 = load double, ptr %363, align 8, !tbaa !94
  %365 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %366 = getelementptr inbounds %class.Subarray, ptr %365, i32 0, i32 5
  %367 = load i32, ptr %366, align 4, !tbaa !83
  %368 = sitofp i32 %367 to double
  %369 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %370 = getelementptr inbounds %class.Area, ptr %369, i32 0, i32 0
  %371 = load double, ptr %370, align 8, !tbaa !86
  %372 = fmul double %368, %371
  %373 = call double @llvm.fmuladd.f64(double %361, double %364, double %372)
  %374 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 1), align 8, !tbaa !87
  %375 = fmul double %373, %374
  store double %375, ptr %12, align 8, !tbaa !43
  br label %387

376:                                              ; preds = %353, %349
  %377 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %378 = getelementptr inbounds %class.Subarray, ptr %377, i32 0, i32 4
  %379 = load i32, ptr %378, align 8, !tbaa !82
  %380 = sitofp i32 %379 to double
  %381 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  %382 = getelementptr inbounds %class.Area, ptr %381, i32 0, i32 0
  %383 = load double, ptr %382, align 8, !tbaa !94
  %384 = fmul double %380, %383
  %385 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 50), i32 0, i32 1), align 8, !tbaa !87
  %386 = fmul double %384, %385
  store double %386, ptr %12, align 8, !tbaa !43
  br label %387

387:                                              ; preds = %376, %357
  br label %388

388:                                              ; preds = %387, %338
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #11
  %389 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %390 = load i32, ptr %389, align 4, !tbaa !63
  %391 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %392 = getelementptr inbounds %class.Subarray, ptr %391, i32 0, i32 3
  %393 = load i32, ptr %392, align 4, !tbaa !81
  %394 = mul i32 %390, %393
  %395 = uitofp i32 %394 to double
  %396 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 1), align 8, !tbaa !95
  %397 = fmul double %395, %396
  %398 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %399 = getelementptr inbounds %class.Area, ptr %398, i32 0, i32 0
  %400 = load double, ptr %399, align 8, !tbaa !86
  %401 = fmul double %397, %400
  store double %401, ptr %13, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #11
  %402 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %403 = load i32, ptr %402, align 4, !tbaa !63
  %404 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %405 = getelementptr inbounds %class.Subarray, ptr %404, i32 0, i32 3
  %406 = load i32, ptr %405, align 4, !tbaa !81
  %407 = mul i32 %403, %406
  %408 = uitofp i32 %407 to double
  %409 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 1), align 8, !tbaa !95
  %410 = fmul double %408, %409
  %411 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %412 = getelementptr inbounds %class.Area, ptr %411, i32 0, i32 0
  %413 = load double, ptr %412, align 8, !tbaa !86
  %414 = fmul double %410, %413
  store double %414, ptr %14, align 8, !tbaa !43
  %415 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %416 = load i32, ptr %415, align 8, !tbaa !38
  %417 = icmp sgt i32 %416, 1
  br i1 %417, label %418, label %454

418:                                              ; preds = %388
  %419 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %420 = load i32, ptr %419, align 8, !tbaa !60
  %421 = mul i32 2, %420
  %422 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %423 = getelementptr inbounds %class.Subarray, ptr %422, i32 0, i32 3
  %424 = load i32, ptr %423, align 4, !tbaa !81
  %425 = mul i32 %421, %424
  %426 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %427 = load i32, ptr %426, align 8, !tbaa !38
  %428 = udiv i32 %425, %427
  %429 = uitofp i32 %428 to double
  %430 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 32), align 8, !tbaa !96
  %431 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %432 = load i8, ptr %431, align 8, !tbaa !45, !range !34, !noundef !35
  %433 = trunc i8 %432 to i1
  %434 = invoke noundef double @_Z6gate_Cddbbb(double noundef %430, double noundef 0.000000e+00, i1 noundef zeroext %433, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %435 unwind label %450

435:                                              ; preds = %418
  %436 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %437 = load i32, ptr %436, align 4, !tbaa !63
  %438 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %439 = getelementptr inbounds %class.Subarray, ptr %438, i32 0, i32 3
  %440 = load i32, ptr %439, align 4, !tbaa !81
  %441 = mul i32 %437, %440
  %442 = uitofp i32 %441 to double
  %443 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 2), align 8, !tbaa !97
  %444 = fmul double %442, %443
  %445 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %446 = invoke noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %445)
          to label %447 unwind label %450

447:                                              ; preds = %435
  %448 = fmul double %444, %446
  %449 = call double @llvm.fmuladd.f64(double %429, double %434, double %448)
  store double %449, ptr %9, align 8, !tbaa !43
  br label %454

450:                                              ; preds = %613, %584, %564, %544, %520, %498, %477, %460, %435, %418
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %5, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %6, align 4
  br label %1851

454:                                              ; preds = %447, %388
  %455 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %456 = load ptr, ptr %455, align 8, !tbaa !31
  %457 = getelementptr inbounds %class.DynamicParameter, ptr %456, i32 0, i32 13
  %458 = load i32, ptr %457, align 4, !tbaa !98
  %459 = icmp sgt i32 %458, 1
  br i1 %459, label %460, label %492

460:                                              ; preds = %454
  %461 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %462 = load i32, ptr %461, align 8, !tbaa !60
  %463 = uitofp i32 %462 to double
  %464 = load double, ptr %7, align 8, !tbaa !43
  %465 = fmul double %463, %464
  %466 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %467 = load ptr, ptr %466, align 8, !tbaa !31
  %468 = getelementptr inbounds %class.DynamicParameter, ptr %467, i32 0, i32 13
  %469 = load i32, ptr %468, align 4, !tbaa !98
  %470 = sitofp i32 %469 to double
  %471 = fdiv double %465, %470
  %472 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 33), align 8, !tbaa !99
  %473 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %474 = load i8, ptr %473, align 8, !tbaa !45, !range !34, !noundef !35
  %475 = trunc i8 %474 to i1
  %476 = invoke noundef double @_Z6gate_Cddbbb(double noundef %472, double noundef 0.000000e+00, i1 noundef zeroext %475, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %477 unwind label %450

477:                                              ; preds = %460
  %478 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %479 = load i32, ptr %478, align 4, !tbaa !63
  %480 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %481 = getelementptr inbounds %class.Subarray, ptr %480, i32 0, i32 3
  %482 = load i32, ptr %481, align 4, !tbaa !81
  %483 = mul i32 %479, %482
  %484 = uitofp i32 %483 to double
  %485 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 2), align 8, !tbaa !97
  %486 = fmul double %484, %485
  %487 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %488 = invoke noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %487)
          to label %489 unwind label %450

489:                                              ; preds = %477
  %490 = fmul double %486, %488
  %491 = call double @llvm.fmuladd.f64(double %471, double %476, double %490)
  store double %491, ptr %10, align 8, !tbaa !43
  br label %492

492:                                              ; preds = %489, %454
  %493 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %494 = load ptr, ptr %493, align 8, !tbaa !31
  %495 = getelementptr inbounds %class.DynamicParameter, ptr %494, i32 0, i32 14
  %496 = load i32, ptr %495, align 8, !tbaa !100
  %497 = icmp sgt i32 %496, 1
  br i1 %497, label %498, label %535

498:                                              ; preds = %492
  %499 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %500 = load i32, ptr %499, align 8, !tbaa !60
  %501 = uitofp i32 %500 to double
  %502 = load double, ptr %7, align 8, !tbaa !43
  %503 = fmul double %501, %502
  %504 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %505 = load ptr, ptr %504, align 8, !tbaa !31
  %506 = getelementptr inbounds %class.DynamicParameter, ptr %505, i32 0, i32 13
  %507 = load i32, ptr %506, align 4, !tbaa !98
  %508 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %509 = load ptr, ptr %508, align 8, !tbaa !31
  %510 = getelementptr inbounds %class.DynamicParameter, ptr %509, i32 0, i32 14
  %511 = load i32, ptr %510, align 8, !tbaa !100
  %512 = mul nsw i32 %507, %511
  %513 = sitofp i32 %512 to double
  %514 = fdiv double %503, %513
  %515 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 33), align 8, !tbaa !99
  %516 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %517 = load i8, ptr %516, align 8, !tbaa !45, !range !34, !noundef !35
  %518 = trunc i8 %517 to i1
  %519 = invoke noundef double @_Z6gate_Cddbbb(double noundef %515, double noundef 0.000000e+00, i1 noundef zeroext %518, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %520 unwind label %450

520:                                              ; preds = %498
  %521 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %522 = load i32, ptr %521, align 4, !tbaa !63
  %523 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %524 = getelementptr inbounds %class.Subarray, ptr %523, i32 0, i32 3
  %525 = load i32, ptr %524, align 4, !tbaa !81
  %526 = mul i32 %522, %525
  %527 = uitofp i32 %526 to double
  %528 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 2), align 8, !tbaa !97
  %529 = fmul double %527, %528
  %530 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %531 = invoke noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %530)
          to label %532 unwind label %450

532:                                              ; preds = %520
  %533 = fmul double %529, %531
  %534 = call double @llvm.fmuladd.f64(double %514, double %519, double %533)
  store double %534, ptr %11, align 8, !tbaa !43
  br label %535

535:                                              ; preds = %532, %492
  %536 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %537 = load i32, ptr %536, align 4, !tbaa !63
  %538 = icmp uge i32 %537, 2
  br i1 %538, label %539, label %544

539:                                              ; preds = %535
  %540 = load double, ptr %13, align 8, !tbaa !43
  %541 = fdiv double %540, 2.000000e+00
  store double %541, ptr %13, align 8, !tbaa !43
  %542 = load double, ptr %14, align 8, !tbaa !43
  %543 = fdiv double %542, 2.000000e+00
  store double %543, ptr %14, align 8, !tbaa !43
  br label %544

544:                                              ; preds = %539, %535
  %545 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 656) #12
          to label %546 unwind label %450

546:                                              ; preds = %544
  %547 = load i32, ptr %8, align 4, !tbaa !85
  %548 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %549 = getelementptr inbounds %class.Subarray, ptr %548, i32 0, i32 9
  %550 = load double, ptr %549, align 8, !tbaa !101
  %551 = load double, ptr %12, align 8, !tbaa !43
  %552 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %553 = load i8, ptr %552, align 8, !tbaa !45, !range !34, !noundef !35
  %554 = trunc i8 %553 to i1
  %555 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 58
  %556 = load i8, ptr %555, align 1, !tbaa !65, !range !34, !noundef !35
  %557 = trunc i8 %556 to i1
  br i1 %557, label %558, label %560

558:                                              ; preds = %546
  %559 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  br label %562

560:                                              ; preds = %546
  %561 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  br label %562

562:                                              ; preds = %560, %558
  %563 = phi ptr [ %559, %558 ], [ %561, %560 ]
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %545, i32 noundef %547, i1 noundef zeroext false, double noundef %550, double noundef %551, i1 noundef zeroext false, i1 noundef zeroext %554, i1 noundef zeroext true, ptr noundef nonnull align 8 dereferenceable(24) %563)
          to label %564 unwind label %671

564:                                              ; preds = %562
  %565 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 2
  store ptr %545, ptr %565, align 8, !tbaa !102
  %566 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 656) #12
          to label %567 unwind label %450

567:                                              ; preds = %564
  %568 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %569 = load i32, ptr %568, align 8, !tbaa !38
  %570 = load double, ptr %9, align 8, !tbaa !43
  %571 = load double, ptr %13, align 8, !tbaa !43
  %572 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %573 = load i8, ptr %572, align 8, !tbaa !45, !range !34, !noundef !35
  %574 = trunc i8 %573 to i1
  %575 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 58
  %576 = load i8, ptr %575, align 1, !tbaa !65, !range !34, !noundef !35
  %577 = trunc i8 %576 to i1
  br i1 %577, label %578, label %580

578:                                              ; preds = %567
  %579 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  br label %582

580:                                              ; preds = %567
  %581 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  br label %582

582:                                              ; preds = %580, %578
  %583 = phi ptr [ %579, %578 ], [ %581, %580 ]
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %566, i32 noundef %569, i1 noundef zeroext false, double noundef %570, double noundef %571, i1 noundef zeroext false, i1 noundef zeroext %574, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(24) %583)
          to label %584 unwind label %675

584:                                              ; preds = %582
  %585 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 3
  store ptr %566, ptr %585, align 8, !tbaa !103
  %586 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 656) #12
          to label %587 unwind label %450

587:                                              ; preds = %584
  %588 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %589 = load ptr, ptr %588, align 8, !tbaa !31
  %590 = getelementptr inbounds %class.DynamicParameter, ptr %589, i32 0, i32 12
  %591 = load i32, ptr %590, align 8, !tbaa !104
  %592 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %593 = load ptr, ptr %592, align 8, !tbaa !31
  %594 = getelementptr inbounds %class.DynamicParameter, ptr %593, i32 0, i32 29
  %595 = load i32, ptr %594, align 4, !tbaa !105
  %596 = icmp ne i32 %595, 0
  %597 = zext i1 %596 to i64
  %598 = select i1 %596, i1 true, i1 false
  %599 = load double, ptr %10, align 8, !tbaa !43
  %600 = load double, ptr %14, align 8, !tbaa !43
  %601 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %602 = load i8, ptr %601, align 8, !tbaa !45, !range !34, !noundef !35
  %603 = trunc i8 %602 to i1
  %604 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 58
  %605 = load i8, ptr %604, align 1, !tbaa !65, !range !34, !noundef !35
  %606 = trunc i8 %605 to i1
  br i1 %606, label %607, label %609

607:                                              ; preds = %587
  %608 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  br label %611

609:                                              ; preds = %587
  %610 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  br label %611

611:                                              ; preds = %609, %607
  %612 = phi ptr [ %608, %607 ], [ %610, %609 ]
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %586, i32 noundef %591, i1 noundef zeroext %598, double noundef %599, double noundef %600, i1 noundef zeroext false, i1 noundef zeroext %603, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(24) %612)
          to label %613 unwind label %679

613:                                              ; preds = %611
  %614 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 4
  store ptr %586, ptr %614, align 8, !tbaa !106
  %615 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 656) #12
          to label %616 unwind label %450

616:                                              ; preds = %613
  %617 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %618 = load ptr, ptr %617, align 8, !tbaa !31
  %619 = getelementptr inbounds %class.DynamicParameter, ptr %618, i32 0, i32 14
  %620 = load i32, ptr %619, align 8, !tbaa !100
  %621 = load double, ptr %11, align 8, !tbaa !43
  %622 = load double, ptr %14, align 8, !tbaa !43
  %623 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %624 = load i8, ptr %623, align 8, !tbaa !45, !range !34, !noundef !35
  %625 = trunc i8 %624 to i1
  %626 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 58
  %627 = load i8, ptr %626, align 1, !tbaa !65, !range !34, !noundef !35
  %628 = trunc i8 %627 to i1
  br i1 %628, label %629, label %631

629:                                              ; preds = %616
  %630 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  br label %633

631:                                              ; preds = %616
  %632 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  br label %633

633:                                              ; preds = %631, %629
  %634 = phi ptr [ %630, %629 ], [ %632, %631 ]
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %615, i32 noundef %620, i1 noundef zeroext false, double noundef %621, double noundef %622, i1 noundef zeroext false, i1 noundef zeroext %625, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(24) %634)
          to label %635 unwind label %683

635:                                              ; preds = %633
  %636 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 5
  store ptr %615, ptr %636, align 8, !tbaa !107
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #11
  %637 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %638 = load i8, ptr %637, align 1, !tbaa !64, !range !34, !noundef !35
  %639 = trunc i8 %638 to i1
  br i1 %639, label %687, label %640

640:                                              ; preds = %635
  %641 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %642 = load i8, ptr %641, align 2, !tbaa !47, !range !34, !noundef !35
  %643 = trunc i8 %642 to i1
  br i1 %643, label %687, label %644

644:                                              ; preds = %640
  %645 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %646 = load i32, ptr %645, align 4, !tbaa !63
  %647 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %648 = getelementptr inbounds %class.Subarray, ptr %647, i32 0, i32 2
  %649 = load i32, ptr %648, align 8, !tbaa !84
  %650 = mul i32 %646, %649
  %651 = uitofp i32 %650 to double
  %652 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 2), align 8, !tbaa !97
  %653 = fmul double %651, %652
  %654 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %655 = getelementptr inbounds %class.Area, ptr %654, i32 0, i32 1
  %656 = load double, ptr %655, align 8, !tbaa !108
  %657 = fmul double %653, %656
  store double %657, ptr %15, align 8, !tbaa !43
  %658 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %659 = load i32, ptr %658, align 4, !tbaa !63
  %660 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %661 = getelementptr inbounds %class.Subarray, ptr %660, i32 0, i32 2
  %662 = load i32, ptr %661, align 8, !tbaa !84
  %663 = mul i32 %659, %662
  %664 = uitofp i32 %663 to double
  %665 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 1), align 8, !tbaa !95
  %666 = fmul double %664, %665
  %667 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %668 = getelementptr inbounds %class.Area, ptr %667, i32 0, i32 1
  %669 = load double, ptr %668, align 8, !tbaa !108
  %670 = fmul double %666, %669
  store double %670, ptr %16, align 8, !tbaa !43
  br label %708

671:                                              ; preds = %562
  %672 = landingpad { ptr, i32 }
          cleanup
  %673 = extractvalue { ptr, i32 } %672, 0
  store ptr %673, ptr %5, align 8
  %674 = extractvalue { ptr, i32 } %672, 1
  store i32 %674, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %545, i64 noundef 656) #13
  br label %1851

675:                                              ; preds = %582
  %676 = landingpad { ptr, i32 }
          cleanup
  %677 = extractvalue { ptr, i32 } %676, 0
  store ptr %677, ptr %5, align 8
  %678 = extractvalue { ptr, i32 } %676, 1
  store i32 %678, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %566, i64 noundef 656) #13
  br label %1851

679:                                              ; preds = %611
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %5, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %586, i64 noundef 656) #13
  br label %1851

683:                                              ; preds = %633
  %684 = landingpad { ptr, i32 }
          cleanup
  %685 = extractvalue { ptr, i32 } %684, 0
  store ptr %685, ptr %5, align 8
  %686 = extractvalue { ptr, i32 } %684, 1
  store i32 %686, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %615, i64 noundef 656) #13
  br label %1851

687:                                              ; preds = %640, %635
  %688 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %689 = getelementptr inbounds %class.Subarray, ptr %688, i32 0, i32 2
  %690 = load i32, ptr %689, align 8, !tbaa !84
  %691 = uitofp i32 %690 to double
  %692 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 2), align 8, !tbaa !97
  %693 = fmul double %691, %692
  %694 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  %695 = getelementptr inbounds %class.Area, ptr %694, i32 0, i32 1
  %696 = load double, ptr %695, align 8, !tbaa !109
  %697 = fmul double %693, %696
  store double %697, ptr %15, align 8, !tbaa !43
  %698 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %699 = getelementptr inbounds %class.Subarray, ptr %698, i32 0, i32 2
  %700 = load i32, ptr %699, align 8, !tbaa !84
  %701 = uitofp i32 %700 to double
  %702 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), i32 0, i32 1), align 8, !tbaa !95
  %703 = fmul double %701, %702
  %704 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  %705 = getelementptr inbounds %class.Area, ptr %704, i32 0, i32 1
  %706 = load double, ptr %705, align 8, !tbaa !109
  %707 = fmul double %703, %706
  store double %707, ptr %16, align 8, !tbaa !43
  br label %708

708:                                              ; preds = %687, %644
  %709 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %710 = load i8, ptr %709, align 1, !tbaa !64, !range !34, !noundef !35
  %711 = trunc i8 %710 to i1
  br i1 %711, label %716, label %712

712:                                              ; preds = %708
  %713 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %714 = load i8, ptr %713, align 2, !tbaa !47, !range !34, !noundef !35
  %715 = trunc i8 %714 to i1
  br i1 %715, label %716, label %728

716:                                              ; preds = %712, %708
  %717 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %718 = load i32, ptr %717, align 8, !tbaa !60
  %719 = zext i32 %718 to i64
  %720 = invoke noundef i32 @_Z5_log2m(i64 noundef %719)
          to label %721 unwind label %724

721:                                              ; preds = %716
  %722 = load i32, ptr %8, align 4, !tbaa !85
  %723 = add i32 %722, %720
  store i32 %723, ptr %8, align 4, !tbaa !85
  br label %728

724:                                              ; preds = %716
  %725 = landingpad { ptr, i32 }
          cleanup
  %726 = extractvalue { ptr, i32 } %725, 0
  store ptr %726, ptr %5, align 8
  %727 = extractvalue { ptr, i32 } %725, 1
  store i32 %727, ptr %6, align 4
  br label %1850

728:                                              ; preds = %721, %712
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #11
  %729 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %730 unwind label %1049

730:                                              ; preds = %728
  %731 = load i32, ptr %8, align 4, !tbaa !85
  %732 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 2
  %733 = load ptr, ptr %732, align 8, !tbaa !102
  %734 = load double, ptr %15, align 8, !tbaa !43
  %735 = load double, ptr %16, align 8, !tbaa !43
  %736 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %737 = load i32, ptr %736, align 8, !tbaa !60
  %738 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %739 = load i8, ptr %738, align 8, !tbaa !45, !range !34, !noundef !35
  %740 = trunc i8 %739 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %729, i32 noundef %731, ptr noundef %733, double noundef %734, double noundef %735, i32 noundef %737, i1 noundef zeroext %740, i1 noundef zeroext true)
          to label %741 unwind label %1053

741:                                              ; preds = %730
  store ptr %729, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  %742 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %743 unwind label %1057

743:                                              ; preds = %741
  %744 = load i32, ptr %8, align 4, !tbaa !85
  %745 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 2
  %746 = load ptr, ptr %745, align 8, !tbaa !102
  %747 = load double, ptr %15, align 8, !tbaa !43
  %748 = load double, ptr %16, align 8, !tbaa !43
  %749 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %750 = load i32, ptr %749, align 8, !tbaa !60
  %751 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %752 = load i8, ptr %751, align 8, !tbaa !45, !range !34, !noundef !35
  %753 = trunc i8 %752 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %742, i32 noundef %744, ptr noundef %746, double noundef %747, double noundef %748, i32 noundef %750, i1 noundef zeroext %753, i1 noundef zeroext false)
          to label %754 unwind label %1061

754:                                              ; preds = %743
  store ptr %742, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  %755 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %756 unwind label %1065

756:                                              ; preds = %754
  %757 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %758 = load i32, ptr %757, align 8, !tbaa !38
  %759 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 3
  %760 = load ptr, ptr %759, align 8, !tbaa !103
  %761 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %762 = load i8, ptr %761, align 8, !tbaa !45, !range !34, !noundef !35
  %763 = trunc i8 %762 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %755, i32 noundef %758, ptr noundef %760, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %763, i1 noundef zeroext true)
          to label %764 unwind label %1069

764:                                              ; preds = %756
  store ptr %755, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #11
  %765 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %766 unwind label %1073

766:                                              ; preds = %764
  %767 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %768 = load i32, ptr %767, align 8, !tbaa !38
  %769 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 3
  %770 = load ptr, ptr %769, align 8, !tbaa !103
  %771 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %772 = load i8, ptr %771, align 8, !tbaa !45, !range !34, !noundef !35
  %773 = trunc i8 %772 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %765, i32 noundef %768, ptr noundef %770, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %773, i1 noundef zeroext false)
          to label %774 unwind label %1077

774:                                              ; preds = %766
  store ptr %765, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #11
  %775 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %776 unwind label %1081

776:                                              ; preds = %774
  %777 = load ptr, ptr %4, align 8, !tbaa !5
  %778 = getelementptr inbounds %class.DynamicParameter, ptr %777, i32 0, i32 12
  %779 = load i32, ptr %778, align 8, !tbaa !104
  %780 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 4
  %781 = load ptr, ptr %780, align 8, !tbaa !106
  %782 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %783 = load i8, ptr %782, align 8, !tbaa !45, !range !34, !noundef !35
  %784 = trunc i8 %783 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %775, i32 noundef %779, ptr noundef %781, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %784, i1 noundef zeroext true)
          to label %785 unwind label %1085

785:                                              ; preds = %776
  store ptr %775, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  %786 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %787 unwind label %1089

787:                                              ; preds = %785
  %788 = load ptr, ptr %4, align 8, !tbaa !5
  %789 = getelementptr inbounds %class.DynamicParameter, ptr %788, i32 0, i32 12
  %790 = load i32, ptr %789, align 8, !tbaa !104
  %791 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 4
  %792 = load ptr, ptr %791, align 8, !tbaa !106
  %793 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %794 = load i8, ptr %793, align 8, !tbaa !45, !range !34, !noundef !35
  %795 = trunc i8 %794 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %786, i32 noundef %790, ptr noundef %792, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %795, i1 noundef zeroext false)
          to label %796 unwind label %1093

796:                                              ; preds = %787
  store ptr %786, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #11
  %797 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %798 unwind label %1097

798:                                              ; preds = %796
  %799 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %800 = load ptr, ptr %799, align 8, !tbaa !31
  %801 = getelementptr inbounds %class.DynamicParameter, ptr %800, i32 0, i32 14
  %802 = load i32, ptr %801, align 8, !tbaa !100
  %803 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 5
  %804 = load ptr, ptr %803, align 8, !tbaa !107
  %805 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %806 = load i8, ptr %805, align 8, !tbaa !45, !range !34, !noundef !35
  %807 = trunc i8 %806 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %797, i32 noundef %802, ptr noundef %804, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %807, i1 noundef zeroext true)
          to label %808 unwind label %1101

808:                                              ; preds = %798
  store ptr %797, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #11
  %809 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %810 unwind label %1105

810:                                              ; preds = %808
  %811 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %812 = load ptr, ptr %811, align 8, !tbaa !31
  %813 = getelementptr inbounds %class.DynamicParameter, ptr %812, i32 0, i32 14
  %814 = load i32, ptr %813, align 8, !tbaa !100
  %815 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 5
  %816 = load ptr, ptr %815, align 8, !tbaa !107
  %817 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %818 = load i8, ptr %817, align 8, !tbaa !45, !range !34, !noundef !35
  %819 = trunc i8 %818 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %809, i32 noundef %814, ptr noundef %816, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %819, i1 noundef zeroext false)
          to label %820 unwind label %1109

820:                                              ; preds = %810
  store ptr %809, ptr %24, align 8, !tbaa !5
  %821 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %822 unwind label %1105

822:                                              ; preds = %820
  %823 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 4
  %824 = load ptr, ptr %823, align 8, !tbaa !106
  %825 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %826 = load i8, ptr %825, align 8, !tbaa !45, !range !34, !noundef !35
  %827 = trunc i8 %826 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %821, i32 noundef 1, ptr noundef %824, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 0, i1 noundef zeroext %827, i1 noundef zeroext true)
          to label %828 unwind label %1113

828:                                              ; preds = %822
  %829 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 6
  store ptr %821, ptr %829, align 8, !tbaa !110
  %830 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1704) #12
          to label %831 unwind label %1105

831:                                              ; preds = %828
  %832 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 4
  %833 = load ptr, ptr %832, align 8, !tbaa !106
  %834 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %835 = load i8, ptr %834, align 8, !tbaa !45, !range !34, !noundef !35
  %836 = trunc i8 %835 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %830, i32 noundef 1, ptr noundef %833, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 0, i1 noundef zeroext %836, i1 noundef zeroext false)
          to label %837 unwind label %1117

837:                                              ; preds = %831
  %838 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 7
  store ptr %830, ptr %838, align 8, !tbaa !111
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #11
  %839 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %840 unwind label %1121

840:                                              ; preds = %837
  %841 = load ptr, ptr %17, align 8, !tbaa !5
  %842 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %843 = load i8, ptr %842, align 8, !tbaa !45, !range !34, !noundef !35
  %844 = trunc i8 %843 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %839, i32 noundef 0, ptr noundef %841, i1 noundef zeroext %844)
          to label %845 unwind label %1125

845:                                              ; preds = %840
  store ptr %839, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %846 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %847 unwind label %1129

847:                                              ; preds = %845
  %848 = load ptr, ptr %18, align 8, !tbaa !5
  %849 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %850 = load i8, ptr %849, align 8, !tbaa !45, !range !34, !noundef !35
  %851 = trunc i8 %850 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %846, i32 noundef 0, ptr noundef %848, i1 noundef zeroext %851)
          to label %852 unwind label %1133

852:                                              ; preds = %847
  store ptr %846, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %853 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %854 unwind label %1137

854:                                              ; preds = %852
  %855 = load ptr, ptr %19, align 8, !tbaa !5
  %856 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %857 = load i8, ptr %856, align 8, !tbaa !45, !range !34, !noundef !35
  %858 = trunc i8 %857 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %853, i32 noundef 0, ptr noundef %855, i1 noundef zeroext %858)
          to label %859 unwind label %1141

859:                                              ; preds = %854
  store ptr %853, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  %860 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %861 unwind label %1145

861:                                              ; preds = %859
  %862 = load ptr, ptr %20, align 8, !tbaa !5
  %863 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %864 = load i8, ptr %863, align 8, !tbaa !45, !range !34, !noundef !35
  %865 = trunc i8 %864 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %860, i32 noundef 0, ptr noundef %862, i1 noundef zeroext %865)
          to label %866 unwind label %1149

866:                                              ; preds = %861
  store ptr %860, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %867 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %868 unwind label %1153

868:                                              ; preds = %866
  %869 = load ptr, ptr %21, align 8, !tbaa !5
  %870 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %871 = load i8, ptr %870, align 8, !tbaa !45, !range !34, !noundef !35
  %872 = trunc i8 %871 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %867, i32 noundef 0, ptr noundef %869, i1 noundef zeroext %872)
          to label %873 unwind label %1157

873:                                              ; preds = %868
  store ptr %867, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #11
  %874 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %875 unwind label %1161

875:                                              ; preds = %873
  %876 = load ptr, ptr %22, align 8, !tbaa !5
  %877 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %878 = load i8, ptr %877, align 8, !tbaa !45, !range !34, !noundef !35
  %879 = trunc i8 %878 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %874, i32 noundef 0, ptr noundef %876, i1 noundef zeroext %879)
          to label %880 unwind label %1165

880:                                              ; preds = %875
  store ptr %874, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #11
  %881 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %882 unwind label %1169

882:                                              ; preds = %880
  %883 = load ptr, ptr %23, align 8, !tbaa !5
  %884 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %885 = load i8, ptr %884, align 8, !tbaa !45, !range !34, !noundef !35
  %886 = trunc i8 %885 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %881, i32 noundef 0, ptr noundef %883, i1 noundef zeroext %886)
          to label %887 unwind label %1173

887:                                              ; preds = %882
  store ptr %881, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #11
  %888 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %889 unwind label %1177

889:                                              ; preds = %887
  %890 = load ptr, ptr %24, align 8, !tbaa !5
  %891 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %892 = load i8, ptr %891, align 8, !tbaa !45, !range !34, !noundef !35
  %893 = trunc i8 %892 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %888, i32 noundef 0, ptr noundef %890, i1 noundef zeroext %893)
          to label %894 unwind label %1181

894:                                              ; preds = %889
  store ptr %888, ptr %32, align 8, !tbaa !5
  %895 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %896 unwind label %1177

896:                                              ; preds = %894
  %897 = load ptr, ptr %4, align 8, !tbaa !5
  %898 = getelementptr inbounds %class.DynamicParameter, ptr %897, i32 0, i32 29
  %899 = load i32, ptr %898, align 4, !tbaa !105
  %900 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 6
  %901 = load ptr, ptr %900, align 8, !tbaa !110
  %902 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %903 = load i8, ptr %902, align 8, !tbaa !45, !range !34, !noundef !35
  %904 = trunc i8 %903 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %895, i32 noundef %899, ptr noundef %901, i1 noundef zeroext %904)
          to label %905 unwind label %1185

905:                                              ; preds = %896
  %906 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 8
  store ptr %895, ptr %906, align 8, !tbaa !112
  %907 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1280) #12
          to label %908 unwind label %1177

908:                                              ; preds = %905
  %909 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 7
  %910 = load ptr, ptr %909, align 8, !tbaa !111
  %911 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %912 = load i8, ptr %911, align 8, !tbaa !45, !range !34, !noundef !35
  %913 = trunc i8 %912 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %907, i32 noundef 1, ptr noundef %910, i1 noundef zeroext %913)
          to label %914 unwind label %1189

914:                                              ; preds = %908
  %915 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 9
  store ptr %907, ptr %915, align 8, !tbaa !113
  %916 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 552) #12
          to label %917 unwind label %1177

917:                                              ; preds = %914
  %918 = load ptr, ptr %25, align 8, !tbaa !5
  %919 = load ptr, ptr %26, align 8, !tbaa !5
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %916, ptr noundef %918, ptr noundef %919)
          to label %920 unwind label %1193

920:                                              ; preds = %917
  %921 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 10
  store ptr %916, ptr %921, align 8, !tbaa !114
  %922 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 552) #12
          to label %923 unwind label %1177

923:                                              ; preds = %920
  %924 = load ptr, ptr %27, align 8, !tbaa !5
  %925 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %922, ptr noundef %924, ptr noundef %925)
          to label %926 unwind label %1197

926:                                              ; preds = %923
  %927 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 11
  store ptr %922, ptr %927, align 8, !tbaa !115
  %928 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 552) #12
          to label %929 unwind label %1177

929:                                              ; preds = %926
  %930 = load ptr, ptr %29, align 8, !tbaa !5
  %931 = load ptr, ptr %30, align 8, !tbaa !5
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %928, ptr noundef %930, ptr noundef %931)
          to label %932 unwind label %1201

932:                                              ; preds = %929
  %933 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 12
  store ptr %928, ptr %933, align 8, !tbaa !116
  %934 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 552) #12
          to label %935 unwind label %1177

935:                                              ; preds = %932
  %936 = load ptr, ptr %31, align 8, !tbaa !5
  %937 = load ptr, ptr %32, align 8, !tbaa !5
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %934, ptr noundef %936, ptr noundef %937)
          to label %938 unwind label %1205

938:                                              ; preds = %935
  %939 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 13
  store ptr %934, ptr %939, align 8, !tbaa !117
  %940 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 1264) #12
          to label %941 unwind label %1177

941:                                              ; preds = %938
  %942 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %943 = getelementptr inbounds %class.InputParameter, ptr %942, i32 0, i32 39
  %944 = load i32, ptr %943, align 8, !tbaa !118
  %945 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %946 = getelementptr inbounds %class.Component, ptr %945, i32 0, i32 0
  %947 = getelementptr inbounds %class.Area, ptr %946, i32 0, i32 1
  %948 = load double, ptr %947, align 8, !tbaa !119
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %940, i32 noundef %944, double noundef %948, i32 noundef 1, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef 0, double noundef 2.200000e-02, ptr noundef getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 48))
          to label %949 unwind label %1209

949:                                              ; preds = %941
  %950 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 14
  store ptr %940, ptr %950, align 8, !tbaa !120
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #11
  %951 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %952 = load i8, ptr %951, align 1, !tbaa !64, !range !34, !noundef !35
  %953 = trunc i8 %952 to i1
  br i1 %953, label %958, label %954

954:                                              ; preds = %949
  %955 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %956 = load i8, ptr %955, align 2, !tbaa !47, !range !34, !noundef !35
  %957 = trunc i8 %956 to i1
  br i1 %957, label %958, label %1226

958:                                              ; preds = %954, %949
  %959 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %960 = getelementptr inbounds %class.Subarray, ptr %959, i32 0, i32 4
  %961 = load i32, ptr %960, align 8, !tbaa !82
  %962 = sitofp i32 %961 to double
  %963 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 34), align 8, !tbaa !121
  %964 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 35), align 8, !tbaa !122
  %965 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %963, double %964)
  %966 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %967 = load i8, ptr %966, align 8, !tbaa !45, !range !34, !noundef !35
  %968 = trunc i8 %967 to i1
  %969 = invoke noundef double @_Z6gate_Cddbbb(double noundef %965, double noundef 0.000000e+00, i1 noundef zeroext %968, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %970 unwind label %1213

970:                                              ; preds = %958
  %971 = fmul double %962, %969
  store double %971, ptr %33, align 8, !tbaa !43
  %972 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %973 = getelementptr inbounds %class.Subarray, ptr %972, i32 0, i32 4
  %974 = load i32, ptr %973, align 8, !tbaa !82
  %975 = sitofp i32 %974 to double
  %976 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  %977 = getelementptr inbounds %class.Area, ptr %976, i32 0, i32 0
  %978 = load double, ptr %977, align 8, !tbaa !94
  %979 = fmul double %975, %978
  %980 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 2), align 8, !tbaa !123
  %981 = fmul double %979, %980
  store double %981, ptr %34, align 8, !tbaa !43
  %982 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %983 = getelementptr inbounds %class.Subarray, ptr %982, i32 0, i32 4
  %984 = load i32, ptr %983, align 8, !tbaa !82
  %985 = sitofp i32 %984 to double
  %986 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 54
  %987 = getelementptr inbounds %class.Area, ptr %986, i32 0, i32 0
  %988 = load double, ptr %987, align 8, !tbaa !94
  %989 = fmul double %985, %988
  %990 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 1), align 8, !tbaa !124
  %991 = fmul double %989, %990
  store double %991, ptr %35, align 8, !tbaa !43
  %992 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 768) #12
          to label %993 unwind label %1213

993:                                              ; preds = %970
  %994 = load double, ptr %33, align 8, !tbaa !43
  %995 = load double, ptr %34, align 8, !tbaa !43
  %996 = load double, ptr %35, align 8, !tbaa !43
  %997 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %998 = load i8, ptr %997, align 8, !tbaa !45, !range !34, !noundef !35
  %999 = trunc i8 %998 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %992, double noundef %994, double noundef %995, double noundef %996, i1 noundef zeroext %999)
          to label %1000 unwind label %1217

1000:                                             ; preds = %993
  %1001 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 16
  store ptr %992, ptr %1001, align 8, !tbaa !125
  %1002 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %1003 = load i8, ptr %1002, align 2, !tbaa !47, !range !34, !noundef !35
  %1004 = trunc i8 %1003 to i1
  br i1 %1004, label %1225, label %1005

1005:                                             ; preds = %1000
  %1006 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1007 = getelementptr inbounds %class.Subarray, ptr %1006, i32 0, i32 5
  %1008 = load i32, ptr %1007, align 4, !tbaa !83
  %1009 = sitofp i32 %1008 to double
  %1010 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 34), align 8, !tbaa !121
  %1011 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 35), align 8, !tbaa !122
  %1012 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1010, double %1011)
  %1013 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %1014 = load i8, ptr %1013, align 8, !tbaa !45, !range !34, !noundef !35
  %1015 = trunc i8 %1014 to i1
  %1016 = invoke noundef double @_Z6gate_Cddbbb(double noundef %1012, double noundef 0.000000e+00, i1 noundef zeroext %1015, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1017 unwind label %1213

1017:                                             ; preds = %1005
  %1018 = fmul double %1009, %1016
  store double %1018, ptr %33, align 8, !tbaa !43
  %1019 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1020 = getelementptr inbounds %class.Subarray, ptr %1019, i32 0, i32 5
  %1021 = load i32, ptr %1020, align 4, !tbaa !83
  %1022 = sitofp i32 %1021 to double
  %1023 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %1024 = getelementptr inbounds %class.Area, ptr %1023, i32 0, i32 0
  %1025 = load double, ptr %1024, align 8, !tbaa !86
  %1026 = fmul double %1022, %1025
  %1027 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 2), align 8, !tbaa !123
  %1028 = fmul double %1026, %1027
  store double %1028, ptr %34, align 8, !tbaa !43
  %1029 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1030 = getelementptr inbounds %class.Subarray, ptr %1029, i32 0, i32 5
  %1031 = load i32, ptr %1030, align 4, !tbaa !83
  %1032 = sitofp i32 %1031 to double
  %1033 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %1034 = getelementptr inbounds %class.Area, ptr %1033, i32 0, i32 0
  %1035 = load double, ptr %1034, align 8, !tbaa !86
  %1036 = fmul double %1032, %1035
  %1037 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 1), align 8, !tbaa !124
  %1038 = fmul double %1036, %1037
  store double %1038, ptr %35, align 8, !tbaa !43
  %1039 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 768) #12
          to label %1040 unwind label %1213

1040:                                             ; preds = %1017
  %1041 = load double, ptr %33, align 8, !tbaa !43
  %1042 = load double, ptr %34, align 8, !tbaa !43
  %1043 = load double, ptr %35, align 8, !tbaa !43
  %1044 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %1045 = load i8, ptr %1044, align 8, !tbaa !45, !range !34, !noundef !35
  %1046 = trunc i8 %1045 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %1039, double noundef %1041, double noundef %1042, double noundef %1043, i1 noundef zeroext %1046)
          to label %1047 unwind label %1221

1047:                                             ; preds = %1040
  %1048 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 15
  store ptr %1039, ptr %1048, align 8, !tbaa !126
  br label %1225

1049:                                             ; preds = %728
  %1050 = landingpad { ptr, i32 }
          cleanup
  %1051 = extractvalue { ptr, i32 } %1050, 0
  store ptr %1051, ptr %5, align 8
  %1052 = extractvalue { ptr, i32 } %1050, 1
  store i32 %1052, ptr %6, align 4
  br label %1849

1053:                                             ; preds = %730
  %1054 = landingpad { ptr, i32 }
          cleanup
  %1055 = extractvalue { ptr, i32 } %1054, 0
  store ptr %1055, ptr %5, align 8
  %1056 = extractvalue { ptr, i32 } %1054, 1
  store i32 %1056, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %729, i64 noundef 1704) #13
  br label %1849

1057:                                             ; preds = %741
  %1058 = landingpad { ptr, i32 }
          cleanup
  %1059 = extractvalue { ptr, i32 } %1058, 0
  store ptr %1059, ptr %5, align 8
  %1060 = extractvalue { ptr, i32 } %1058, 1
  store i32 %1060, ptr %6, align 4
  br label %1848

1061:                                             ; preds = %743
  %1062 = landingpad { ptr, i32 }
          cleanup
  %1063 = extractvalue { ptr, i32 } %1062, 0
  store ptr %1063, ptr %5, align 8
  %1064 = extractvalue { ptr, i32 } %1062, 1
  store i32 %1064, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %742, i64 noundef 1704) #13
  br label %1848

1065:                                             ; preds = %754
  %1066 = landingpad { ptr, i32 }
          cleanup
  %1067 = extractvalue { ptr, i32 } %1066, 0
  store ptr %1067, ptr %5, align 8
  %1068 = extractvalue { ptr, i32 } %1066, 1
  store i32 %1068, ptr %6, align 4
  br label %1847

1069:                                             ; preds = %756
  %1070 = landingpad { ptr, i32 }
          cleanup
  %1071 = extractvalue { ptr, i32 } %1070, 0
  store ptr %1071, ptr %5, align 8
  %1072 = extractvalue { ptr, i32 } %1070, 1
  store i32 %1072, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %755, i64 noundef 1704) #13
  br label %1847

1073:                                             ; preds = %764
  %1074 = landingpad { ptr, i32 }
          cleanup
  %1075 = extractvalue { ptr, i32 } %1074, 0
  store ptr %1075, ptr %5, align 8
  %1076 = extractvalue { ptr, i32 } %1074, 1
  store i32 %1076, ptr %6, align 4
  br label %1846

1077:                                             ; preds = %766
  %1078 = landingpad { ptr, i32 }
          cleanup
  %1079 = extractvalue { ptr, i32 } %1078, 0
  store ptr %1079, ptr %5, align 8
  %1080 = extractvalue { ptr, i32 } %1078, 1
  store i32 %1080, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %765, i64 noundef 1704) #13
  br label %1846

1081:                                             ; preds = %774
  %1082 = landingpad { ptr, i32 }
          cleanup
  %1083 = extractvalue { ptr, i32 } %1082, 0
  store ptr %1083, ptr %5, align 8
  %1084 = extractvalue { ptr, i32 } %1082, 1
  store i32 %1084, ptr %6, align 4
  br label %1845

1085:                                             ; preds = %776
  %1086 = landingpad { ptr, i32 }
          cleanup
  %1087 = extractvalue { ptr, i32 } %1086, 0
  store ptr %1087, ptr %5, align 8
  %1088 = extractvalue { ptr, i32 } %1086, 1
  store i32 %1088, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %775, i64 noundef 1704) #13
  br label %1845

1089:                                             ; preds = %785
  %1090 = landingpad { ptr, i32 }
          cleanup
  %1091 = extractvalue { ptr, i32 } %1090, 0
  store ptr %1091, ptr %5, align 8
  %1092 = extractvalue { ptr, i32 } %1090, 1
  store i32 %1092, ptr %6, align 4
  br label %1844

1093:                                             ; preds = %787
  %1094 = landingpad { ptr, i32 }
          cleanup
  %1095 = extractvalue { ptr, i32 } %1094, 0
  store ptr %1095, ptr %5, align 8
  %1096 = extractvalue { ptr, i32 } %1094, 1
  store i32 %1096, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %786, i64 noundef 1704) #13
  br label %1844

1097:                                             ; preds = %796
  %1098 = landingpad { ptr, i32 }
          cleanup
  %1099 = extractvalue { ptr, i32 } %1098, 0
  store ptr %1099, ptr %5, align 8
  %1100 = extractvalue { ptr, i32 } %1098, 1
  store i32 %1100, ptr %6, align 4
  br label %1843

1101:                                             ; preds = %798
  %1102 = landingpad { ptr, i32 }
          cleanup
  %1103 = extractvalue { ptr, i32 } %1102, 0
  store ptr %1103, ptr %5, align 8
  %1104 = extractvalue { ptr, i32 } %1102, 1
  store i32 %1104, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %797, i64 noundef 1704) #13
  br label %1843

1105:                                             ; preds = %828, %820, %808
  %1106 = landingpad { ptr, i32 }
          cleanup
  %1107 = extractvalue { ptr, i32 } %1106, 0
  store ptr %1107, ptr %5, align 8
  %1108 = extractvalue { ptr, i32 } %1106, 1
  store i32 %1108, ptr %6, align 4
  br label %1842

1109:                                             ; preds = %810
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %5, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %809, i64 noundef 1704) #13
  br label %1842

1113:                                             ; preds = %822
  %1114 = landingpad { ptr, i32 }
          cleanup
  %1115 = extractvalue { ptr, i32 } %1114, 0
  store ptr %1115, ptr %5, align 8
  %1116 = extractvalue { ptr, i32 } %1114, 1
  store i32 %1116, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %821, i64 noundef 1704) #13
  br label %1842

1117:                                             ; preds = %831
  %1118 = landingpad { ptr, i32 }
          cleanup
  %1119 = extractvalue { ptr, i32 } %1118, 0
  store ptr %1119, ptr %5, align 8
  %1120 = extractvalue { ptr, i32 } %1118, 1
  store i32 %1120, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %830, i64 noundef 1704) #13
  br label %1842

1121:                                             ; preds = %837
  %1122 = landingpad { ptr, i32 }
          cleanup
  %1123 = extractvalue { ptr, i32 } %1122, 0
  store ptr %1123, ptr %5, align 8
  %1124 = extractvalue { ptr, i32 } %1122, 1
  store i32 %1124, ptr %6, align 4
  br label %1841

1125:                                             ; preds = %840
  %1126 = landingpad { ptr, i32 }
          cleanup
  %1127 = extractvalue { ptr, i32 } %1126, 0
  store ptr %1127, ptr %5, align 8
  %1128 = extractvalue { ptr, i32 } %1126, 1
  store i32 %1128, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %839, i64 noundef 1280) #13
  br label %1841

1129:                                             ; preds = %845
  %1130 = landingpad { ptr, i32 }
          cleanup
  %1131 = extractvalue { ptr, i32 } %1130, 0
  store ptr %1131, ptr %5, align 8
  %1132 = extractvalue { ptr, i32 } %1130, 1
  store i32 %1132, ptr %6, align 4
  br label %1840

1133:                                             ; preds = %847
  %1134 = landingpad { ptr, i32 }
          cleanup
  %1135 = extractvalue { ptr, i32 } %1134, 0
  store ptr %1135, ptr %5, align 8
  %1136 = extractvalue { ptr, i32 } %1134, 1
  store i32 %1136, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %846, i64 noundef 1280) #13
  br label %1840

1137:                                             ; preds = %852
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %5, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %6, align 4
  br label %1839

1141:                                             ; preds = %854
  %1142 = landingpad { ptr, i32 }
          cleanup
  %1143 = extractvalue { ptr, i32 } %1142, 0
  store ptr %1143, ptr %5, align 8
  %1144 = extractvalue { ptr, i32 } %1142, 1
  store i32 %1144, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %853, i64 noundef 1280) #13
  br label %1839

1145:                                             ; preds = %859
  %1146 = landingpad { ptr, i32 }
          cleanup
  %1147 = extractvalue { ptr, i32 } %1146, 0
  store ptr %1147, ptr %5, align 8
  %1148 = extractvalue { ptr, i32 } %1146, 1
  store i32 %1148, ptr %6, align 4
  br label %1838

1149:                                             ; preds = %861
  %1150 = landingpad { ptr, i32 }
          cleanup
  %1151 = extractvalue { ptr, i32 } %1150, 0
  store ptr %1151, ptr %5, align 8
  %1152 = extractvalue { ptr, i32 } %1150, 1
  store i32 %1152, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %860, i64 noundef 1280) #13
  br label %1838

1153:                                             ; preds = %866
  %1154 = landingpad { ptr, i32 }
          cleanup
  %1155 = extractvalue { ptr, i32 } %1154, 0
  store ptr %1155, ptr %5, align 8
  %1156 = extractvalue { ptr, i32 } %1154, 1
  store i32 %1156, ptr %6, align 4
  br label %1837

1157:                                             ; preds = %868
  %1158 = landingpad { ptr, i32 }
          cleanup
  %1159 = extractvalue { ptr, i32 } %1158, 0
  store ptr %1159, ptr %5, align 8
  %1160 = extractvalue { ptr, i32 } %1158, 1
  store i32 %1160, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %867, i64 noundef 1280) #13
  br label %1837

1161:                                             ; preds = %873
  %1162 = landingpad { ptr, i32 }
          cleanup
  %1163 = extractvalue { ptr, i32 } %1162, 0
  store ptr %1163, ptr %5, align 8
  %1164 = extractvalue { ptr, i32 } %1162, 1
  store i32 %1164, ptr %6, align 4
  br label %1836

1165:                                             ; preds = %875
  %1166 = landingpad { ptr, i32 }
          cleanup
  %1167 = extractvalue { ptr, i32 } %1166, 0
  store ptr %1167, ptr %5, align 8
  %1168 = extractvalue { ptr, i32 } %1166, 1
  store i32 %1168, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %874, i64 noundef 1280) #13
  br label %1836

1169:                                             ; preds = %880
  %1170 = landingpad { ptr, i32 }
          cleanup
  %1171 = extractvalue { ptr, i32 } %1170, 0
  store ptr %1171, ptr %5, align 8
  %1172 = extractvalue { ptr, i32 } %1170, 1
  store i32 %1172, ptr %6, align 4
  br label %1835

1173:                                             ; preds = %882
  %1174 = landingpad { ptr, i32 }
          cleanup
  %1175 = extractvalue { ptr, i32 } %1174, 0
  store ptr %1175, ptr %5, align 8
  %1176 = extractvalue { ptr, i32 } %1174, 1
  store i32 %1176, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %881, i64 noundef 1280) #13
  br label %1835

1177:                                             ; preds = %938, %932, %926, %920, %914, %905, %894, %887
  %1178 = landingpad { ptr, i32 }
          cleanup
  %1179 = extractvalue { ptr, i32 } %1178, 0
  store ptr %1179, ptr %5, align 8
  %1180 = extractvalue { ptr, i32 } %1178, 1
  store i32 %1180, ptr %6, align 4
  br label %1834

1181:                                             ; preds = %889
  %1182 = landingpad { ptr, i32 }
          cleanup
  %1183 = extractvalue { ptr, i32 } %1182, 0
  store ptr %1183, ptr %5, align 8
  %1184 = extractvalue { ptr, i32 } %1182, 1
  store i32 %1184, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %888, i64 noundef 1280) #13
  br label %1834

1185:                                             ; preds = %896
  %1186 = landingpad { ptr, i32 }
          cleanup
  %1187 = extractvalue { ptr, i32 } %1186, 0
  store ptr %1187, ptr %5, align 8
  %1188 = extractvalue { ptr, i32 } %1186, 1
  store i32 %1188, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %895, i64 noundef 1280) #13
  br label %1834

1189:                                             ; preds = %908
  %1190 = landingpad { ptr, i32 }
          cleanup
  %1191 = extractvalue { ptr, i32 } %1190, 0
  store ptr %1191, ptr %5, align 8
  %1192 = extractvalue { ptr, i32 } %1190, 1
  store i32 %1192, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %907, i64 noundef 1280) #13
  br label %1834

1193:                                             ; preds = %917
  %1194 = landingpad { ptr, i32 }
          cleanup
  %1195 = extractvalue { ptr, i32 } %1194, 0
  store ptr %1195, ptr %5, align 8
  %1196 = extractvalue { ptr, i32 } %1194, 1
  store i32 %1196, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %916, i64 noundef 552) #13
  br label %1834

1197:                                             ; preds = %923
  %1198 = landingpad { ptr, i32 }
          cleanup
  %1199 = extractvalue { ptr, i32 } %1198, 0
  store ptr %1199, ptr %5, align 8
  %1200 = extractvalue { ptr, i32 } %1198, 1
  store i32 %1200, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %922, i64 noundef 552) #13
  br label %1834

1201:                                             ; preds = %929
  %1202 = landingpad { ptr, i32 }
          cleanup
  %1203 = extractvalue { ptr, i32 } %1202, 0
  store ptr %1203, ptr %5, align 8
  %1204 = extractvalue { ptr, i32 } %1202, 1
  store i32 %1204, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %928, i64 noundef 552) #13
  br label %1834

1205:                                             ; preds = %935
  %1206 = landingpad { ptr, i32 }
          cleanup
  %1207 = extractvalue { ptr, i32 } %1206, 0
  store ptr %1207, ptr %5, align 8
  %1208 = extractvalue { ptr, i32 } %1206, 1
  store i32 %1208, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %934, i64 noundef 552) #13
  br label %1834

1209:                                             ; preds = %941
  %1210 = landingpad { ptr, i32 }
          cleanup
  %1211 = extractvalue { ptr, i32 } %1210, 0
  store ptr %1211, ptr %5, align 8
  %1212 = extractvalue { ptr, i32 } %1210, 1
  store i32 %1212, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %940, i64 noundef 1264) #13
  br label %1834

1213:                                             ; preds = %1238, %1226, %1017, %1005, %970, %958
  %1214 = landingpad { ptr, i32 }
          cleanup
  %1215 = extractvalue { ptr, i32 } %1214, 0
  store ptr %1215, ptr %5, align 8
  %1216 = extractvalue { ptr, i32 } %1214, 1
  store i32 %1216, ptr %6, align 4
  br label %1833

1217:                                             ; preds = %993
  %1218 = landingpad { ptr, i32 }
          cleanup
  %1219 = extractvalue { ptr, i32 } %1218, 0
  store ptr %1219, ptr %5, align 8
  %1220 = extractvalue { ptr, i32 } %1218, 1
  store i32 %1220, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %992, i64 noundef 768) #13
  br label %1833

1221:                                             ; preds = %1040
  %1222 = landingpad { ptr, i32 }
          cleanup
  %1223 = extractvalue { ptr, i32 } %1222, 0
  store ptr %1223, ptr %5, align 8
  %1224 = extractvalue { ptr, i32 } %1222, 1
  store i32 %1224, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %1039, i64 noundef 768) #13
  br label %1833

1225:                                             ; preds = %1047, %1000
  br label %1274

1226:                                             ; preds = %954
  %1227 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1228 = getelementptr inbounds %class.Subarray, ptr %1227, i32 0, i32 3
  %1229 = load i32, ptr %1228, align 4, !tbaa !81
  %1230 = uitofp i32 %1229 to double
  %1231 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 34), align 8, !tbaa !121
  %1232 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 35), align 8, !tbaa !122
  %1233 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1231, double %1232)
  %1234 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %1235 = load i8, ptr %1234, align 8, !tbaa !45, !range !34, !noundef !35
  %1236 = trunc i8 %1235 to i1
  %1237 = invoke noundef double @_Z6gate_Cddbbb(double noundef %1233, double noundef 0.000000e+00, i1 noundef zeroext %1236, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1238 unwind label %1213

1238:                                             ; preds = %1226
  %1239 = fmul double %1230, %1237
  store double %1239, ptr %33, align 8, !tbaa !43
  %1240 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1241 = getelementptr inbounds %class.Subarray, ptr %1240, i32 0, i32 3
  %1242 = load i32, ptr %1241, align 4, !tbaa !81
  %1243 = uitofp i32 %1242 to double
  %1244 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %1245 = getelementptr inbounds %class.Area, ptr %1244, i32 0, i32 0
  %1246 = load double, ptr %1245, align 8, !tbaa !86
  %1247 = fmul double %1243, %1246
  %1248 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 2), align 8, !tbaa !123
  %1249 = fmul double %1247, %1248
  store double %1249, ptr %34, align 8, !tbaa !43
  %1250 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1251 = getelementptr inbounds %class.Subarray, ptr %1250, i32 0, i32 3
  %1252 = load i32, ptr %1251, align 4, !tbaa !81
  %1253 = uitofp i32 %1252 to double
  %1254 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 53
  %1255 = getelementptr inbounds %class.Area, ptr %1254, i32 0, i32 0
  %1256 = load double, ptr %1255, align 8, !tbaa !86
  %1257 = fmul double %1253, %1256
  %1258 = load double, ptr getelementptr inbounds (%"class.TechnologyParameter::InterconnectType", ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 52), i32 0, i32 1), align 8, !tbaa !124
  %1259 = fmul double %1257, %1258
  store double %1259, ptr %35, align 8, !tbaa !43
  %1260 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 768) #12
          to label %1261 unwind label %1213

1261:                                             ; preds = %1238
  %1262 = load double, ptr %33, align 8, !tbaa !43
  %1263 = load double, ptr %34, align 8, !tbaa !43
  %1264 = load double, ptr %35, align 8, !tbaa !43
  %1265 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 55
  %1266 = load i8, ptr %1265, align 8, !tbaa !45, !range !34, !noundef !35
  %1267 = trunc i8 %1266 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %1260, double noundef %1262, double noundef %1263, double noundef %1264, i1 noundef zeroext %1267)
          to label %1268 unwind label %1270

1268:                                             ; preds = %1261
  %1269 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 15
  store ptr %1260, ptr %1269, align 8, !tbaa !126
  br label %1274

1270:                                             ; preds = %1261
  %1271 = landingpad { ptr, i32 }
          cleanup
  %1272 = extractvalue { ptr, i32 } %1271, 0
  store ptr %1272, ptr %5, align 8
  %1273 = extractvalue { ptr, i32 } %1271, 1
  store i32 %1273, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %1260, i64 noundef 768) #13
  br label %1833

1274:                                             ; preds = %1268, %1225
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #11
  %1275 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 2
  %1276 = load ptr, ptr %1275, align 8, !tbaa !102
  %1277 = getelementptr inbounds %class.Component, ptr %1276, i32 0, i32 0
  %1278 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1277)
          to label %1279 unwind label %1373

1279:                                             ; preds = %1274
  %1280 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1281 = getelementptr inbounds %class.Subarray, ptr %1280, i32 0, i32 2
  %1282 = load i32, ptr %1281, align 8, !tbaa !84
  %1283 = uitofp i32 %1282 to double
  %1284 = fmul double %1278, %1283
  %1285 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1286 = load i32, ptr %1285, align 8, !tbaa !68
  %1287 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1288 = load i32, ptr %1287, align 4, !tbaa !70
  %1289 = add nsw i32 %1286, %1288
  %1290 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 77
  %1291 = load i32, ptr %1290, align 8, !tbaa !72
  %1292 = add nsw i32 %1289, %1291
  %1293 = sitofp i32 %1292 to double
  %1294 = fmul double %1284, %1293
  store double %1294, ptr %36, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  %1295 = load double, ptr %36, align 8, !tbaa !43
  %1296 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1297 = getelementptr inbounds %class.Component, ptr %1296, i32 0, i32 0
  %1298 = invoke noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24) %1297)
          to label %1299 unwind label %1377

1299:                                             ; preds = %1279
  %1300 = fdiv double %1295, %1298
  store double %1300, ptr %37, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #11
  %1301 = invoke noundef double @_ZN3Mat51compute_bit_mux_sa_precharge_sa_mux_wr_drv_wr_mux_hEv(ptr noundef nonnull align 8 dereferenceable(3064) %51)
          to label %1302 unwind label %1381

1302:                                             ; preds = %1299
  store double %1301, ptr %38, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #11
  %1303 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 14
  %1304 = load ptr, ptr %1303, align 8, !tbaa !120
  %1305 = getelementptr inbounds %class.Component, ptr %1304, i32 0, i32 0
  %1306 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1305)
          to label %1307 unwind label %1385

1307:                                             ; preds = %1302
  %1308 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1309 = getelementptr inbounds %class.Subarray, ptr %1308, i32 0, i32 3
  %1310 = load i32, ptr %1309, align 4, !tbaa !81
  %1311 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %1312 = load i32, ptr %1311, align 8, !tbaa !38
  %1313 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1314 = load ptr, ptr %1313, align 8, !tbaa !31
  %1315 = getelementptr inbounds %class.DynamicParameter, ptr %1314, i32 0, i32 13
  %1316 = load i32, ptr %1315, align 4, !tbaa !98
  %1317 = mul nsw i32 %1312, %1316
  %1318 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1319 = load ptr, ptr %1318, align 8, !tbaa !31
  %1320 = getelementptr inbounds %class.DynamicParameter, ptr %1319, i32 0, i32 14
  %1321 = load i32, ptr %1320, align 8, !tbaa !100
  %1322 = mul nsw i32 %1317, %1321
  %1323 = udiv i32 %1310, %1322
  %1324 = uitofp i32 %1323 to double
  %1325 = fmul double %1306, %1324
  %1326 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1327 = getelementptr inbounds %class.Component, ptr %1326, i32 0, i32 0
  %1328 = invoke noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %1327)
          to label %1329 unwind label %1385

1329:                                             ; preds = %1307
  %1330 = fdiv double %1325, %1328
  store double %1330, ptr %39, align 8, !tbaa !43
  %1331 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1332 = load i32, ptr %1331, align 8, !tbaa !68
  %1333 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1334 = load i32, ptr %1333, align 4, !tbaa !70
  %1335 = add nsw i32 %1332, %1334
  %1336 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 78
  %1337 = load i32, ptr %1336, align 4, !tbaa !74
  %1338 = add nsw i32 %1335, %1337
  %1339 = sitofp i32 %1338 to double
  %1340 = load double, ptr %39, align 8, !tbaa !43
  %1341 = fmul double %1340, %1339
  store double %1341, ptr %39, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #11
  store double 0.000000e+00, ptr %40, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  store double 0.000000e+00, ptr %41, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #11
  store double 0.000000e+00, ptr %42, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #11
  store double 0.000000e+00, ptr %43, align 8, !tbaa !43
  %1342 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %1343 = load i8, ptr %1342, align 1, !tbaa !64, !range !34, !noundef !35
  %1344 = trunc i8 %1343 to i1
  br i1 %1344, label %1393, label %1345

1345:                                             ; preds = %1329
  %1346 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1347 = load ptr, ptr %1346, align 8, !tbaa !31
  %1348 = getelementptr inbounds %class.DynamicParameter, ptr %1347, i32 0, i32 0
  %1349 = load i8, ptr %1348, align 8, !tbaa !127, !range !34, !noundef !35
  %1350 = trunc i8 %1349 to i1
  br i1 %1350, label %1351, label %1393

1351:                                             ; preds = %1345
  %1352 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1353 = load ptr, ptr %1352, align 8, !tbaa !31
  %1354 = getelementptr inbounds %class.DynamicParameter, ptr %1353, i32 0, i32 4
  %1355 = load i32, ptr %1354, align 4, !tbaa !128
  %1356 = load ptr, ptr %4, align 8, !tbaa !5
  %1357 = getelementptr inbounds %class.DynamicParameter, ptr %1356, i32 0, i32 20
  %1358 = load i32, ptr %1357, align 8, !tbaa !55
  %1359 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1360 = getelementptr inbounds %class.Component, ptr %1359, i32 0, i32 0
  %1361 = invoke noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %1360)
          to label %1362 unwind label %1389

1362:                                             ; preds = %1351
  %1363 = invoke noundef double @_ZN3Mat26compute_comparators_heightEiid(ptr noundef nonnull align 8 dereferenceable(3064) %51, i32 noundef %1355, i32 noundef %1358, double noundef %1361)
          to label %1364 unwind label %1389

1364:                                             ; preds = %1362
  store double %1363, ptr %40, align 8, !tbaa !43
  %1365 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1366 = load i32, ptr %1365, align 8, !tbaa !68
  %1367 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1368 = load i32, ptr %1367, align 4, !tbaa !70
  %1369 = add nsw i32 %1366, %1368
  %1370 = sitofp i32 %1369 to double
  %1371 = load double, ptr %40, align 8, !tbaa !43
  %1372 = fmul double %1371, %1370
  store double %1372, ptr %40, align 8, !tbaa !43
  br label %1393

1373:                                             ; preds = %1274
  %1374 = landingpad { ptr, i32 }
          cleanup
  %1375 = extractvalue { ptr, i32 } %1374, 0
  store ptr %1375, ptr %5, align 8
  %1376 = extractvalue { ptr, i32 } %1374, 1
  store i32 %1376, ptr %6, align 4
  br label %1832

1377:                                             ; preds = %1279
  %1378 = landingpad { ptr, i32 }
          cleanup
  %1379 = extractvalue { ptr, i32 } %1378, 0
  store ptr %1379, ptr %5, align 8
  %1380 = extractvalue { ptr, i32 } %1378, 1
  store i32 %1380, ptr %6, align 4
  br label %1831

1381:                                             ; preds = %1299
  %1382 = landingpad { ptr, i32 }
          cleanup
  %1383 = extractvalue { ptr, i32 } %1382, 0
  store ptr %1383, ptr %5, align 8
  %1384 = extractvalue { ptr, i32 } %1382, 1
  store i32 %1384, ptr %6, align 4
  br label %1830

1385:                                             ; preds = %1307, %1302
  %1386 = landingpad { ptr, i32 }
          cleanup
  %1387 = extractvalue { ptr, i32 } %1386, 0
  store ptr %1387, ptr %5, align 8
  %1388 = extractvalue { ptr, i32 } %1386, 1
  store i32 %1388, ptr %6, align 4
  br label %1829

1389:                                             ; preds = %1362, %1351
  %1390 = landingpad { ptr, i32 }
          cleanup
  %1391 = extractvalue { ptr, i32 } %1390, 0
  store ptr %1391, ptr %5, align 8
  %1392 = extractvalue { ptr, i32 } %1390, 1
  store i32 %1392, ptr %6, align 4
  br label %1828

1393:                                             ; preds = %1364, %1345, %1329
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  %1394 = load ptr, ptr %18, align 8, !tbaa !5
  %1395 = getelementptr inbounds %class.PredecBlk, ptr %1394, i32 0, i32 4
  %1396 = load i32, ptr %1395, align 4, !tbaa !129
  %1397 = shl i32 1, %1396
  store i32 %1397, ptr %44, align 4, !tbaa !85
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #11
  %1398 = load ptr, ptr %17, align 8, !tbaa !5
  %1399 = getelementptr inbounds %class.PredecBlk, ptr %1398, i32 0, i32 4
  %1400 = load i32, ptr %1399, align 4, !tbaa !129
  %1401 = shl i32 1, %1400
  store i32 %1401, ptr %45, align 4, !tbaa !85
  %1402 = load i32, ptr %44, align 4, !tbaa !85
  %1403 = load i32, ptr %45, align 4, !tbaa !85
  %1404 = add nsw i32 %1402, %1403
  %1405 = sitofp i32 %1404 to double
  %1406 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), align 8, !tbaa !131
  %1407 = fmul double %1405, %1406
  %1408 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1409 = load i32, ptr %1408, align 8, !tbaa !68
  %1410 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1411 = load i32, ptr %1410, align 4, !tbaa !70
  %1412 = add nsw i32 %1409, %1411
  %1413 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 77
  %1414 = load i32, ptr %1413, align 8, !tbaa !72
  %1415 = add nsw i32 %1412, %1414
  %1416 = sitofp i32 %1415 to double
  %1417 = fmul double %1407, %1416
  store double %1417, ptr %41, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #11
  %1418 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %1419 = load i32, ptr %1418, align 8, !tbaa !60
  %1420 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1421 = load i32, ptr %1420, align 4, !tbaa !63
  %1422 = udiv i32 %1419, %1421
  %1423 = uitofp i32 %1422 to double
  %1424 = load double, ptr %38, align 8, !tbaa !43
  %1425 = load double, ptr %39, align 8, !tbaa !43
  %1426 = fadd double %1424, %1425
  %1427 = load double, ptr %40, align 8, !tbaa !43
  %1428 = fadd double %1426, %1427
  %1429 = fmul double %1423, %1428
  store double %1429, ptr %46, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #11
  %1430 = load double, ptr %41, align 8, !tbaa !43
  %1431 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1432 = load i32, ptr %1431, align 4, !tbaa !63
  %1433 = uitofp i32 %1432 to double
  %1434 = load double, ptr %37, align 8, !tbaa !43
  %1435 = fmul double %1433, %1434
  %1436 = fcmp ogt double %1430, %1435
  br i1 %1436, label %1437, label %1439

1437:                                             ; preds = %1393
  %1438 = load double, ptr %41, align 8, !tbaa !43
  br label %1445

1439:                                             ; preds = %1393
  %1440 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1441 = load i32, ptr %1440, align 4, !tbaa !63
  %1442 = uitofp i32 %1441 to double
  %1443 = load double, ptr %37, align 8, !tbaa !43
  %1444 = fmul double %1442, %1443
  br label %1445

1445:                                             ; preds = %1439, %1437
  %1446 = phi double [ %1438, %1437 ], [ %1444, %1439 ]
  store double %1446, ptr %47, align 8, !tbaa !43
  %1447 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %1448 = load i32, ptr %1447, align 8, !tbaa !38
  %1449 = icmp sgt i32 %1448, 1
  br i1 %1449, label %1450, label %1463

1450:                                             ; preds = %1445
  %1451 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 50
  %1452 = load i32, ptr %1451, align 8, !tbaa !38
  %1453 = sitofp i32 %1452 to double
  %1454 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), align 8, !tbaa !131
  %1455 = fmul double %1453, %1454
  %1456 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1457 = load i32, ptr %1456, align 8, !tbaa !68
  %1458 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1459 = load i32, ptr %1458, align 4, !tbaa !70
  %1460 = add nsw i32 %1457, %1459
  %1461 = sitofp i32 %1460 to double
  %1462 = fmul double %1455, %1461
  store double %1462, ptr %42, align 8, !tbaa !43
  br label %1463

1463:                                             ; preds = %1450, %1445
  %1464 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1465 = load ptr, ptr %1464, align 8, !tbaa !31
  %1466 = getelementptr inbounds %class.DynamicParameter, ptr %1465, i32 0, i32 13
  %1467 = load i32, ptr %1466, align 4, !tbaa !98
  %1468 = icmp sgt i32 %1467, 1
  br i1 %1468, label %1469, label %1484

1469:                                             ; preds = %1463
  %1470 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1471 = load ptr, ptr %1470, align 8, !tbaa !31
  %1472 = getelementptr inbounds %class.DynamicParameter, ptr %1471, i32 0, i32 13
  %1473 = load i32, ptr %1472, align 4, !tbaa !98
  %1474 = sitofp i32 %1473 to double
  %1475 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), align 8, !tbaa !131
  %1476 = fmul double %1474, %1475
  %1477 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1478 = load i32, ptr %1477, align 8, !tbaa !68
  %1479 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1480 = load i32, ptr %1479, align 4, !tbaa !70
  %1481 = add nsw i32 %1478, %1480
  %1482 = sitofp i32 %1481 to double
  %1483 = fmul double %1476, %1482
  store double %1483, ptr %43, align 8, !tbaa !43
  br label %1484

1484:                                             ; preds = %1469, %1463
  %1485 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1486 = load ptr, ptr %1485, align 8, !tbaa !31
  %1487 = getelementptr inbounds %class.DynamicParameter, ptr %1486, i32 0, i32 14
  %1488 = load i32, ptr %1487, align 8, !tbaa !100
  %1489 = icmp sgt i32 %1488, 1
  br i1 %1489, label %1490, label %1506

1490:                                             ; preds = %1484
  %1491 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1492 = load ptr, ptr %1491, align 8, !tbaa !31
  %1493 = getelementptr inbounds %class.DynamicParameter, ptr %1492, i32 0, i32 14
  %1494 = load i32, ptr %1493, align 8, !tbaa !100
  %1495 = sitofp i32 %1494 to double
  %1496 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), align 8, !tbaa !131
  %1497 = fmul double %1495, %1496
  %1498 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1499 = load i32, ptr %1498, align 8, !tbaa !68
  %1500 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1501 = load i32, ptr %1500, align 4, !tbaa !70
  %1502 = add nsw i32 %1499, %1501
  %1503 = sitofp i32 %1502 to double
  %1504 = load double, ptr %43, align 8, !tbaa !43
  %1505 = call double @llvm.fmuladd.f64(double %1497, double %1503, double %1504)
  store double %1505, ptr %43, align 8, !tbaa !43
  br label %1506

1506:                                             ; preds = %1490, %1484
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #11
  %1507 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %1508 = getelementptr inbounds %class.InputParameter, ptr %1507, i32 0, i32 24
  %1509 = load i32, ptr %1508, align 4, !tbaa !132
  %1510 = icmp ne i32 %1509, 0
  br i1 %1510, label %1627, label %1511

1511:                                             ; preds = %1506
  %1512 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1513 = load ptr, ptr %1512, align 8, !tbaa !31
  %1514 = getelementptr inbounds %class.DynamicParameter, ptr %1513, i32 0, i32 15
  %1515 = load i32, ptr %1514, align 4, !tbaa !133
  %1516 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1517 = load ptr, ptr %1516, align 8, !tbaa !31
  %1518 = getelementptr inbounds %class.DynamicParameter, ptr %1517, i32 0, i32 29
  %1519 = load i32, ptr %1518, align 4, !tbaa !105
  %1520 = add nsw i32 %1515, %1519
  %1521 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1522 = load ptr, ptr %1521, align 8, !tbaa !31
  %1523 = getelementptr inbounds %class.DynamicParameter, ptr %1522, i32 0, i32 19
  %1524 = load i32, ptr %1523, align 4, !tbaa !134
  %1525 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1526 = load ptr, ptr %1525, align 8, !tbaa !31
  %1527 = getelementptr inbounds %class.DynamicParameter, ptr %1526, i32 0, i32 20
  %1528 = load i32, ptr %1527, align 8, !tbaa !55
  %1529 = add nsw i32 %1524, %1528
  %1530 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1531 = load i32, ptr %1530, align 4, !tbaa !63
  %1532 = udiv i32 %1529, %1531
  %1533 = add i32 %1520, %1532
  %1534 = uitofp i32 %1533 to double
  %1535 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), align 8, !tbaa !131
  %1536 = fmul double %1534, %1535
  %1537 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1538 = load i32, ptr %1537, align 8, !tbaa !68
  %1539 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1540 = load i32, ptr %1539, align 4, !tbaa !70
  %1541 = add nsw i32 %1538, %1540
  %1542 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 77
  %1543 = load i32, ptr %1542, align 8, !tbaa !72
  %1544 = add nsw i32 %1541, %1543
  %1545 = sitofp i32 %1544 to double
  %1546 = fmul double %1536, %1545
  store double %1546, ptr %48, align 8, !tbaa !43
  %1547 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 56
  %1548 = load i8, ptr %1547, align 1, !tbaa !64, !range !34, !noundef !35
  %1549 = trunc i8 %1548 to i1
  br i1 %1549, label %1554, label %1550

1550:                                             ; preds = %1511
  %1551 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 57
  %1552 = load i8, ptr %1551, align 2, !tbaa !47, !range !34, !noundef !35
  %1553 = trunc i8 %1552 to i1
  br i1 %1553, label %1554, label %1609

1554:                                             ; preds = %1550, %1511
  %1555 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1556 = load ptr, ptr %1555, align 8, !tbaa !31
  %1557 = getelementptr inbounds %class.DynamicParameter, ptr %1556, i32 0, i32 15
  %1558 = load i32, ptr %1557, align 4, !tbaa !133
  %1559 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1560 = load ptr, ptr %1559, align 8, !tbaa !31
  %1561 = getelementptr inbounds %class.DynamicParameter, ptr %1560, i32 0, i32 29
  %1562 = load i32, ptr %1561, align 4, !tbaa !105
  %1563 = add nsw i32 %1558, %1562
  %1564 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1565 = load ptr, ptr %1564, align 8, !tbaa !31
  %1566 = getelementptr inbounds %class.DynamicParameter, ptr %1565, i32 0, i32 19
  %1567 = load i32, ptr %1566, align 4, !tbaa !134
  %1568 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1569 = load ptr, ptr %1568, align 8, !tbaa !31
  %1570 = getelementptr inbounds %class.DynamicParameter, ptr %1569, i32 0, i32 20
  %1571 = load i32, ptr %1570, align 8, !tbaa !55
  %1572 = add nsw i32 %1567, %1571
  %1573 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1574 = load i32, ptr %1573, align 4, !tbaa !63
  %1575 = udiv i32 %1572, %1574
  %1576 = add i32 %1563, %1575
  %1577 = uitofp i32 %1576 to double
  %1578 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), align 8, !tbaa !131
  %1579 = fmul double %1577, %1578
  %1580 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1581 = load i32, ptr %1580, align 8, !tbaa !68
  %1582 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1583 = load i32, ptr %1582, align 4, !tbaa !70
  %1584 = add nsw i32 %1581, %1583
  %1585 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 77
  %1586 = load i32, ptr %1585, align 8, !tbaa !72
  %1587 = add nsw i32 %1584, %1586
  %1588 = sitofp i32 %1587 to double
  %1589 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1590 = load ptr, ptr %1589, align 8, !tbaa !31
  %1591 = getelementptr inbounds %class.DynamicParameter, ptr %1590, i32 0, i32 23
  %1592 = load i32, ptr %1591, align 4, !tbaa !135
  %1593 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 1
  %1594 = load ptr, ptr %1593, align 8, !tbaa !31
  %1595 = getelementptr inbounds %class.DynamicParameter, ptr %1594, i32 0, i32 24
  %1596 = load i32, ptr %1595, align 8, !tbaa !57
  %1597 = add nsw i32 %1592, %1596
  %1598 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1599 = load i32, ptr %1598, align 4, !tbaa !63
  %1600 = udiv i32 %1597, %1599
  %1601 = uitofp i32 %1600 to double
  %1602 = load double, ptr getelementptr inbounds (%class.TechnologyParameter, ptr @g_tp, i32 0, i32 51), align 8, !tbaa !131
  %1603 = fmul double %1601, %1602
  %1604 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 78
  %1605 = load i32, ptr %1604, align 4, !tbaa !74
  %1606 = sitofp i32 %1605 to double
  %1607 = fmul double %1603, %1606
  %1608 = call double @llvm.fmuladd.f64(double %1579, double %1588, double %1607)
  store double %1608, ptr %48, align 8, !tbaa !43
  br label %1609

1609:                                             ; preds = %1554, %1550
  %1610 = load double, ptr %38, align 8, !tbaa !43
  %1611 = load double, ptr %40, align 8, !tbaa !43
  %1612 = fadd double %1610, %1611
  %1613 = load double, ptr %39, align 8, !tbaa !43
  %1614 = fadd double %1612, %1613
  %1615 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %1616 = load i32, ptr %1615, align 8, !tbaa !60
  %1617 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1618 = load i32, ptr %1617, align 4, !tbaa !63
  %1619 = udiv i32 %1616, %1618
  %1620 = uitofp i32 %1619 to double
  %1621 = load double, ptr %48, align 8, !tbaa !43
  %1622 = call double @llvm.fmuladd.f64(double %1614, double %1620, double %1621)
  %1623 = load double, ptr %42, align 8, !tbaa !43
  %1624 = fadd double %1622, %1623
  %1625 = load double, ptr %43, align 8, !tbaa !43
  %1626 = fadd double %1624, %1625
  store double %1626, ptr %46, align 8, !tbaa !43
  br label %1627

1627:                                             ; preds = %1609, %1506
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #11
  %1628 = load ptr, ptr %25, align 8, !tbaa !5
  %1629 = getelementptr inbounds %class.Component, ptr %1628, i32 0, i32 0
  %1630 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1629)
          to label %1631 unwind label %1749

1631:                                             ; preds = %1627
  %1632 = load ptr, ptr %27, align 8, !tbaa !5
  %1633 = getelementptr inbounds %class.Component, ptr %1632, i32 0, i32 0
  %1634 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1633)
          to label %1635 unwind label %1749

1635:                                             ; preds = %1631
  %1636 = fadd double %1630, %1634
  %1637 = load ptr, ptr %29, align 8, !tbaa !5
  %1638 = getelementptr inbounds %class.Component, ptr %1637, i32 0, i32 0
  %1639 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1638)
          to label %1640 unwind label %1749

1640:                                             ; preds = %1635
  %1641 = fadd double %1636, %1639
  %1642 = load ptr, ptr %31, align 8, !tbaa !5
  %1643 = getelementptr inbounds %class.Component, ptr %1642, i32 0, i32 0
  %1644 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1643)
          to label %1645 unwind label %1749

1645:                                             ; preds = %1640
  %1646 = fadd double %1641, %1644
  %1647 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 8
  %1648 = load ptr, ptr %1647, align 8, !tbaa !112
  %1649 = getelementptr inbounds %class.Component, ptr %1648, i32 0, i32 0
  %1650 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1649)
          to label %1651 unwind label %1749

1651:                                             ; preds = %1645
  %1652 = fadd double %1646, %1650
  %1653 = load ptr, ptr %26, align 8, !tbaa !5
  %1654 = getelementptr inbounds %class.Component, ptr %1653, i32 0, i32 0
  %1655 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1654)
          to label %1656 unwind label %1749

1656:                                             ; preds = %1651
  %1657 = fadd double %1652, %1655
  %1658 = load ptr, ptr %28, align 8, !tbaa !5
  %1659 = getelementptr inbounds %class.Component, ptr %1658, i32 0, i32 0
  %1660 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1659)
          to label %1661 unwind label %1749

1661:                                             ; preds = %1656
  %1662 = fadd double %1657, %1660
  %1663 = load ptr, ptr %30, align 8, !tbaa !5
  %1664 = getelementptr inbounds %class.Component, ptr %1663, i32 0, i32 0
  %1665 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1664)
          to label %1666 unwind label %1749

1666:                                             ; preds = %1661
  %1667 = fadd double %1662, %1665
  %1668 = load ptr, ptr %32, align 8, !tbaa !5
  %1669 = getelementptr inbounds %class.Component, ptr %1668, i32 0, i32 0
  %1670 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1669)
          to label %1671 unwind label %1749

1671:                                             ; preds = %1666
  %1672 = fadd double %1667, %1670
  %1673 = load ptr, ptr %17, align 8, !tbaa !5
  %1674 = getelementptr inbounds %class.Component, ptr %1673, i32 0, i32 0
  %1675 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1674)
          to label %1676 unwind label %1749

1676:                                             ; preds = %1671
  %1677 = fadd double %1672, %1675
  %1678 = load ptr, ptr %19, align 8, !tbaa !5
  %1679 = getelementptr inbounds %class.Component, ptr %1678, i32 0, i32 0
  %1680 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1679)
          to label %1681 unwind label %1749

1681:                                             ; preds = %1676
  %1682 = fadd double %1677, %1680
  %1683 = load ptr, ptr %21, align 8, !tbaa !5
  %1684 = getelementptr inbounds %class.Component, ptr %1683, i32 0, i32 0
  %1685 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1684)
          to label %1686 unwind label %1749

1686:                                             ; preds = %1681
  %1687 = fadd double %1682, %1685
  %1688 = load ptr, ptr %23, align 8, !tbaa !5
  %1689 = getelementptr inbounds %class.Component, ptr %1688, i32 0, i32 0
  %1690 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1689)
          to label %1691 unwind label %1749

1691:                                             ; preds = %1686
  %1692 = fadd double %1687, %1690
  %1693 = load ptr, ptr %18, align 8, !tbaa !5
  %1694 = getelementptr inbounds %class.Component, ptr %1693, i32 0, i32 0
  %1695 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1694)
          to label %1696 unwind label %1749

1696:                                             ; preds = %1691
  %1697 = fadd double %1692, %1695
  %1698 = load ptr, ptr %20, align 8, !tbaa !5
  %1699 = getelementptr inbounds %class.Component, ptr %1698, i32 0, i32 0
  %1700 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1699)
          to label %1701 unwind label %1749

1701:                                             ; preds = %1696
  %1702 = fadd double %1697, %1700
  %1703 = load ptr, ptr %22, align 8, !tbaa !5
  %1704 = getelementptr inbounds %class.Component, ptr %1703, i32 0, i32 0
  %1705 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1704)
          to label %1706 unwind label %1749

1706:                                             ; preds = %1701
  %1707 = fadd double %1702, %1705
  %1708 = load ptr, ptr %24, align 8, !tbaa !5
  %1709 = getelementptr inbounds %class.Component, ptr %1708, i32 0, i32 0
  %1710 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1709)
          to label %1711 unwind label %1749

1711:                                             ; preds = %1706
  %1712 = fadd double %1707, %1710
  %1713 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 3
  %1714 = load ptr, ptr %1713, align 8, !tbaa !103
  %1715 = getelementptr inbounds %class.Component, ptr %1714, i32 0, i32 0
  %1716 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1715)
          to label %1717 unwind label %1749

1717:                                             ; preds = %1711
  %1718 = fadd double %1712, %1716
  %1719 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 4
  %1720 = load ptr, ptr %1719, align 8, !tbaa !106
  %1721 = getelementptr inbounds %class.Component, ptr %1720, i32 0, i32 0
  %1722 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1721)
          to label %1723 unwind label %1749

1723:                                             ; preds = %1717
  %1724 = fadd double %1718, %1722
  %1725 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 5
  %1726 = load ptr, ptr %1725, align 8, !tbaa !107
  %1727 = getelementptr inbounds %class.Component, ptr %1726, i32 0, i32 0
  %1728 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1727)
          to label %1729 unwind label %1749

1729:                                             ; preds = %1723
  %1730 = fadd double %1724, %1728
  %1731 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 75
  %1732 = load i32, ptr %1731, align 8, !tbaa !68
  %1733 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 76
  %1734 = load i32, ptr %1733, align 4, !tbaa !70
  %1735 = add nsw i32 %1732, %1734
  %1736 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 77
  %1737 = load i32, ptr %1736, align 8, !tbaa !72
  %1738 = add nsw i32 %1735, %1737
  %1739 = sitofp i32 %1738 to double
  %1740 = fmul double %1730, %1739
  store double %1740, ptr %49, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #11
  %1741 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %1742 = load i32, ptr %1741, align 8, !tbaa !60
  %1743 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1744 = load i32, ptr %1743, align 4, !tbaa !63
  %1745 = udiv i32 %1742, %1744
  %1746 = icmp ugt i32 %1745, 0
  br i1 %1746, label %1747, label %1748

1747:                                             ; preds = %1729
  br label %1754

1748:                                             ; preds = %1729
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 396, ptr noundef @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

1749:                                             ; preds = %1723, %1717, %1711, %1706, %1701, %1696, %1691, %1686, %1681, %1676, %1671, %1666, %1661, %1656, %1651, %1645, %1640, %1635, %1631, %1627
  %1750 = landingpad { ptr, i32 }
          cleanup
  %1751 = extractvalue { ptr, i32 } %1750, 0
  store ptr %1751, ptr %5, align 8
  %1752 = extractvalue { ptr, i32 } %1750, 1
  store i32 %1752, ptr %6, align 4
  br label %1827

1753:                                             ; No predecessors!
  br label %1754

1754:                                             ; preds = %1753, %1747
  %1755 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %1756 = load i32, ptr %1755, align 8, !tbaa !60
  %1757 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1758 = load i32, ptr %1757, align 4, !tbaa !63
  %1759 = udiv i32 %1756, %1758
  %1760 = uitofp i32 %1759 to double
  %1761 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1762 = getelementptr inbounds %class.Component, ptr %1761, i32 0, i32 0
  %1763 = getelementptr inbounds %class.Area, ptr %1762, i32 0, i32 1
  %1764 = load double, ptr %1763, align 8, !tbaa !119
  %1765 = load double, ptr %46, align 8, !tbaa !43
  %1766 = call double @llvm.fmuladd.f64(double %1760, double %1764, double %1765)
  %1767 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1768 = getelementptr inbounds %class.Area, ptr %1767, i32 0, i32 1
  store double %1766, ptr %1768, align 8, !tbaa !119
  %1769 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 74
  %1770 = load i32, ptr %1769, align 4, !tbaa !63
  %1771 = uitofp i32 %1770 to double
  %1772 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1773 = getelementptr inbounds %class.Component, ptr %1772, i32 0, i32 0
  %1774 = invoke noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %1773)
          to label %1775 unwind label %1813

1775:                                             ; preds = %1754
  %1776 = load double, ptr %47, align 8, !tbaa !43
  %1777 = call double @llvm.fmuladd.f64(double %1771, double %1774, double %1776)
  %1778 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1779 = getelementptr inbounds %class.Area, ptr %1778, i32 0, i32 0
  store double %1777, ptr %1779, align 8, !tbaa !136
  %1780 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1781 = getelementptr inbounds %class.Area, ptr %1780, i32 0, i32 1
  %1782 = load double, ptr %1781, align 8, !tbaa !119
  %1783 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1784 = getelementptr inbounds %class.Area, ptr %1783, i32 0, i32 0
  %1785 = load double, ptr %1784, align 8, !tbaa !136
  %1786 = load double, ptr %49, align 8, !tbaa !43
  %1787 = call double @llvm.fmuladd.f64(double %1782, double %1785, double %1786)
  %1788 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1789 = getelementptr inbounds %class.Area, ptr %1788, i32 0, i32 1
  %1790 = load double, ptr %1789, align 8, !tbaa !119
  %1791 = fdiv double %1787, %1790
  %1792 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1793 = getelementptr inbounds %class.Area, ptr %1792, i32 0, i32 0
  store double %1791, ptr %1793, align 8, !tbaa !136
  %1794 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 45
  %1795 = getelementptr inbounds %class.Component, ptr %1794, i32 0, i32 0
  %1796 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1795)
          to label %1797 unwind label %1813

1797:                                             ; preds = %1775
  %1798 = getelementptr inbounds %class.Mat, ptr %51, i32 0, i32 73
  %1799 = load i32, ptr %1798, align 8, !tbaa !60
  %1800 = uitofp i32 %1799 to double
  %1801 = fmul double %1796, %1800
  %1802 = fmul double %1801, 1.000000e+02
  %1803 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1804 = invoke noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %1803)
          to label %1805 unwind label %1813

1805:                                             ; preds = %1797
  %1806 = fdiv double %1802, %1804
  store double %1806, ptr %50, align 8, !tbaa !43
  %1807 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1808 = getelementptr inbounds %class.Area, ptr %1807, i32 0, i32 1
  %1809 = load double, ptr %1808, align 8, !tbaa !119
  %1810 = fcmp ogt double %1809, 0.000000e+00
  br i1 %1810, label %1811, label %1812

1811:                                             ; preds = %1805
  br label %1818

1812:                                             ; preds = %1805
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 415, ptr noundef @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

1813:                                             ; preds = %1797, %1775, %1754
  %1814 = landingpad { ptr, i32 }
          cleanup
  %1815 = extractvalue { ptr, i32 } %1814, 0
  store ptr %1815, ptr %5, align 8
  %1816 = extractvalue { ptr, i32 } %1814, 1
  store i32 %1816, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  br label %1827

1817:                                             ; No predecessors!
  br label %1818

1818:                                             ; preds = %1817, %1811
  %1819 = getelementptr inbounds %class.Component, ptr %51, i32 0, i32 0
  %1820 = getelementptr inbounds %class.Area, ptr %1819, i32 0, i32 0
  %1821 = load double, ptr %1820, align 8, !tbaa !136
  %1822 = fcmp ogt double %1821, 0.000000e+00
  br i1 %1822, label %1823, label %1824

1823:                                             ; preds = %1818
  br label %1826

1824:                                             ; preds = %1818
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 416, ptr noundef @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

1825:                                             ; No predecessors!
  br label %1826

1826:                                             ; preds = %1825, %1823
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  ret void

1827:                                             ; preds = %1813, %1749
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %1828

1828:                                             ; preds = %1827, %1389
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #11
  br label %1829

1829:                                             ; preds = %1828, %1385
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  br label %1830

1830:                                             ; preds = %1829, %1381
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #11
  br label %1831

1831:                                             ; preds = %1830, %1377
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  br label %1832

1832:                                             ; preds = %1831, %1373
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #11
  br label %1833

1833:                                             ; preds = %1832, %1270, %1221, %1217, %1213
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  br label %1834

1834:                                             ; preds = %1833, %1209, %1205, %1201, %1197, %1193, %1189, %1185, %1181, %1177
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #11
  br label %1835

1835:                                             ; preds = %1834, %1173, %1169
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  br label %1836

1836:                                             ; preds = %1835, %1165, %1161
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  br label %1837

1837:                                             ; preds = %1836, %1157, %1153
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  br label %1838

1838:                                             ; preds = %1837, %1149, %1145
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  br label %1839

1839:                                             ; preds = %1838, %1141, %1137
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  br label %1840

1840:                                             ; preds = %1839, %1133, %1129
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  br label %1841

1841:                                             ; preds = %1840, %1125, %1121
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  br label %1842

1842:                                             ; preds = %1841, %1117, %1113, %1109, %1105
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  br label %1843

1843:                                             ; preds = %1842, %1101, %1097
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  br label %1844

1844:                                             ; preds = %1843, %1093, %1089
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  br label %1845

1845:                                             ; preds = %1844, %1085, %1081
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  br label %1846

1846:                                             ; preds = %1845, %1077, %1073
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  br label %1847

1847:                                             ; preds = %1846, %1069, %1065
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  br label %1848

1848:                                             ; preds = %1847, %1061, %1057
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #11
  br label %1849

1849:                                             ; preds = %1848, %1053, %1049
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #11
  br label %1850

1850:                                             ; preds = %1849, %724
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  br label %1851

1851:                                             ; preds = %1850, %683, %679, %675, %671, %450
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #11
  br label %1852

1852:                                             ; preds = %1851, %184
  call void @_ZN8SubarrayD1Ev(ptr noundef nonnull align 8 dereferenceable(424) %89) #11
  br label %1853

1853:                                             ; preds = %1852, %180
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280) %51) #11
  br label %1854

1854:                                             ; preds = %1853
  %1855 = load ptr, ptr %5, align 8
  %1856 = load i32, ptr %6, align 4
  %1857 = insertvalue { ptr, i32 } poison, ptr %1855, 0
  %1858 = insertvalue { ptr, i32 } %1857, i32 %1856, 1
  resume { ptr, i32 } %1858
}

declare void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280)) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

declare void @_ZN8SubarrayC1ERK16DynamicParameterb(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(265), i1 noundef zeroext) unnamed_addr #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #7

declare void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656), i32 noundef, i1 noundef zeroext, double noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #8

declare noundef i32 @_Z5_log2m(i64 noundef) #1

declare void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697), i32 noundef, ptr noundef, double noundef, double noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #1

declare void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280), i32 noundef, ptr noundef, i1 noundef zeroext) unnamed_addr #1

declare void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552), ptr noundef, ptr noundef) unnamed_addr #1

declare void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264), i32 noundef, double noundef, i32 noundef, double noundef, double noundef, i32 noundef, double noundef, ptr noundef) unnamed_addr #1

declare void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761), double noundef, double noundef, double noundef, i1 noundef zeroext) unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN3Mat51compute_bit_mux_sa_precharge_sa_mux_wr_drv_wr_mux_hEv(ptr noundef nonnull align 8 dereferenceable(3064)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN3Mat26compute_comparators_heightEiid(ptr noundef nonnull align 8 dereferenceable(3064), i32 noundef, i32 noundef, double noundef) #0 align 2

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

; Function Attrs: nounwind
declare void @_ZN8SubarrayD1Ev(ptr noundef nonnull align 8 dereferenceable(424)) unnamed_addr #9

; Function Attrs: nounwind
declare void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280)) unnamed_addr #9

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nobuiltin allocsize(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 #8 = { nobuiltin 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 #9 = { 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 #10 = { noreturn nounwind }
attributes #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin 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, !13, i64 1760}
!10 = !{!"_ZTS3Mat", !11, i64 0, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376, !6, i64 384, !6, i64 392, !6, i64 400, !6, i64 408, !6, i64 416, !6, i64 424, !6, i64 432, !14, i64 440, !14, i64 560, !14, i64 680, !14, i64 800, !14, i64 920, !14, i64 1040, !14, i64 1160, !14, i64 1280, !14, i64 1400, !14, i64 1520, !14, i64 1640, !13, i64 1760, !13, i64 1768, !13, i64 1776, !13, i64 1784, !13, i64 1792, !13, i64 1800, !13, i64 1808, !13, i64 1816, !13, i64 1824, !13, i64 1832, !13, i64 1840, !13, i64 1848, !13, i64 1856, !16, i64 1864, !14, i64 2288, !14, i64 2408, !14, i64 2528, !13, i64 2648, !17, i64 2656, !17, i64 2660, !13, i64 2664, !12, i64 2672, !12, i64 2696, !18, i64 2720, !18, i64 2721, !18, i64 2722, !18, i64 2723, !17, i64 2724, !14, i64 2728, !13, i64 2848, !13, i64 2856, !13, i64 2864, !13, i64 2872, !13, i64 2880, !13, i64 2888, !14, i64 2896, !17, i64 3016, !17, i64 3020, !17, i64 3024, !17, i64 3028, !13, i64 3032, !17, i64 3040, !17, i64 3044, !17, i64 3048, !17, i64 3052, !17, i64 3056, !17, i64 3060}
!11 = !{!"_ZTS9Component", !12, i64 0, !14, i64 24, !14, i64 144, !13, i64 264, !13, i64 272}
!12 = !{!"_ZTS4Area", !13, i64 0, !13, i64 8, !13, i64 16}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTS8powerDef", !15, i64 0, !15, i64 40, !15, i64 80}
!15 = !{!"_ZTS15powerComponents", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!16 = !{!"_ZTS8Subarray", !11, i64 0, !6, i64 280, !17, i64 288, !17, i64 292, !17, i64 296, !17, i64 300, !12, i64 304, !12, i64 328, !18, i64 352, !13, i64 360, !13, i64 368, !13, i64 376, !13, i64 384, !13, i64 392, !13, i64 400, !13, i64 408, !13, i64 416}
!17 = !{!"int", !7, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = !{!10, !13, i64 1768}
!20 = !{!10, !13, i64 1776}
!21 = !{!10, !13, i64 1784}
!22 = !{!10, !13, i64 1792}
!23 = !{!10, !13, i64 1800}
!24 = !{!10, !13, i64 1808}
!25 = !{!10, !13, i64 1816}
!26 = !{!10, !13, i64 1824}
!27 = !{!10, !13, i64 1832}
!28 = !{!10, !13, i64 1840}
!29 = !{!10, !13, i64 1848}
!30 = !{!10, !13, i64 1856}
!31 = !{!10, !6, i64 280}
!32 = !{!33, !18, i64 3}
!33 = !{!"_ZTS16DynamicParameter", !18, i64 0, !18, i64 1, !18, i64 2, !18, i64 3, !17, i64 4, !17, i64 8, !17, i64 12, !13, i64 16, !17, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !17, i64 40, !17, i64 44, !17, i64 48, !17, i64 52, !17, i64 56, !17, i64 60, !17, i64 64, !17, i64 68, !17, i64 72, !17, i64 76, !17, i64 80, !17, i64 84, !17, i64 88, !17, i64 92, !17, i64 96, !17, i64 100, !17, i64 104, !17, i64 108, !17, i64 112, !17, i64 116, !18, i64 120, !13, i64 128, !17, i64 136, !17, i64 140, !17, i64 144, !17, i64 148, !17, i64 152, !17, i64 156, !17, i64 160, !17, i64 164, !17, i64 168, !13, i64 176, !17, i64 184, !17, i64 188, !17, i64 192, !17, i64 196, !17, i64 200, !17, i64 204, !17, i64 208, !18, i64 212, !12, i64 216, !12, i64 240, !18, i64 264}
!34 = !{i8 0, i8 2}
!35 = !{}
!36 = !{!10, !13, i64 2648}
!37 = !{!33, !17, i64 36}
!38 = !{!10, !17, i64 2656}
!39 = !{!33, !17, i64 112}
!40 = !{!10, !17, i64 2660}
!41 = !{!10, !13, i64 2664}
!42 = !{i64 0, i64 8, !43, i64 8, i64 8, !43, i64 16, i64 8, !43}
!43 = !{!13, !13, i64 0}
!44 = !{!33, !18, i64 120}
!45 = !{!10, !18, i64 2720}
!46 = !{!33, !18, i64 2}
!47 = !{!10, !18, i64 2722}
!48 = !{!33, !17, i64 12}
!49 = !{!10, !17, i64 2724}
!50 = !{!10, !13, i64 2848}
!51 = !{!10, !13, i64 2856}
!52 = !{!10, !13, i64 2864}
!53 = !{!10, !13, i64 2872}
!54 = !{!10, !13, i64 2888}
!55 = !{!33, !17, i64 72}
!56 = !{!10, !17, i64 3016}
!57 = !{!33, !17, i64 88}
!58 = !{!10, !17, i64 3020}
!59 = !{!33, !17, i64 8}
!60 = !{!10, !17, i64 3040}
!61 = !{!33, !17, i64 24}
!62 = !{!33, !17, i64 160}
!63 = !{!10, !17, i64 3044}
!64 = !{!10, !18, i64 2721}
!65 = !{!10, !18, i64 2723}
!66 = !{!33, !17, i64 184}
!67 = !{!33, !17, i64 188}
!68 = !{!10, !17, i64 3048}
!69 = !{!33, !17, i64 192}
!70 = !{!10, !17, i64 3052}
!71 = !{!33, !17, i64 196}
!72 = !{!10, !17, i64 3056}
!73 = !{!33, !17, i64 204}
!74 = !{!10, !17, i64 3060}
!75 = !{!76, !17, i64 64}
!76 = !{!"_ZTS14InputParameter", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !18, i64 20, !17, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !17, i64 40, !17, i64 44, !13, i64 48, !13, i64 56, !17, i64 64, !17, i64 68, !17, i64 72, !17, i64 76, !17, i64 80, !18, i64 84, !18, i64 85, !18, i64 86, !18, i64 87, !18, i64 88, !17, i64 92, !17, i64 96, !17, i64 100, !17, i64 104, !17, i64 108, !17, i64 112, !17, i64 116, !17, i64 120, !17, i64 124, !17, i64 128, !17, i64 132, !17, i64 136, !17, i64 140, !17, i64 144, !17, i64 148, !77, i64 152, !17, i64 156, !18, i64 160, !17, i64 164, !17, i64 168, !17, i64 172, !17, i64 176, !17, i64 180, !17, i64 184, !17, i64 188, !18, i64 192, !17, i64 196, !17, i64 200, !17, i64 204, !17, i64 208, !17, i64 212, !17, i64 216, !17, i64 220, !17, i64 224, !17, i64 228, !17, i64 232, !17, i64 236, !17, i64 240, !17, i64 244, !17, i64 248, !17, i64 252, !17, i64 256, !17, i64 260, !17, i64 264, !17, i64 268, !17, i64 272, !17, i64 276, !17, i64 280, !17, i64 284, !17, i64 288, !17, i64 292, !17, i64 296, !18, i64 300, !17, i64 304, !17, i64 308, !17, i64 312, !18, i64 316, !18, i64 317, !17, i64 320, !17, i64 324, !18, i64 328, !13, i64 336, !13, i64 344, !18, i64 352, !17, i64 356, !17, i64 360, !18, i64 364}
!77 = !{!"_ZTS9Wire_type", !7, i64 0}
!78 = !{!76, !17, i64 68}
!79 = !{!76, !17, i64 72}
!80 = !{!76, !17, i64 80}
!81 = !{!10, !17, i64 2156}
!82 = !{!10, !17, i64 2160}
!83 = !{!10, !17, i64 2164}
!84 = !{!10, !17, i64 2152}
!85 = !{!17, !17, i64 0}
!86 = !{!10, !13, i64 2672}
!87 = !{!88, !13, i64 1208}
!88 = !{!"_ZTS19TechnologyParameter", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !13, i64 208, !13, i64 216, !13, i64 224, !13, i64 232, !13, i64 240, !13, i64 248, !13, i64 256, !13, i64 264, !13, i64 272, !13, i64 280, !13, i64 288, !13, i64 296, !13, i64 304, !13, i64 312, !13, i64 320, !13, i64 328, !13, i64 336, !13, i64 344, !89, i64 352, !90, i64 360, !90, i64 528, !90, i64 696, !90, i64 864, !90, i64 1032, !91, i64 1200, !91, i64 1264, !91, i64 1328, !92, i64 1392, !93, i64 1416, !93, i64 1464, !93, i64 1512}
!89 = !{!"long", !7, i64 0}
!90 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160}
!91 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56}
!92 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !13, i64 0, !13, i64 8, !13, i64 16}
!93 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40}
!94 = !{!10, !13, i64 2696}
!95 = !{!88, !13, i64 1272}
!96 = !{!88, !13, i64 256}
!97 = !{!88, !13, i64 1280}
!98 = !{!33, !17, i64 44}
!99 = !{!88, !13, i64 264}
!100 = !{!33, !17, i64 48}
!101 = !{!10, !13, i64 2224}
!102 = !{!10, !6, i64 288}
!103 = !{!10, !6, i64 296}
!104 = !{!33, !17, i64 40}
!105 = !{!33, !17, i64 108}
!106 = !{!10, !6, i64 304}
!107 = !{!10, !6, i64 312}
!108 = !{!10, !13, i64 2680}
!109 = !{!10, !13, i64 2704}
!110 = !{!10, !6, i64 320}
!111 = !{!10, !6, i64 328}
!112 = !{!10, !6, i64 336}
!113 = !{!10, !6, i64 344}
!114 = !{!10, !6, i64 352}
!115 = !{!10, !6, i64 360}
!116 = !{!10, !6, i64 368}
!117 = !{!10, !6, i64 376}
!118 = !{!76, !77, i64 152}
!119 = !{!11, !13, i64 8}
!120 = !{!10, !6, i64 384}
!121 = !{!88, !13, i64 272}
!122 = !{!88, !13, i64 280}
!123 = !{!88, !13, i64 1344}
!124 = !{!88, !13, i64 1336}
!125 = !{!10, !6, i64 400}
!126 = !{!10, !6, i64 392}
!127 = !{!33, !18, i64 0}
!128 = !{!33, !17, i64 4}
!129 = !{!130, !17, i64 292}
!130 = !{!"_ZTS9PredecBlk", !11, i64 0, !6, i64 280, !18, i64 288, !17, i64 292, !13, i64 296, !13, i64 304, !17, i64 312, !17, i64 316, !18, i64 320, !17, i64 324, !17, i64 328, !17, i64 332, !17, i64 336, !17, i64 340, !17, i64 344, !17, i64 348, !17, i64 352, !17, i64 356, !7, i64 360, !7, i64 520, !7, i64 680, !7, i64 840, !7, i64 1000, !7, i64 1160, !13, i64 1320, !13, i64 1328, !14, i64 1336, !14, i64 1456, !14, i64 1576, !18, i64 1696}
!131 = !{!88, !13, i64 1264}
!132 = !{!76, !17, i64 92}
!133 = !{!33, !17, i64 52}
!134 = !{!33, !17, i64 68}
!135 = !{!33, !17, i64 84}
!136 = !{!11, !13, i64 0}


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

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

@.str = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter = external hidden unnamed_addr constant [35 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [27 x i8], align 1
@g_ip = external local_unnamed_addr global ptr, align 8
@g_tp = external global %class.TechnologyParameter, align 8
@.str.3 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [11 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3MatC2ERK16DynamicParameter(ptr noundef nonnull align 8 dereferenceable(3064) %0, ptr noundef nonnull align 8 dereferenceable(265) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  tail call void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %0)
  %3 = getelementptr inbounds i8, ptr %0, i64 280
  store ptr %1, ptr %3, align 8, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 440
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %4)
          to label %5 unwind label %88

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 560
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %6)
          to label %7 unwind label %88

7:                                                ; preds = %5
  %8 = getelementptr inbounds i8, ptr %0, i64 680
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %8)
          to label %9 unwind label %88

9:                                                ; preds = %7
  %10 = getelementptr inbounds i8, ptr %0, i64 800
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %10)
          to label %11 unwind label %88

11:                                               ; preds = %9
  %12 = getelementptr inbounds i8, ptr %0, i64 920
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %12)
          to label %13 unwind label %88

13:                                               ; preds = %11
  %14 = getelementptr inbounds i8, ptr %0, i64 1040
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %14)
          to label %15 unwind label %88

15:                                               ; preds = %13
  %16 = getelementptr inbounds i8, ptr %0, i64 1160
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %16)
          to label %17 unwind label %88

17:                                               ; preds = %15
  %18 = getelementptr inbounds i8, ptr %0, i64 1280
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %18)
          to label %19 unwind label %88

19:                                               ; preds = %17
  %20 = getelementptr inbounds i8, ptr %0, i64 1400
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %20)
          to label %21 unwind label %88

21:                                               ; preds = %19
  %22 = getelementptr inbounds i8, ptr %0, i64 1520
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %22)
          to label %23 unwind label %88

23:                                               ; preds = %21
  %24 = getelementptr inbounds i8, ptr %0, i64 1640
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %24)
          to label %25 unwind label %88

25:                                               ; preds = %23
  %26 = getelementptr inbounds i8, ptr %0, i64 1760
  %27 = getelementptr inbounds i8, ptr %0, i64 1864
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(104) %26, i8 0, i64 104, i1 false)
  %28 = load ptr, ptr %3, align 8, !tbaa !9
  %29 = getelementptr inbounds i8, ptr %28, i64 3
  %30 = load i8, ptr %29, align 1, !tbaa !19, !range !21, !noundef !22
  %31 = trunc nuw i8 %30 to i1
  invoke void @_ZN8SubarrayC1ERK16DynamicParameterb(ptr noundef nonnull align 8 dereferenceable(424) %27, ptr noundef nonnull align 8 dereferenceable(265) %28, i1 noundef zeroext %31)
          to label %32 unwind label %88

32:                                               ; preds = %25
  %33 = getelementptr inbounds i8, ptr %0, i64 2288
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %33)
          to label %34 unwind label %90

34:                                               ; preds = %32
  %35 = getelementptr inbounds i8, ptr %0, i64 2408
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %35)
          to label %36 unwind label %90

36:                                               ; preds = %34
  %37 = getelementptr inbounds i8, ptr %0, i64 2528
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %37)
          to label %38 unwind label %90

38:                                               ; preds = %36
  %39 = getelementptr inbounds i8, ptr %0, i64 2648
  store double 0.000000e+00, ptr %39, align 8, !tbaa !23
  %40 = getelementptr inbounds i8, ptr %0, i64 2656
  %41 = load ptr, ptr %3, align 8, !tbaa !9
  %42 = getelementptr inbounds i8, ptr %41, i64 36
  %43 = load i32, ptr %42, align 4, !tbaa !24
  store i32 %43, ptr %40, align 8, !tbaa !25
  %44 = getelementptr inbounds i8, ptr %0, i64 2660
  %45 = getelementptr inbounds i8, ptr %1, i64 112
  %46 = load i32, ptr %45, align 8, !tbaa !26
  store i32 %46, ptr %44, align 4, !tbaa !27
  %47 = getelementptr inbounds i8, ptr %0, i64 2664
  store double 0.000000e+00, ptr %47, align 8, !tbaa !28
  %48 = getelementptr inbounds i8, ptr %0, i64 2672
  %49 = getelementptr inbounds i8, ptr %0, i64 2168
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 8 dereferenceable(24) %49, i64 24, i1 false), !tbaa.struct !29
  %50 = getelementptr inbounds i8, ptr %0, i64 2696
  %51 = getelementptr inbounds i8, ptr %0, i64 2192
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %50, ptr noundef nonnull align 8 dereferenceable(24) %51, i64 24, i1 false), !tbaa.struct !29
  %52 = getelementptr inbounds i8, ptr %0, i64 2720
  %53 = getelementptr inbounds i8, ptr %1, i64 120
  %54 = load i8, ptr %53, align 8, !tbaa !31, !range !21, !noundef !22
  store i8 %54, ptr %52, align 8, !tbaa !32
  %55 = getelementptr inbounds i8, ptr %0, i64 2722
  %56 = getelementptr inbounds i8, ptr %1, i64 2
  %57 = load i8, ptr %56, align 2, !tbaa !33, !range !21, !noundef !22
  store i8 %57, ptr %55, align 2, !tbaa !34
  %58 = getelementptr inbounds i8, ptr %0, i64 2724
  %59 = getelementptr inbounds i8, ptr %41, i64 12
  %60 = load i32, ptr %59, align 4, !tbaa !35
  store i32 %60, ptr %58, align 4, !tbaa !36
  %61 = getelementptr inbounds i8, ptr %0, i64 2728
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %61)
          to label %62 unwind label %90

62:                                               ; preds = %38
  %63 = getelementptr inbounds i8, ptr %0, i64 2848
  %64 = getelementptr inbounds i8, ptr %0, i64 2888
  store double 0.000000e+00, ptr %64, align 8, !tbaa !37
  %65 = getelementptr inbounds i8, ptr %0, i64 2896
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %63, i8 0, i64 32, i1 false)
  invoke void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %65)
          to label %66 unwind label %90

66:                                               ; preds = %62
  %67 = getelementptr inbounds i8, ptr %0, i64 3016
  %68 = getelementptr inbounds i8, ptr %1, i64 72
  %69 = load i32, ptr %68, align 8, !tbaa !38
  store i32 %69, ptr %67, align 8, !tbaa !39
  %70 = getelementptr inbounds i8, ptr %0, i64 3020
  %71 = getelementptr inbounds i8, ptr %1, i64 88
  %72 = load i32, ptr %71, align 8, !tbaa !40
  store i32 %72, ptr %70, align 4, !tbaa !41
  %73 = getelementptr inbounds i8, ptr %0, i64 3040
  %74 = load ptr, ptr %3, align 8, !tbaa !9
  %75 = getelementptr inbounds i8, ptr %74, i64 8
  %76 = load i32, ptr %75, align 8, !tbaa !42
  %77 = getelementptr inbounds i8, ptr %74, i64 12
  %78 = load i32, ptr %77, align 4, !tbaa !35
  %79 = sdiv i32 %76, %78
  store i32 %79, ptr %73, align 8, !tbaa !43
  %80 = getelementptr inbounds i8, ptr %0, i64 3044
  %81 = getelementptr inbounds i8, ptr %74, i64 24
  %82 = load i32, ptr %81, align 8, !tbaa !44
  %83 = getelementptr inbounds i8, ptr %74, i64 160
  %84 = load i32, ptr %83, align 8, !tbaa !45
  %85 = sdiv i32 %82, %84
  store i32 %85, ptr %80, align 4, !tbaa !46
  %86 = icmp ult i32 %79, 5
  br i1 %86, label %92, label %87

87:                                               ; preds = %66
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 66, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

88:                                               ; preds = %25, %23, %21, %19, %17, %15, %13, %11, %9, %7, %5, %2
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %914

90:                                               ; preds = %62, %38, %36, %34, %32
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %913

92:                                               ; preds = %66
  %93 = icmp ult i32 %85, 3
  br i1 %93, label %95, label %94

94:                                               ; preds = %92
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 67, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

95:                                               ; preds = %92
  %96 = getelementptr inbounds i8, ptr %74, i64 3
  %97 = load i8, ptr %96, align 1, !tbaa !19, !range !21, !noundef !22
  %98 = trunc nuw i8 %97 to i1
  %99 = getelementptr inbounds i8, ptr %0, i64 2721
  store i8 %97, ptr %99, align 1, !tbaa !47
  %100 = load i8, ptr %55, align 2, !range !21
  %spec.select = select i1 %98, i8 1, i8 %100
  %101 = getelementptr inbounds i8, ptr %0, i64 2723
  store i8 %spec.select, ptr %101, align 1, !tbaa !48
  br i1 %98, label %104, label %102

102:                                              ; preds = %95
  %103 = trunc nuw i8 %100 to i1
  br i1 %103, label %104, label %108

104:                                              ; preds = %102, %95
  %105 = icmp ugt i32 %79, 2
  %106 = zext i1 %105 to i32
  %107 = lshr i32 %79, %106
  store i32 %107, ptr %80, align 4, !tbaa !46
  br label %108

108:                                              ; preds = %104, %102
  %109 = phi i32 [ %107, %104 ], [ %85, %102 ]
  %110 = getelementptr inbounds i8, ptr %74, i64 184
  %111 = load i32, ptr %110, align 8, !tbaa !49
  %112 = icmp eq i32 %111, 1
  br i1 %112, label %113, label %118

113:                                              ; preds = %108
  %114 = getelementptr inbounds i8, ptr %74, i64 188
  %115 = getelementptr inbounds i8, ptr %74, i64 192
  %116 = getelementptr inbounds i8, ptr %74, i64 196
  %117 = getelementptr inbounds i8, ptr %74, i64 204
  br label %124

118:                                              ; preds = %108
  %119 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %119, i64 64
  %121 = getelementptr inbounds i8, ptr %119, i64 68
  %122 = getelementptr inbounds i8, ptr %119, i64 72
  %123 = getelementptr inbounds i8, ptr %119, i64 80
  br label %124

124:                                              ; preds = %118, %113
  %.sink192.in = phi ptr [ %114, %113 ], [ %120, %118 ]
  %.sink191.in = phi ptr [ %115, %113 ], [ %121, %118 ]
  %.sink190.in = phi ptr [ %116, %113 ], [ %122, %118 ]
  %.sink.in = phi ptr [ %117, %113 ], [ %123, %118 ]
  %.sink = load i32, ptr %.sink.in, align 4, !tbaa !50
  %.sink190 = load i32, ptr %.sink190.in, align 4, !tbaa !50
  %.sink191 = load i32, ptr %.sink191.in, align 4, !tbaa !50
  %.sink192 = load i32, ptr %.sink192.in, align 4, !tbaa !50
  %125 = getelementptr inbounds i8, ptr %0, i64 3048
  store i32 %.sink192, ptr %125, align 8
  %126 = getelementptr inbounds i8, ptr %0, i64 3052
  store i32 %.sink191, ptr %126, align 4
  %127 = getelementptr inbounds i8, ptr %0, i64 3056
  store i32 %.sink190, ptr %127, align 8
  %128 = getelementptr inbounds i8, ptr %0, i64 3060
  store i32 %.sink, ptr %128, align 4
  %129 = trunc nuw i8 %100 to i1
  br i1 %98, label %134, label %130

130:                                              ; preds = %124
  %131 = load i32, ptr %40, align 8, !tbaa !25
  %132 = getelementptr inbounds i8, ptr %0, i64 2152
  %133 = load i32, ptr %132, align 8, !tbaa !51
  br i1 %129, label %._crit_edge, label %142

134:                                              ; preds = %124
  %135 = getelementptr inbounds i8, ptr %0, i64 2160
  %136 = load i32, ptr %135, align 8, !tbaa !52
  br i1 %129, label %.thread225, label %152

.thread225:                                       ; preds = %134
  %137 = load i32, ptr %40, align 8, !tbaa !25
  %138 = sdiv i32 %136, %137
  %.ph176228 = getelementptr inbounds i8, ptr %0, i64 2152
  %.ph229 = load i32, ptr %.ph176228, align 8, !tbaa !51
  br label %168

._crit_edge:                                      ; preds = %130
  %139 = getelementptr inbounds i8, ptr %0, i64 2160
  %140 = load i32, ptr %139, align 8, !tbaa !52
  %141 = sdiv i32 %140, %131
  br label %168

142:                                              ; preds = %130
  %143 = getelementptr inbounds i8, ptr %0, i64 2156
  %144 = load i32, ptr %143, align 4, !tbaa !53
  %145 = udiv i32 %144, %131
  %146 = uitofp i32 %145 to double
  %147 = uitofp i32 %144 to double
  %148 = load double, ptr %48, align 8, !tbaa !54
  %149 = fmul double %148, %147
  %150 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1208), align 8, !tbaa !55
  %151 = fmul double %149, %150
  br label %178

152:                                              ; preds = %134
  %153 = getelementptr inbounds i8, ptr %0, i64 2164
  %154 = load i32, ptr %153, align 4, !tbaa !62
  %155 = add nsw i32 %154, %136
  %156 = load i32, ptr %40, align 8, !tbaa !25
  %157 = sdiv i32 %155, %156
  %.0119171.ph = sitofp i32 %157 to double
  %.ph176 = getelementptr inbounds i8, ptr %0, i64 2152
  %.ph = load i32, ptr %.ph176, align 8, !tbaa !51
  %158 = sitofp i32 %136 to double
  %159 = load double, ptr %50, align 8, !tbaa !63
  %160 = getelementptr inbounds i8, ptr %0, i64 2164
  %161 = load i32, ptr %160, align 4, !tbaa !62
  %162 = sitofp i32 %161 to double
  %163 = load double, ptr %48, align 8, !tbaa !54
  %164 = fmul double %163, %162
  %165 = tail call double @llvm.fmuladd.f64(double %158, double %159, double %164)
  %166 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1208), align 8, !tbaa !55
  %167 = fmul double %166, %165
  br label %178

168:                                              ; preds = %.thread225, %._crit_edge
  %169 = phi i32 [ %131, %._crit_edge ], [ %137, %.thread225 ]
  %170 = phi i32 [ %140, %._crit_edge ], [ %136, %.thread225 ]
  %.0119171179.in = phi i32 [ %141, %._crit_edge ], [ %138, %.thread225 ]
  %171 = phi ptr [ %132, %._crit_edge ], [ %.ph176228, %.thread225 ]
  %172 = phi i32 [ %133, %._crit_edge ], [ %.ph229, %.thread225 ]
  %.0119171179 = sitofp i32 %.0119171179.in to double
  %173 = sitofp i32 %170 to double
  %174 = load double, ptr %50, align 8, !tbaa !63
  %175 = fmul double %174, %173
  %176 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1208), align 8, !tbaa !55
  %177 = fmul double %175, %176
  %.pre193 = load double, ptr %48, align 8, !tbaa !54
  br label %178

178:                                              ; preds = %152, %168, %142
  %179 = phi i32 [ %169, %168 ], [ %156, %152 ], [ %131, %142 ]
  %180 = phi double [ %.pre193, %168 ], [ %163, %152 ], [ %148, %142 ]
  %181 = phi i32 [ %172, %168 ], [ %.ph, %152 ], [ %133, %142 ]
  %182 = phi ptr [ %171, %168 ], [ %.ph176, %152 ], [ %132, %142 ]
  %.0119170 = phi double [ %.0119171179, %168 ], [ %.0119171.ph, %152 ], [ %146, %142 ]
  %.0129 = phi double [ %177, %168 ], [ %167, %152 ], [ %151, %142 ]
  %183 = getelementptr inbounds i8, ptr %0, i64 2156
  %184 = load i32, ptr %183, align 4, !tbaa !53
  %185 = mul i32 %184, %109
  %186 = uitofp i32 %185 to double
  %187 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1272), align 8, !tbaa !64
  %188 = fmul double %187, %186
  %189 = fmul double %180, %188
  %190 = icmp sgt i32 %179, 1
  br i1 %190, label %191, label %212

191:                                              ; preds = %178
  %192 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 256), align 8, !tbaa !65
  %193 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %194 = trunc nuw i8 %193 to i1
  %195 = invoke noundef double @_Z6gate_Cddbbb(double noundef %192, double noundef 0.000000e+00, i1 noundef zeroext %194, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %196 unwind label %210

196:                                              ; preds = %191
  %197 = shl nuw nsw i32 %79, 1
  %198 = mul i32 %197, %184
  %199 = udiv i32 %198, %179
  %200 = uitofp nneg i32 %199 to double
  %201 = load i32, ptr %80, align 4, !tbaa !46
  %202 = load i32, ptr %183, align 4, !tbaa !53
  %203 = mul i32 %202, %201
  %204 = uitofp i32 %203 to double
  %205 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1280), align 8, !tbaa !66
  %206 = fmul double %205, %204
  %207 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %48)
  %208 = fmul double %207, %206
  %209 = tail call double @llvm.fmuladd.f64(double %200, double %195, double %208)
  %.pre194 = load ptr, ptr %3, align 8, !tbaa !9
  br label %212

210:                                              ; preds = %303, %288, %278, %265, %242, %217, %191
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %913

212:                                              ; preds = %196, %178
  %213 = phi ptr [ %.pre194, %196 ], [ %74, %178 ]
  %.0122 = phi double [ %209, %196 ], [ 0.000000e+00, %178 ]
  %214 = getelementptr inbounds i8, ptr %213, i64 44
  %215 = load i32, ptr %214, align 4, !tbaa !67
  %216 = icmp sgt i32 %215, 1
  br i1 %216, label %217, label %237

217:                                              ; preds = %212
  %218 = load i32, ptr %73, align 8, !tbaa !43
  %219 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 264), align 8, !tbaa !68
  %220 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %221 = trunc nuw i8 %220 to i1
  %222 = invoke noundef double @_Z6gate_Cddbbb(double noundef %219, double noundef 0.000000e+00, i1 noundef zeroext %221, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %223 unwind label %210

223:                                              ; preds = %217
  %224 = uitofp i32 %218 to double
  %225 = fmul double %.0119170, %224
  %226 = uitofp nneg i32 %215 to double
  %227 = fdiv double %225, %226
  %228 = load i32, ptr %80, align 4, !tbaa !46
  %229 = load i32, ptr %183, align 4, !tbaa !53
  %230 = mul i32 %229, %228
  %231 = uitofp i32 %230 to double
  %232 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1280), align 8, !tbaa !66
  %233 = fmul double %232, %231
  %234 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %48)
  %235 = fmul double %234, %233
  %236 = tail call double @llvm.fmuladd.f64(double %227, double %222, double %235)
  %.pre195 = load ptr, ptr %3, align 8, !tbaa !9
  br label %237

237:                                              ; preds = %223, %212
  %238 = phi ptr [ %.pre195, %223 ], [ %213, %212 ]
  %.0127 = phi double [ %236, %223 ], [ 0.000000e+00, %212 ]
  %239 = getelementptr inbounds i8, ptr %238, i64 48
  %240 = load i32, ptr %239, align 8, !tbaa !69
  %241 = icmp sgt i32 %240, 1
  br i1 %241, label %242, label %265

242:                                              ; preds = %237
  %243 = load i32, ptr %73, align 8, !tbaa !43
  %244 = getelementptr inbounds i8, ptr %238, i64 44
  %245 = load i32, ptr %244, align 4, !tbaa !67
  %246 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 264), align 8, !tbaa !68
  %247 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %248 = trunc nuw i8 %247 to i1
  %249 = invoke noundef double @_Z6gate_Cddbbb(double noundef %246, double noundef 0.000000e+00, i1 noundef zeroext %248, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %250 unwind label %210

250:                                              ; preds = %242
  %251 = uitofp i32 %243 to double
  %252 = fmul double %.0119170, %251
  %253 = mul nsw i32 %245, %240
  %254 = sitofp i32 %253 to double
  %255 = fdiv double %252, %254
  %256 = load i32, ptr %80, align 4, !tbaa !46
  %257 = load i32, ptr %183, align 4, !tbaa !53
  %258 = mul i32 %257, %256
  %259 = uitofp i32 %258 to double
  %260 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1280), align 8, !tbaa !66
  %261 = fmul double %260, %259
  %262 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %48)
  %263 = fmul double %262, %261
  %264 = tail call double @llvm.fmuladd.f64(double %255, double %249, double %263)
  br label %265

265:                                              ; preds = %250, %237
  %.0128 = phi double [ %264, %250 ], [ 0.000000e+00, %237 ]
  %266 = load i32, ptr %80, align 4, !tbaa !46
  %267 = icmp ugt i32 %266, 1
  %268 = fmul double %189, 5.000000e-01
  %.0130 = select i1 %267, double %268, double %189
  %269 = invoke noalias noundef nonnull dereferenceable(656) ptr @_Znwm(i64 noundef 656) #11
          to label %270 unwind label %210

270:                                              ; preds = %265
  %271 = getelementptr inbounds i8, ptr %0, i64 2224
  %272 = load double, ptr %271, align 8, !tbaa !70
  %273 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %274 = trunc nuw i8 %273 to i1
  %275 = load i8, ptr %101, align 1, !tbaa !48, !range !21, !noundef !22
  %276 = trunc nuw i8 %275 to i1
  %277 = select i1 %276, ptr %50, ptr %48
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %269, i32 noundef %181, i1 noundef zeroext false, double noundef %272, double noundef %.0129, i1 noundef zeroext false, i1 noundef zeroext %274, i1 noundef zeroext true, ptr noundef nonnull align 8 dereferenceable(24) %277)
          to label %278 unwind label %334

278:                                              ; preds = %270
  %279 = getelementptr inbounds i8, ptr %0, i64 288
  store ptr %269, ptr %279, align 8, !tbaa !71
  %280 = invoke noalias noundef nonnull dereferenceable(656) ptr @_Znwm(i64 noundef 656) #11
          to label %281 unwind label %210

281:                                              ; preds = %278
  %282 = load i32, ptr %40, align 8, !tbaa !25
  %283 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %284 = trunc nuw i8 %283 to i1
  %285 = load i8, ptr %101, align 1, !tbaa !48, !range !21, !noundef !22
  %286 = trunc nuw i8 %285 to i1
  %287 = select i1 %286, ptr %50, ptr %48
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %280, i32 noundef %282, i1 noundef zeroext false, double noundef %.0122, double noundef %.0130, i1 noundef zeroext false, i1 noundef zeroext %284, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(24) %287)
          to label %288 unwind label %336

288:                                              ; preds = %281
  %289 = getelementptr inbounds i8, ptr %0, i64 296
  store ptr %280, ptr %289, align 8, !tbaa !72
  %290 = invoke noalias noundef nonnull dereferenceable(656) ptr @_Znwm(i64 noundef 656) #11
          to label %291 unwind label %210

291:                                              ; preds = %288
  %292 = load ptr, ptr %3, align 8, !tbaa !9
  %293 = getelementptr inbounds i8, ptr %292, i64 40
  %294 = load i32, ptr %293, align 8, !tbaa !73
  %295 = getelementptr inbounds i8, ptr %292, i64 108
  %296 = load i32, ptr %295, align 4, !tbaa !74
  %297 = icmp ne i32 %296, 0
  %298 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %299 = trunc nuw i8 %298 to i1
  %300 = load i8, ptr %101, align 1, !tbaa !48, !range !21, !noundef !22
  %301 = trunc nuw i8 %300 to i1
  %302 = select i1 %301, ptr %50, ptr %48
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %290, i32 noundef %294, i1 noundef zeroext %297, double noundef %.0127, double noundef %.0130, i1 noundef zeroext false, i1 noundef zeroext %299, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(24) %302)
          to label %303 unwind label %338

303:                                              ; preds = %291
  %304 = getelementptr inbounds i8, ptr %0, i64 304
  store ptr %290, ptr %304, align 8, !tbaa !75
  %305 = invoke noalias noundef nonnull dereferenceable(656) ptr @_Znwm(i64 noundef 656) #11
          to label %306 unwind label %210

306:                                              ; preds = %303
  %307 = load ptr, ptr %3, align 8, !tbaa !9
  %308 = getelementptr inbounds i8, ptr %307, i64 48
  %309 = load i32, ptr %308, align 8, !tbaa !69
  %310 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %311 = trunc nuw i8 %310 to i1
  %312 = load i8, ptr %101, align 1, !tbaa !48, !range !21, !noundef !22
  %313 = trunc nuw i8 %312 to i1
  %314 = select i1 %313, ptr %50, ptr %48
  invoke void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656) %305, i32 noundef %309, i1 noundef zeroext false, double noundef %.0128, double noundef %.0130, i1 noundef zeroext false, i1 noundef zeroext %311, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(24) %314)
          to label %315 unwind label %340

315:                                              ; preds = %306
  %316 = getelementptr inbounds i8, ptr %0, i64 312
  store ptr %305, ptr %316, align 8, !tbaa !76
  %317 = load i8, ptr %99, align 1, !tbaa !47, !range !21, !noundef !22
  %318 = trunc nuw i8 %317 to i1
  br i1 %318, label %342, label %319

319:                                              ; preds = %315
  %320 = load i8, ptr %55, align 2, !tbaa !34, !range !21, !noundef !22
  %321 = trunc nuw i8 %320 to i1
  br i1 %321, label %342, label %.thread230

.thread230:                                       ; preds = %319
  %322 = load i32, ptr %80, align 4, !tbaa !46
  %323 = load i32, ptr %182, align 8, !tbaa !51
  %324 = mul i32 %323, %322
  %325 = uitofp i32 %324 to double
  %326 = getelementptr inbounds i8, ptr %0, i64 2680
  %327 = load <2 x double>, ptr %326, align 8
  %328 = load <2 x double>, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1272), align 8, !tbaa !30
  %329 = insertelement <2 x double> poison, double %325, i64 0
  %330 = shufflevector <2 x double> %329, <2 x double> poison, <2 x i32> zeroinitializer
  %331 = fmul <2 x double> %328, %330
  %332 = shufflevector <2 x double> %327, <2 x double> poison, <2 x i32> zeroinitializer
  %333 = fmul <2 x double> %332, %331
  br label %362

334:                                              ; preds = %270
  %335 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %269, i64 noundef 656) #12
  br label %913

336:                                              ; preds = %281
  %337 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %280, i64 noundef 656) #12
  br label %913

338:                                              ; preds = %291
  %339 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %290, i64 noundef 656) #12
  br label %913

340:                                              ; preds = %306
  %341 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %305, i64 noundef 656) #12
  br label %913

342:                                              ; preds = %315, %319
  %343 = load i32, ptr %182, align 8, !tbaa !51
  %344 = uitofp i32 %343 to double
  %345 = getelementptr inbounds i8, ptr %0, i64 2704
  %346 = load <2 x double>, ptr %345, align 8
  %347 = load <2 x double>, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1272), align 8, !tbaa !30
  %348 = insertelement <2 x double> poison, double %344, i64 0
  %349 = shufflevector <2 x double> %348, <2 x double> poison, <2 x i32> zeroinitializer
  %350 = fmul <2 x double> %347, %349
  %351 = shufflevector <2 x double> %346, <2 x double> poison, <2 x i32> zeroinitializer
  %352 = fmul <2 x double> %350, %351
  br i1 %318, label %354, label %353

353:                                              ; preds = %342
  %.pre197 = load i8, ptr %55, align 2, !tbaa !34, !range !21
  %.pre221 = trunc nuw i8 %.pre197 to i1
  br i1 %.pre221, label %354, label %362

354:                                              ; preds = %353, %342
  %355 = load i32, ptr %73, align 8, !tbaa !43
  %356 = zext i32 %355 to i64
  %357 = invoke noundef i32 @_Z5_log2m(i64 noundef %356)
          to label %358 unwind label %360

358:                                              ; preds = %354
  %359 = add i32 %357, %181
  br label %362

360:                                              ; preds = %354
  %361 = landingpad { ptr, i32 }
          cleanup
  br label %913

362:                                              ; preds = %.thread230, %358, %353
  %.0121 = phi i32 [ %359, %358 ], [ %181, %353 ], [ %181, %.thread230 ]
  %363 = phi <2 x double> [ %352, %358 ], [ %352, %353 ], [ %333, %.thread230 ]
  %364 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %365 unwind label %579

365:                                              ; preds = %362
  %366 = load ptr, ptr %279, align 8, !tbaa !71
  %367 = load i32, ptr %73, align 8, !tbaa !43
  %368 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %369 = trunc nuw i8 %368 to i1
  %370 = extractelement <2 x double> %363, i64 0
  %371 = extractelement <2 x double> %363, i64 1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %364, i32 noundef %.0121, ptr noundef %366, double noundef %371, double noundef %370, i32 noundef %367, i1 noundef zeroext %369, i1 noundef zeroext true)
          to label %372 unwind label %581

372:                                              ; preds = %365
  %373 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %374 unwind label %583

374:                                              ; preds = %372
  %375 = load ptr, ptr %279, align 8, !tbaa !71
  %376 = load i32, ptr %73, align 8, !tbaa !43
  %377 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %378 = trunc nuw i8 %377 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %373, i32 noundef %.0121, ptr noundef %375, double noundef %371, double noundef %370, i32 noundef %376, i1 noundef zeroext %378, i1 noundef zeroext false)
          to label %379 unwind label %585

379:                                              ; preds = %374
  %380 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %381 unwind label %587

381:                                              ; preds = %379
  %382 = load i32, ptr %40, align 8, !tbaa !25
  %383 = load ptr, ptr %289, align 8, !tbaa !72
  %384 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %385 = trunc nuw i8 %384 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %380, i32 noundef %382, ptr noundef %383, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %385, i1 noundef zeroext true)
          to label %386 unwind label %589

386:                                              ; preds = %381
  %387 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %388 unwind label %591

388:                                              ; preds = %386
  %389 = load i32, ptr %40, align 8, !tbaa !25
  %390 = load ptr, ptr %289, align 8, !tbaa !72
  %391 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %392 = trunc nuw i8 %391 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %387, i32 noundef %389, ptr noundef %390, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %392, i1 noundef zeroext false)
          to label %393 unwind label %593

393:                                              ; preds = %388
  %394 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %395 unwind label %595

395:                                              ; preds = %393
  %396 = getelementptr inbounds i8, ptr %1, i64 40
  %397 = load i32, ptr %396, align 8, !tbaa !73
  %398 = load ptr, ptr %304, align 8, !tbaa !75
  %399 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %400 = trunc nuw i8 %399 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %394, i32 noundef %397, ptr noundef %398, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %400, i1 noundef zeroext true)
          to label %401 unwind label %597

401:                                              ; preds = %395
  %402 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %403 unwind label %599

403:                                              ; preds = %401
  %404 = load i32, ptr %396, align 8, !tbaa !73
  %405 = load ptr, ptr %304, align 8, !tbaa !75
  %406 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %407 = trunc nuw i8 %406 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %402, i32 noundef %404, ptr noundef %405, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %407, i1 noundef zeroext false)
          to label %408 unwind label %601

408:                                              ; preds = %403
  %409 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %410 unwind label %603

410:                                              ; preds = %408
  %411 = load ptr, ptr %3, align 8, !tbaa !9
  %412 = getelementptr inbounds i8, ptr %411, i64 48
  %413 = load i32, ptr %412, align 8, !tbaa !69
  %414 = load ptr, ptr %316, align 8, !tbaa !76
  %415 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %416 = trunc nuw i8 %415 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %409, i32 noundef %413, ptr noundef %414, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %416, i1 noundef zeroext true)
          to label %417 unwind label %605

417:                                              ; preds = %410
  %418 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %419 unwind label %607

419:                                              ; preds = %417
  %420 = load ptr, ptr %3, align 8, !tbaa !9
  %421 = getelementptr inbounds i8, ptr %420, i64 48
  %422 = load i32, ptr %421, align 8, !tbaa !69
  %423 = load ptr, ptr %316, align 8, !tbaa !76
  %424 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %425 = trunc nuw i8 %424 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %418, i32 noundef %422, ptr noundef %423, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 1, i1 noundef zeroext %425, i1 noundef zeroext false)
          to label %426 unwind label %609

426:                                              ; preds = %419
  %427 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %428 unwind label %607

428:                                              ; preds = %426
  %429 = load ptr, ptr %304, align 8, !tbaa !75
  %430 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %431 = trunc nuw i8 %430 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %427, i32 noundef 1, ptr noundef %429, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 0, i1 noundef zeroext %431, i1 noundef zeroext true)
          to label %432 unwind label %611

432:                                              ; preds = %428
  %433 = getelementptr inbounds i8, ptr %0, i64 320
  store ptr %427, ptr %433, align 8, !tbaa !77
  %434 = invoke noalias noundef nonnull dereferenceable(1704) ptr @_Znwm(i64 noundef 1704) #11
          to label %435 unwind label %607

435:                                              ; preds = %432
  %436 = load ptr, ptr %304, align 8, !tbaa !75
  %437 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %438 = trunc nuw i8 %437 to i1
  invoke void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697) %434, i32 noundef 1, ptr noundef %436, double noundef 0.000000e+00, double noundef 0.000000e+00, i32 noundef 0, i1 noundef zeroext %438, i1 noundef zeroext false)
          to label %439 unwind label %613

439:                                              ; preds = %435
  %440 = getelementptr inbounds i8, ptr %0, i64 328
  store ptr %434, ptr %440, align 8, !tbaa !78
  %441 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %442 unwind label %615

442:                                              ; preds = %439
  %443 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %444 = trunc nuw i8 %443 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %441, i32 noundef 0, ptr noundef nonnull %364, i1 noundef zeroext %444)
          to label %445 unwind label %617

445:                                              ; preds = %442
  %446 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %447 unwind label %619

447:                                              ; preds = %445
  %448 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %449 = trunc nuw i8 %448 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %446, i32 noundef 0, ptr noundef nonnull %373, i1 noundef zeroext %449)
          to label %450 unwind label %621

450:                                              ; preds = %447
  %451 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %452 unwind label %623

452:                                              ; preds = %450
  %453 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %454 = trunc nuw i8 %453 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %451, i32 noundef 0, ptr noundef nonnull %380, i1 noundef zeroext %454)
          to label %455 unwind label %625

455:                                              ; preds = %452
  %456 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %457 unwind label %627

457:                                              ; preds = %455
  %458 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %459 = trunc nuw i8 %458 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %456, i32 noundef 0, ptr noundef nonnull %387, i1 noundef zeroext %459)
          to label %460 unwind label %629

460:                                              ; preds = %457
  %461 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %462 unwind label %631

462:                                              ; preds = %460
  %463 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %464 = trunc nuw i8 %463 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %461, i32 noundef 0, ptr noundef nonnull %394, i1 noundef zeroext %464)
          to label %465 unwind label %633

465:                                              ; preds = %462
  %466 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %467 unwind label %635

467:                                              ; preds = %465
  %468 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %469 = trunc nuw i8 %468 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %466, i32 noundef 0, ptr noundef nonnull %402, i1 noundef zeroext %469)
          to label %470 unwind label %637

470:                                              ; preds = %467
  %471 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %472 unwind label %639

472:                                              ; preds = %470
  %473 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %474 = trunc nuw i8 %473 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %471, i32 noundef 0, ptr noundef nonnull %409, i1 noundef zeroext %474)
          to label %475 unwind label %641

475:                                              ; preds = %472
  %476 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %477 unwind label %643

477:                                              ; preds = %475
  %478 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %479 = trunc nuw i8 %478 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %476, i32 noundef 0, ptr noundef nonnull %418, i1 noundef zeroext %479)
          to label %480 unwind label %645

480:                                              ; preds = %477
  %481 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %482 unwind label %643

482:                                              ; preds = %480
  %483 = getelementptr inbounds i8, ptr %1, i64 108
  %484 = load i32, ptr %483, align 4, !tbaa !74
  %485 = load ptr, ptr %433, align 8, !tbaa !77
  %486 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %487 = trunc nuw i8 %486 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %481, i32 noundef %484, ptr noundef %485, i1 noundef zeroext %487)
          to label %488 unwind label %647

488:                                              ; preds = %482
  %489 = getelementptr inbounds i8, ptr %0, i64 336
  store ptr %481, ptr %489, align 8, !tbaa !79
  %490 = invoke noalias noundef nonnull dereferenceable(1280) ptr @_Znwm(i64 noundef 1280) #11
          to label %491 unwind label %643

491:                                              ; preds = %488
  %492 = load ptr, ptr %440, align 8, !tbaa !78
  %493 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %494 = trunc nuw i8 %493 to i1
  invoke void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280) %490, i32 noundef 1, ptr noundef %492, i1 noundef zeroext %494)
          to label %495 unwind label %649

495:                                              ; preds = %491
  %496 = getelementptr inbounds i8, ptr %0, i64 344
  store ptr %490, ptr %496, align 8, !tbaa !80
  %497 = invoke noalias noundef nonnull dereferenceable(552) ptr @_Znwm(i64 noundef 552) #11
          to label %498 unwind label %643

498:                                              ; preds = %495
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %497, ptr noundef nonnull %441, ptr noundef nonnull %446)
          to label %499 unwind label %651

499:                                              ; preds = %498
  %500 = getelementptr inbounds i8, ptr %0, i64 352
  store ptr %497, ptr %500, align 8, !tbaa !81
  %501 = invoke noalias noundef nonnull dereferenceable(552) ptr @_Znwm(i64 noundef 552) #11
          to label %502 unwind label %643

502:                                              ; preds = %499
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %501, ptr noundef nonnull %451, ptr noundef nonnull %456)
          to label %503 unwind label %653

503:                                              ; preds = %502
  %504 = getelementptr inbounds i8, ptr %0, i64 360
  store ptr %501, ptr %504, align 8, !tbaa !82
  %505 = invoke noalias noundef nonnull dereferenceable(552) ptr @_Znwm(i64 noundef 552) #11
          to label %506 unwind label %643

506:                                              ; preds = %503
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %505, ptr noundef nonnull %461, ptr noundef nonnull %466)
          to label %507 unwind label %655

507:                                              ; preds = %506
  %508 = getelementptr inbounds i8, ptr %0, i64 368
  store ptr %505, ptr %508, align 8, !tbaa !83
  %509 = invoke noalias noundef nonnull dereferenceable(552) ptr @_Znwm(i64 noundef 552) #11
          to label %510 unwind label %643

510:                                              ; preds = %507
  invoke void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552) %509, ptr noundef nonnull %471, ptr noundef nonnull %476)
          to label %511 unwind label %657

511:                                              ; preds = %510
  %512 = getelementptr inbounds i8, ptr %0, i64 376
  store ptr %509, ptr %512, align 8, !tbaa !84
  %513 = invoke noalias noundef nonnull dereferenceable(1264) ptr @_Znwm(i64 noundef 1264) #11
          to label %514 unwind label %643

514:                                              ; preds = %511
  %515 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %516 = getelementptr inbounds i8, ptr %515, i64 152
  %517 = load i32, ptr %516, align 8, !tbaa !85
  %518 = getelementptr inbounds i8, ptr %0, i64 1872
  %519 = load double, ptr %518, align 8, !tbaa !88
  invoke void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264) %513, i32 noundef %517, double noundef %519, i32 noundef 1, double noundef 1.000000e+00, double noundef 1.000000e+00, i32 noundef 0, double noundef 2.200000e-02, ptr noundef nonnull getelementptr inbounds (i8, ptr @g_tp, i64 864))
          to label %520 unwind label %659

520:                                              ; preds = %514
  %521 = getelementptr inbounds i8, ptr %0, i64 384
  store ptr %513, ptr %521, align 8, !tbaa !89
  %522 = load i8, ptr %99, align 1, !tbaa !47, !range !21, !noundef !22
  %523 = trunc nuw i8 %522 to i1
  br i1 %523, label %527, label %524

524:                                              ; preds = %520
  %525 = load i8, ptr %55, align 2, !tbaa !34, !range !21, !noundef !22
  %526 = trunc nuw i8 %525 to i1
  br i1 %526, label %527, label %667

527:                                              ; preds = %524, %520
  %528 = getelementptr inbounds i8, ptr %0, i64 2160
  %529 = load i32, ptr %528, align 8, !tbaa !52
  %530 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 272), align 8, !tbaa !90
  %531 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 280), align 8, !tbaa !91
  %532 = tail call double @llvm.fmuladd.f64(double %530, double 2.000000e+00, double %531)
  %533 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %534 = trunc nuw i8 %533 to i1
  %535 = invoke noundef double @_Z6gate_Cddbbb(double noundef %532, double noundef 0.000000e+00, i1 noundef zeroext %534, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %536 unwind label %661

536:                                              ; preds = %527
  %537 = load i32, ptr %528, align 8, !tbaa !52
  %538 = load double, ptr %50, align 8, !tbaa !63
  %539 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1344), align 8, !tbaa !92
  %540 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1336), align 8, !tbaa !93
  %541 = invoke noalias noundef nonnull dereferenceable(768) ptr @_Znwm(i64 noundef 768) #11
          to label %542 unwind label %661

542:                                              ; preds = %536
  %543 = sitofp i32 %537 to double
  %544 = fmul double %538, %543
  %545 = fmul double %544, %540
  %546 = fmul double %544, %539
  %547 = sitofp i32 %529 to double
  %548 = fmul double %535, %547
  %549 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %550 = trunc nuw i8 %549 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %541, double noundef %548, double noundef %546, double noundef %545, i1 noundef zeroext %550)
          to label %551 unwind label %663

551:                                              ; preds = %542
  %552 = getelementptr inbounds i8, ptr %0, i64 400
  store ptr %541, ptr %552, align 8, !tbaa !94
  %553 = load i8, ptr %55, align 2, !tbaa !34, !range !21, !noundef !22
  %554 = trunc nuw i8 %553 to i1
  br i1 %554, label %693, label %555

555:                                              ; preds = %551
  %556 = getelementptr inbounds i8, ptr %0, i64 2164
  %557 = load i32, ptr %556, align 4, !tbaa !62
  %558 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 272), align 8, !tbaa !90
  %559 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 280), align 8, !tbaa !91
  %560 = tail call double @llvm.fmuladd.f64(double %558, double 2.000000e+00, double %559)
  %561 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %562 = trunc nuw i8 %561 to i1
  %563 = invoke noundef double @_Z6gate_Cddbbb(double noundef %560, double noundef 0.000000e+00, i1 noundef zeroext %562, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %564 unwind label %661

564:                                              ; preds = %555
  %565 = load i32, ptr %556, align 4, !tbaa !62
  %566 = load double, ptr %48, align 8, !tbaa !54
  %567 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1344), align 8, !tbaa !92
  %568 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1336), align 8, !tbaa !93
  %569 = invoke noalias noundef nonnull dereferenceable(768) ptr @_Znwm(i64 noundef 768) #11
          to label %570 unwind label %661

570:                                              ; preds = %564
  %571 = sitofp i32 %565 to double
  %572 = fmul double %566, %571
  %573 = fmul double %572, %568
  %574 = fmul double %572, %567
  %575 = sitofp i32 %557 to double
  %576 = fmul double %563, %575
  %577 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %578 = trunc nuw i8 %577 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %569, double noundef %576, double noundef %574, double noundef %573, i1 noundef zeroext %578)
          to label %.sink.split unwind label %665

579:                                              ; preds = %362
  %580 = landingpad { ptr, i32 }
          cleanup
  br label %913

581:                                              ; preds = %365
  %582 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %364, i64 noundef 1704) #12
  br label %913

583:                                              ; preds = %372
  %584 = landingpad { ptr, i32 }
          cleanup
  br label %913

585:                                              ; preds = %374
  %586 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %373, i64 noundef 1704) #12
  br label %913

587:                                              ; preds = %379
  %588 = landingpad { ptr, i32 }
          cleanup
  br label %913

589:                                              ; preds = %381
  %590 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %380, i64 noundef 1704) #12
  br label %913

591:                                              ; preds = %386
  %592 = landingpad { ptr, i32 }
          cleanup
  br label %913

593:                                              ; preds = %388
  %594 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %387, i64 noundef 1704) #12
  br label %913

595:                                              ; preds = %393
  %596 = landingpad { ptr, i32 }
          cleanup
  br label %913

597:                                              ; preds = %395
  %598 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %394, i64 noundef 1704) #12
  br label %913

599:                                              ; preds = %401
  %600 = landingpad { ptr, i32 }
          cleanup
  br label %913

601:                                              ; preds = %403
  %602 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %402, i64 noundef 1704) #12
  br label %913

603:                                              ; preds = %408
  %604 = landingpad { ptr, i32 }
          cleanup
  br label %913

605:                                              ; preds = %410
  %606 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %409, i64 noundef 1704) #12
  br label %913

607:                                              ; preds = %432, %426, %417
  %608 = landingpad { ptr, i32 }
          cleanup
  br label %913

609:                                              ; preds = %419
  %610 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %418, i64 noundef 1704) #12
  br label %913

611:                                              ; preds = %428
  %612 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %427, i64 noundef 1704) #12
  br label %913

613:                                              ; preds = %435
  %614 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %434, i64 noundef 1704) #12
  br label %913

615:                                              ; preds = %439
  %616 = landingpad { ptr, i32 }
          cleanup
  br label %913

617:                                              ; preds = %442
  %618 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %441, i64 noundef 1280) #12
  br label %913

619:                                              ; preds = %445
  %620 = landingpad { ptr, i32 }
          cleanup
  br label %913

621:                                              ; preds = %447
  %622 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %446, i64 noundef 1280) #12
  br label %913

623:                                              ; preds = %450
  %624 = landingpad { ptr, i32 }
          cleanup
  br label %913

625:                                              ; preds = %452
  %626 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %451, i64 noundef 1280) #12
  br label %913

627:                                              ; preds = %455
  %628 = landingpad { ptr, i32 }
          cleanup
  br label %913

629:                                              ; preds = %457
  %630 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %456, i64 noundef 1280) #12
  br label %913

631:                                              ; preds = %460
  %632 = landingpad { ptr, i32 }
          cleanup
  br label %913

633:                                              ; preds = %462
  %634 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %461, i64 noundef 1280) #12
  br label %913

635:                                              ; preds = %465
  %636 = landingpad { ptr, i32 }
          cleanup
  br label %913

637:                                              ; preds = %467
  %638 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %466, i64 noundef 1280) #12
  br label %913

639:                                              ; preds = %470
  %640 = landingpad { ptr, i32 }
          cleanup
  br label %913

641:                                              ; preds = %472
  %642 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %471, i64 noundef 1280) #12
  br label %913

643:                                              ; preds = %511, %507, %503, %499, %495, %488, %480, %475
  %644 = landingpad { ptr, i32 }
          cleanup
  br label %913

645:                                              ; preds = %477
  %646 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %476, i64 noundef 1280) #12
  br label %913

647:                                              ; preds = %482
  %648 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %481, i64 noundef 1280) #12
  br label %913

649:                                              ; preds = %491
  %650 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %490, i64 noundef 1280) #12
  br label %913

651:                                              ; preds = %498
  %652 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %497, i64 noundef 552) #12
  br label %913

653:                                              ; preds = %502
  %654 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %501, i64 noundef 552) #12
  br label %913

655:                                              ; preds = %506
  %656 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %505, i64 noundef 552) #12
  br label %913

657:                                              ; preds = %510
  %658 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %509, i64 noundef 552) #12
  br label %913

659:                                              ; preds = %514
  %660 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %513, i64 noundef 1264) #12
  br label %913

661:                                              ; preds = %675, %667, %564, %555, %536, %527
  %662 = landingpad { ptr, i32 }
          cleanup
  br label %913

663:                                              ; preds = %542
  %664 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %541, i64 noundef 768) #12
  br label %913

665:                                              ; preds = %570
  %666 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %569, i64 noundef 768) #12
  br label %913

667:                                              ; preds = %524
  %668 = load i32, ptr %183, align 4, !tbaa !53
  %669 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 272), align 8, !tbaa !90
  %670 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 280), align 8, !tbaa !91
  %671 = tail call double @llvm.fmuladd.f64(double %669, double 2.000000e+00, double %670)
  %672 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %673 = trunc nuw i8 %672 to i1
  %674 = invoke noundef double @_Z6gate_Cddbbb(double noundef %671, double noundef 0.000000e+00, i1 noundef zeroext %673, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %675 unwind label %661

675:                                              ; preds = %667
  %676 = load i32, ptr %183, align 4, !tbaa !53
  %677 = load double, ptr %48, align 8, !tbaa !54
  %678 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1344), align 8, !tbaa !92
  %679 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1336), align 8, !tbaa !93
  %680 = invoke noalias noundef nonnull dereferenceable(768) ptr @_Znwm(i64 noundef 768) #11
          to label %681 unwind label %661

681:                                              ; preds = %675
  %682 = uitofp i32 %676 to double
  %683 = fmul double %677, %682
  %684 = fmul double %683, %679
  %685 = fmul double %683, %678
  %686 = uitofp i32 %668 to double
  %687 = fmul double %674, %686
  %688 = load i8, ptr %52, align 8, !tbaa !32, !range !21, !noundef !22
  %689 = trunc nuw i8 %688 to i1
  invoke void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761) %680, double noundef %687, double noundef %685, double noundef %684, i1 noundef zeroext %689)
          to label %.sink.split unwind label %690

690:                                              ; preds = %681
  %691 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %680, i64 noundef 768) #12
  br label %913

.sink.split:                                      ; preds = %681, %570
  %.sink234 = phi ptr [ %569, %570 ], [ %680, %681 ]
  %692 = getelementptr inbounds i8, ptr %0, i64 392
  store ptr %.sink234, ptr %692, align 8, !tbaa !95
  br label %693

693:                                              ; preds = %.sink.split, %551
  %694 = load ptr, ptr %279, align 8, !tbaa !71
  %695 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %694)
  %696 = load i32, ptr %182, align 8, !tbaa !51
  %697 = uitofp i32 %696 to double
  %698 = fmul double %695, %697
  %699 = load i32, ptr %125, align 8, !tbaa !96
  %700 = load i32, ptr %126, align 4, !tbaa !97
  %701 = add nsw i32 %700, %699
  %702 = load i32, ptr %127, align 8, !tbaa !98
  %703 = add nsw i32 %701, %702
  %704 = sitofp i32 %703 to double
  %705 = fmul double %698, %704
  %706 = tail call noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %707 = fdiv double %705, %706
  %708 = invoke noundef double @_ZN3Mat51compute_bit_mux_sa_precharge_sa_mux_wr_drv_wr_mux_hEv(ptr noundef nonnull align 8 dereferenceable(3064) %0)
          to label %709 unwind label %750

709:                                              ; preds = %693
  %710 = load ptr, ptr %521, align 8, !tbaa !89
  %711 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %710)
  %712 = load i32, ptr %183, align 4, !tbaa !53
  %713 = load i32, ptr %40, align 8, !tbaa !25
  %714 = load ptr, ptr %3, align 8, !tbaa !9
  %715 = getelementptr inbounds i8, ptr %714, i64 44
  %716 = load i32, ptr %715, align 4, !tbaa !67
  %717 = mul nsw i32 %716, %713
  %718 = getelementptr inbounds i8, ptr %714, i64 48
  %719 = load i32, ptr %718, align 8, !tbaa !69
  %720 = mul nsw i32 %717, %719
  %721 = udiv i32 %712, %720
  %722 = uitofp i32 %721 to double
  %723 = fmul double %711, %722
  %724 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %725 = fdiv double %723, %724
  %726 = load i32, ptr %125, align 8, !tbaa !96
  %727 = load i32, ptr %126, align 4, !tbaa !97
  %728 = add nsw i32 %727, %726
  %729 = load i32, ptr %128, align 4, !tbaa !99
  %730 = add nsw i32 %728, %729
  %731 = sitofp i32 %730 to double
  %732 = fmul double %725, %731
  %733 = load i8, ptr %99, align 1, !tbaa !47, !range !21, !noundef !22
  %734 = trunc nuw i8 %733 to i1
  %.pre199 = load ptr, ptr %3, align 8, !tbaa !9
  br i1 %734, label %754, label %735

735:                                              ; preds = %709
  %736 = load i8, ptr %.pre199, align 8, !tbaa !100, !range !21, !noundef !22
  %737 = trunc nuw i8 %736 to i1
  br i1 %737, label %738, label %754

738:                                              ; preds = %735
  %739 = getelementptr inbounds i8, ptr %.pre199, i64 4
  %740 = load i32, ptr %739, align 4, !tbaa !101
  %741 = load i32, ptr %68, align 8, !tbaa !38
  %742 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %743 = invoke noundef double @_ZN3Mat26compute_comparators_heightEiid(ptr noundef nonnull align 8 dereferenceable(3064) %0, i32 noundef %740, i32 noundef %741, double noundef %742)
          to label %744 unwind label %752

744:                                              ; preds = %738
  %745 = load i32, ptr %125, align 8, !tbaa !96
  %746 = load i32, ptr %126, align 4, !tbaa !97
  %747 = add nsw i32 %746, %745
  %748 = sitofp i32 %747 to double
  %749 = fmul double %743, %748
  %.pre198 = load ptr, ptr %3, align 8, !tbaa !9
  br label %754

750:                                              ; preds = %693
  %751 = landingpad { ptr, i32 }
          cleanup
  br label %913

752:                                              ; preds = %738
  %753 = landingpad { ptr, i32 }
          cleanup
  br label %913

754:                                              ; preds = %744, %735, %709
  %.pre-phi = phi i32 [ %747, %744 ], [ %728, %735 ], [ %728, %709 ]
  %755 = phi ptr [ %.pre198, %744 ], [ %.pre199, %735 ], [ %.pre199, %709 ]
  %.0126 = phi double [ %749, %744 ], [ 0.000000e+00, %735 ], [ 0.000000e+00, %709 ]
  %756 = getelementptr inbounds i8, ptr %373, i64 292
  %757 = load i32, ptr %756, align 4, !tbaa !102
  %758 = shl nuw i32 1, %757
  %759 = getelementptr inbounds i8, ptr %364, i64 292
  %760 = load i32, ptr %759, align 4, !tbaa !102
  %761 = shl nuw i32 1, %760
  %762 = add nsw i32 %761, %758
  %763 = sitofp i32 %762 to double
  %764 = load double, ptr getelementptr inbounds (i8, ptr @g_tp, i64 1264), align 8, !tbaa !104
  %765 = fmul double %764, %763
  %766 = load i32, ptr %127, align 8, !tbaa !98
  %767 = add nsw i32 %.pre-phi, %766
  %768 = sitofp i32 %767 to double
  %769 = fmul double %765, %768
  %770 = load i32, ptr %73, align 8, !tbaa !43
  %771 = load i32, ptr %80, align 4, !tbaa !46
  %772 = udiv i32 %770, %771
  %773 = uitofp i32 %772 to double
  %774 = fadd double %708, %732
  %775 = fadd double %774, %.0126
  %776 = fmul double %775, %773
  %777 = uitofp i32 %771 to double
  %778 = fmul double %707, %777
  %779 = fcmp ogt double %769, %778
  %. = select i1 %779, double %769, double %778
  %780 = load i32, ptr %40, align 8, !tbaa !25
  %781 = icmp sgt i32 %780, 1
  %782 = uitofp nneg i32 %780 to double
  %783 = fmul double %764, %782
  %784 = sitofp i32 %.pre-phi to double
  %785 = fmul double %783, %784
  %.0125 = select i1 %781, double %785, double 0.000000e+00
  %786 = getelementptr inbounds i8, ptr %755, i64 44
  %787 = load i32, ptr %786, align 4, !tbaa !67
  %788 = icmp sgt i32 %787, 1
  %789 = uitofp nneg i32 %787 to double
  %790 = fmul double %764, %789
  %791 = fmul double %790, %784
  %.0123 = select i1 %788, double %791, double 0.000000e+00
  %792 = getelementptr inbounds i8, ptr %755, i64 48
  %793 = load i32, ptr %792, align 8, !tbaa !69
  %794 = icmp sgt i32 %793, 1
  %795 = uitofp nneg i32 %793 to double
  %796 = fmul double %764, %795
  %797 = tail call double @llvm.fmuladd.f64(double %796, double %784, double %.0123)
  %.1124 = select i1 %794, double %797, double %.0123
  %798 = load ptr, ptr @g_ip, align 8, !tbaa !5
  %799 = getelementptr inbounds i8, ptr %798, i64 92
  %800 = load i32, ptr %799, align 4, !tbaa !105
  %.not = icmp eq i32 %800, 0
  br i1 %.not, label %801, label %837

801:                                              ; preds = %754
  %802 = load i8, ptr %99, align 1, !tbaa !47, !range !21, !noundef !22
  %803 = trunc nuw i8 %802 to i1
  %.phi.trans.insert201 = getelementptr inbounds i8, ptr %755, i64 52
  %.pre202 = load i32, ptr %.phi.trans.insert201, align 4, !tbaa !106
  %.phi.trans.insert203 = getelementptr inbounds i8, ptr %755, i64 108
  %.pre204 = load i32, ptr %.phi.trans.insert203, align 4, !tbaa !74
  br i1 %803, label %._crit_edge200, label %804

._crit_edge200:                                   ; preds = %801
  %.phi.trans.insert205 = getelementptr inbounds i8, ptr %755, i64 68
  %.pre206 = load i32, ptr %.phi.trans.insert205, align 4, !tbaa !107
  %.phi.trans.insert207 = getelementptr inbounds i8, ptr %755, i64 72
  %.pre208 = load i32, ptr %.phi.trans.insert207, align 8, !tbaa !38
  %.pre209 = add nsw i32 %.pre204, %.pre202
  %.pre211 = add nsw i32 %.pre208, %.pre206
  %.pre213 = udiv i32 %.pre211, %771
  %.pre215 = add i32 %.pre209, %.pre213
  %.pre217 = uitofp i32 %.pre215 to double
  %.pre219 = fmul double %764, %.pre217
  br label %818

804:                                              ; preds = %801
  %805 = add nsw i32 %.pre204, %.pre202
  %806 = getelementptr inbounds i8, ptr %755, i64 68
  %807 = load i32, ptr %806, align 4, !tbaa !107
  %808 = getelementptr inbounds i8, ptr %755, i64 72
  %809 = load i32, ptr %808, align 8, !tbaa !38
  %810 = add nsw i32 %809, %807
  %811 = udiv i32 %810, %771
  %812 = add i32 %805, %811
  %813 = uitofp i32 %812 to double
  %814 = fmul double %764, %813
  %815 = fmul double %814, %768
  %816 = load i8, ptr %55, align 2, !tbaa !34, !range !21, !noundef !22
  %817 = trunc nuw i8 %816 to i1
  br i1 %817, label %818, label %831

818:                                              ; preds = %._crit_edge200, %804
  %.pre-phi220 = phi double [ %.pre219, %._crit_edge200 ], [ %814, %804 ]
  %819 = getelementptr inbounds i8, ptr %755, i64 84
  %820 = load i32, ptr %819, align 4, !tbaa !108
  %821 = getelementptr inbounds i8, ptr %755, i64 88
  %822 = load i32, ptr %821, align 8, !tbaa !40
  %823 = add nsw i32 %822, %820
  %824 = udiv i32 %823, %771
  %825 = uitofp i32 %824 to double
  %826 = fmul double %764, %825
  %827 = load i32, ptr %128, align 4, !tbaa !99
  %828 = sitofp i32 %827 to double
  %829 = fmul double %826, %828
  %830 = tail call double @llvm.fmuladd.f64(double %.pre-phi220, double %768, double %829)
  br label %831

831:                                              ; preds = %818, %804
  %.0118 = phi double [ %830, %818 ], [ %815, %804 ]
  %832 = fadd double %708, %.0126
  %833 = fadd double %732, %832
  %834 = tail call double @llvm.fmuladd.f64(double %833, double %773, double %.0118)
  %835 = fadd double %.0125, %834
  %836 = fadd double %.1124, %835
  br label %837

837:                                              ; preds = %831, %754
  %.0120 = phi double [ %776, %754 ], [ %836, %831 ]
  %838 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %441)
  %839 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %451)
  %840 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %461)
  %841 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %471)
  %842 = load ptr, ptr %489, align 8, !tbaa !79
  %843 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %842)
  %844 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %446)
  %845 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %456)
  %846 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %466)
  %847 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %476)
  %848 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %364)
  %849 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %380)
  %850 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %394)
  %851 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %409)
  %852 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %373)
  %853 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %387)
  %854 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %402)
  %855 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %418)
  %856 = load ptr, ptr %289, align 8, !tbaa !72
  %857 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %856)
  %858 = load ptr, ptr %304, align 8, !tbaa !75
  %859 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %858)
  %860 = load ptr, ptr %316, align 8, !tbaa !76
  %861 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %860)
  %862 = load i32, ptr %73, align 8, !tbaa !43
  %863 = load i32, ptr %80, align 4, !tbaa !46
  %.not167 = icmp ugt i32 %863, %862
  br i1 %.not167, label %864, label %865

864:                                              ; preds = %837
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 396, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

865:                                              ; preds = %837
  %866 = udiv i32 %862, %863
  %867 = fadd double %838, %839
  %868 = fadd double %867, %840
  %869 = fadd double %868, %841
  %870 = fadd double %869, %843
  %871 = fadd double %870, %844
  %872 = fadd double %871, %845
  %873 = fadd double %872, %846
  %874 = fadd double %873, %847
  %875 = fadd double %874, %848
  %876 = fadd double %875, %849
  %877 = fadd double %876, %850
  %878 = fadd double %877, %851
  %879 = fadd double %878, %852
  %880 = fadd double %879, %853
  %881 = fadd double %880, %854
  %882 = fadd double %881, %855
  %883 = fadd double %882, %857
  %884 = fadd double %883, %859
  %885 = fadd double %884, %861
  %886 = load i32, ptr %125, align 8, !tbaa !96
  %887 = load i32, ptr %126, align 4, !tbaa !97
  %888 = add nsw i32 %887, %886
  %889 = load i32, ptr %127, align 8, !tbaa !98
  %890 = add nsw i32 %888, %889
  %891 = sitofp i32 %890 to double
  %892 = fmul double %885, %891
  %893 = uitofp i32 %866 to double
  %894 = load double, ptr %518, align 8, !tbaa !88
  %895 = tail call double @llvm.fmuladd.f64(double %893, double %894, double %.0120)
  %896 = getelementptr inbounds i8, ptr %0, i64 8
  store double %895, ptr %896, align 8, !tbaa !88
  %897 = uitofp i32 %863 to double
  %898 = tail call noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %899 = tail call double @llvm.fmuladd.f64(double %897, double %898, double %.)
  %900 = load double, ptr %896, align 8, !tbaa !88
  %901 = tail call double @llvm.fmuladd.f64(double %900, double %899, double %892)
  %902 = fdiv double %901, %900
  store double %902, ptr %0, align 8, !tbaa !109
  %903 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %904 = tail call noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24) %0)
  %905 = load double, ptr %896, align 8, !tbaa !88
  %906 = fcmp ogt double %905, 0.000000e+00
  br i1 %906, label %908, label %907

907:                                              ; preds = %865
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 415, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

908:                                              ; preds = %865
  %909 = load double, ptr %0, align 8, !tbaa !109
  %910 = fcmp ogt double %909, 0.000000e+00
  br i1 %910, label %912, label %911

911:                                              ; preds = %908
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 416, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3MatC2ERK16DynamicParameter) #10
  unreachable

912:                                              ; preds = %908
  ret void

913:                                              ; preds = %210, %334, %336, %338, %340, %579, %581, %587, %589, %595, %597, %603, %605, %615, %617, %623, %625, %631, %633, %639, %641, %661, %663, %665, %690, %752, %750, %659, %657, %655, %653, %651, %649, %647, %645, %643, %637, %635, %629, %627, %621, %619, %613, %611, %609, %607, %601, %599, %593, %591, %585, %583, %360, %90
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %91, %90 ], [ %341, %340 ], [ %211, %210 ], [ %339, %338 ], [ %337, %336 ], [ %335, %334 ], [ %361, %360 ], [ %582, %581 ], [ %580, %579 ], [ %586, %585 ], [ %584, %583 ], [ %590, %589 ], [ %588, %587 ], [ %594, %593 ], [ %592, %591 ], [ %598, %597 ], [ %596, %595 ], [ %602, %601 ], [ %600, %599 ], [ %606, %605 ], [ %604, %603 ], [ %614, %613 ], [ %608, %607 ], [ %612, %611 ], [ %610, %609 ], [ %618, %617 ], [ %616, %615 ], [ %622, %621 ], [ %620, %619 ], [ %626, %625 ], [ %624, %623 ], [ %630, %629 ], [ %628, %627 ], [ %634, %633 ], [ %632, %631 ], [ %638, %637 ], [ %636, %635 ], [ %642, %641 ], [ %640, %639 ], [ %660, %659 ], [ %644, %643 ], [ %658, %657 ], [ %656, %655 ], [ %654, %653 ], [ %652, %651 ], [ %650, %649 ], [ %648, %647 ], [ %646, %645 ], [ %666, %665 ], [ %662, %661 ], [ %664, %663 ], [ %691, %690 ], [ %753, %752 ], [ %751, %750 ]
  tail call void @_ZN8SubarrayD1Ev(ptr noundef nonnull align 8 dereferenceable(424) %27) #13
  br label %914

914:                                              ; preds = %913, %88
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %913 ], [ %89, %88 ]
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280) %0) #13
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare void @_ZN9ComponentC2Ev(ptr noundef nonnull align 8 dereferenceable(280)) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8powerDefC2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

declare void @_ZN8SubarrayC1ERK16DynamicParameterb(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(265), i1 noundef zeroext) unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_wEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #6

declare void @_ZN7DecoderC1EibddbbbRK4Area(ptr noundef nonnull align 8 dereferenceable(656), i32 noundef, i1 noundef zeroext, double noundef, double noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #7

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

declare void @_ZN9PredecBlkC1EiP7Decoderddibb(ptr noundef nonnull align 8 dereferenceable(1697), i32 noundef, ptr noundef, double noundef, double noundef, i32 noundef, i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #1

declare void @_ZN12PredecBlkDrvC1EiP9PredecBlkb(ptr noundef nonnull align 8 dereferenceable(1280), i32 noundef, ptr noundef, i1 noundef zeroext) unnamed_addr #1

declare void @_ZN6PredecC1EP12PredecBlkDrvS1_(ptr noundef nonnull align 8 dereferenceable(552), ptr noundef, ptr noundef) unnamed_addr #1

declare void @_ZN4WireC1E9Wire_typedidd14Wire_placementdPN19TechnologyParameter10DeviceTypeE(ptr noundef nonnull align 8 dereferenceable(1264), i32 noundef, double noundef, i32 noundef, double noundef, double noundef, i32 noundef, double noundef, ptr noundef) unnamed_addr #1

declare void @_ZN6DriverC1Edddb(ptr noundef nonnull align 8 dereferenceable(761), double noundef, double noundef, double noundef, i1 noundef zeroext) unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area8get_areaEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK4Area5get_hEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN3Mat51compute_bit_mux_sa_precharge_sa_mux_wr_drv_wr_mux_hEv(ptr noundef nonnull align 8 dereferenceable(3064)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN3Mat26compute_comparators_heightEiid(ptr noundef nonnull align 8 dereferenceable(3064), i32 noundef, i32 noundef, double noundef) local_unnamed_addr #0 align 2

; Function Attrs: nounwind
declare void @_ZN8SubarrayD1Ev(ptr noundef nonnull align 8 dereferenceable(424)) unnamed_addr #8

; Function Attrs: nounwind
declare void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280)) unnamed_addr #8

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 280}
!10 = !{!"_ZTS3Mat", !11, i64 0, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !6, i64 312, !6, i64 320, !6, i64 328, !6, i64 336, !6, i64 344, !6, i64 352, !6, i64 360, !6, i64 368, !6, i64 376, !6, i64 384, !6, i64 392, !6, i64 400, !6, i64 408, !6, i64 416, !6, i64 424, !6, i64 432, !14, i64 440, !14, i64 560, !14, i64 680, !14, i64 800, !14, i64 920, !14, i64 1040, !14, i64 1160, !14, i64 1280, !14, i64 1400, !14, i64 1520, !14, i64 1640, !13, i64 1760, !13, i64 1768, !13, i64 1776, !13, i64 1784, !13, i64 1792, !13, i64 1800, !13, i64 1808, !13, i64 1816, !13, i64 1824, !13, i64 1832, !13, i64 1840, !13, i64 1848, !13, i64 1856, !16, i64 1864, !14, i64 2288, !14, i64 2408, !14, i64 2528, !13, i64 2648, !17, i64 2656, !17, i64 2660, !13, i64 2664, !12, i64 2672, !12, i64 2696, !18, i64 2720, !18, i64 2721, !18, i64 2722, !18, i64 2723, !17, i64 2724, !14, i64 2728, !13, i64 2848, !13, i64 2856, !13, i64 2864, !13, i64 2872, !13, i64 2880, !13, i64 2888, !14, i64 2896, !17, i64 3016, !17, i64 3020, !17, i64 3024, !17, i64 3028, !13, i64 3032, !17, i64 3040, !17, i64 3044, !17, i64 3048, !17, i64 3052, !17, i64 3056, !17, i64 3060}
!11 = !{!"_ZTS9Component", !12, i64 0, !14, i64 24, !14, i64 144, !13, i64 264, !13, i64 272}
!12 = !{!"_ZTS4Area", !13, i64 0, !13, i64 8, !13, i64 16}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTS8powerDef", !15, i64 0, !15, i64 40, !15, i64 80}
!15 = !{!"_ZTS15powerComponents", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32}
!16 = !{!"_ZTS8Subarray", !11, i64 0, !6, i64 280, !17, i64 288, !17, i64 292, !17, i64 296, !17, i64 300, !12, i64 304, !12, i64 328, !18, i64 352, !13, i64 360, !13, i64 368, !13, i64 376, !13, i64 384, !13, i64 392, !13, i64 400, !13, i64 408, !13, i64 416}
!17 = !{!"int", !7, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = !{!20, !18, i64 3}
!20 = !{!"_ZTS16DynamicParameter", !18, i64 0, !18, i64 1, !18, i64 2, !18, i64 3, !17, i64 4, !17, i64 8, !17, i64 12, !13, i64 16, !17, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !17, i64 40, !17, i64 44, !17, i64 48, !17, i64 52, !17, i64 56, !17, i64 60, !17, i64 64, !17, i64 68, !17, i64 72, !17, i64 76, !17, i64 80, !17, i64 84, !17, i64 88, !17, i64 92, !17, i64 96, !17, i64 100, !17, i64 104, !17, i64 108, !17, i64 112, !17, i64 116, !18, i64 120, !13, i64 128, !17, i64 136, !17, i64 140, !17, i64 144, !17, i64 148, !17, i64 152, !17, i64 156, !17, i64 160, !17, i64 164, !17, i64 168, !13, i64 176, !17, i64 184, !17, i64 188, !17, i64 192, !17, i64 196, !17, i64 200, !17, i64 204, !17, i64 208, !18, i64 212, !12, i64 216, !12, i64 240, !18, i64 264}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!10, !13, i64 2648}
!24 = !{!20, !17, i64 36}
!25 = !{!10, !17, i64 2656}
!26 = !{!20, !17, i64 112}
!27 = !{!10, !17, i64 2660}
!28 = !{!10, !13, i64 2664}
!29 = !{i64 0, i64 8, !30, i64 8, i64 8, !30, i64 16, i64 8, !30}
!30 = !{!13, !13, i64 0}
!31 = !{!20, !18, i64 120}
!32 = !{!10, !18, i64 2720}
!33 = !{!20, !18, i64 2}
!34 = !{!10, !18, i64 2722}
!35 = !{!20, !17, i64 12}
!36 = !{!10, !17, i64 2724}
!37 = !{!10, !13, i64 2888}
!38 = !{!20, !17, i64 72}
!39 = !{!10, !17, i64 3016}
!40 = !{!20, !17, i64 88}
!41 = !{!10, !17, i64 3020}
!42 = !{!20, !17, i64 8}
!43 = !{!10, !17, i64 3040}
!44 = !{!20, !17, i64 24}
!45 = !{!20, !17, i64 160}
!46 = !{!10, !17, i64 3044}
!47 = !{!10, !18, i64 2721}
!48 = !{!10, !18, i64 2723}
!49 = !{!20, !17, i64 184}
!50 = !{!17, !17, i64 0}
!51 = !{!10, !17, i64 2152}
!52 = !{!10, !17, i64 2160}
!53 = !{!10, !17, i64 2156}
!54 = !{!10, !13, i64 2672}
!55 = !{!56, !13, i64 1208}
!56 = !{!"_ZTS19TechnologyParameter", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !13, i64 208, !13, i64 216, !13, i64 224, !13, i64 232, !13, i64 240, !13, i64 248, !13, i64 256, !13, i64 264, !13, i64 272, !13, i64 280, !13, i64 288, !13, i64 296, !13, i64 304, !13, i64 312, !13, i64 320, !13, i64 328, !13, i64 336, !13, i64 344, !57, i64 352, !58, i64 360, !58, i64 528, !58, i64 696, !58, i64 864, !58, i64 1032, !59, i64 1200, !59, i64 1264, !59, i64 1328, !60, i64 1392, !61, i64 1416, !61, i64 1464, !61, i64 1512}
!57 = !{!"long", !7, i64 0}
!58 = !{!"_ZTSN19TechnologyParameter10DeviceTypeE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160}
!59 = !{!"_ZTSN19TechnologyParameter16InterconnectTypeE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56}
!60 = !{!"_ZTSN19TechnologyParameter13ScalingFactorE", !13, i64 0, !13, i64 8, !13, i64 16}
!61 = !{!"_ZTSN19TechnologyParameter10MemoryTypeE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40}
!62 = !{!10, !17, i64 2164}
!63 = !{!10, !13, i64 2696}
!64 = !{!56, !13, i64 1272}
!65 = !{!56, !13, i64 256}
!66 = !{!56, !13, i64 1280}
!67 = !{!20, !17, i64 44}
!68 = !{!56, !13, i64 264}
!69 = !{!20, !17, i64 48}
!70 = !{!10, !13, i64 2224}
!71 = !{!10, !6, i64 288}
!72 = !{!10, !6, i64 296}
!73 = !{!20, !17, i64 40}
!74 = !{!20, !17, i64 108}
!75 = !{!10, !6, i64 304}
!76 = !{!10, !6, i64 312}
!77 = !{!10, !6, i64 320}
!78 = !{!10, !6, i64 328}
!79 = !{!10, !6, i64 336}
!80 = !{!10, !6, i64 344}
!81 = !{!10, !6, i64 352}
!82 = !{!10, !6, i64 360}
!83 = !{!10, !6, i64 368}
!84 = !{!10, !6, i64 376}
!85 = !{!86, !87, i64 152}
!86 = !{!"_ZTS14InputParameter", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !18, i64 20, !17, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !17, i64 40, !17, i64 44, !13, i64 48, !13, i64 56, !17, i64 64, !17, i64 68, !17, i64 72, !17, i64 76, !17, i64 80, !18, i64 84, !18, i64 85, !18, i64 86, !18, i64 87, !18, i64 88, !17, i64 92, !17, i64 96, !17, i64 100, !17, i64 104, !17, i64 108, !17, i64 112, !17, i64 116, !17, i64 120, !17, i64 124, !17, i64 128, !17, i64 132, !17, i64 136, !17, i64 140, !17, i64 144, !17, i64 148, !87, i64 152, !17, i64 156, !18, i64 160, !17, i64 164, !17, i64 168, !17, i64 172, !17, i64 176, !17, i64 180, !17, i64 184, !17, i64 188, !18, i64 192, !17, i64 196, !17, i64 200, !17, i64 204, !17, i64 208, !17, i64 212, !17, i64 216, !17, i64 220, !17, i64 224, !17, i64 228, !17, i64 232, !17, i64 236, !17, i64 240, !17, i64 244, !17, i64 248, !17, i64 252, !17, i64 256, !17, i64 260, !17, i64 264, !17, i64 268, !17, i64 272, !17, i64 276, !17, i64 280, !17, i64 284, !17, i64 288, !17, i64 292, !17, i64 296, !18, i64 300, !17, i64 304, !17, i64 308, !17, i64 312, !18, i64 316, !18, i64 317, !17, i64 320, !17, i64 324, !18, i64 328, !13, i64 336, !13, i64 344, !18, i64 352, !17, i64 356, !17, i64 360, !18, i64 364}
!87 = !{!"_ZTS9Wire_type", !7, i64 0}
!88 = !{!11, !13, i64 8}
!89 = !{!10, !6, i64 384}
!90 = !{!56, !13, i64 272}
!91 = !{!56, !13, i64 280}
!92 = !{!56, !13, i64 1344}
!93 = !{!56, !13, i64 1336}
!94 = !{!10, !6, i64 400}
!95 = !{!10, !6, i64 392}
!96 = !{!10, !17, i64 3048}
!97 = !{!10, !17, i64 3052}
!98 = !{!10, !17, i64 3056}
!99 = !{!10, !17, i64 3060}
!100 = !{!20, !18, i64 0}
!101 = !{!20, !17, i64 4}
!102 = !{!103, !17, i64 292}
!103 = !{!"_ZTS9PredecBlk", !11, i64 0, !6, i64 280, !18, i64 288, !17, i64 292, !13, i64 296, !13, i64 304, !17, i64 312, !17, i64 316, !18, i64 320, !17, i64 324, !17, i64 328, !17, i64 332, !17, i64 336, !17, i64 340, !17, i64 344, !17, i64 348, !17, i64 352, !17, i64 356, !7, i64 360, !7, i64 520, !7, i64 680, !7, i64 840, !7, i64 1000, !7, i64 1160, !13, i64 1320, !13, i64 1328, !14, i64 1336, !14, i64 1456, !14, i64 1576, !18, i64 1696}
!104 = !{!56, !13, i64 1264}
!105 = !{!86, !17, i64 92}
!106 = !{!20, !17, i64 52}
!107 = !{!20, !17, i64 68}
!108 = !{!20, !17, i64 84}
!109 = !{!11, !13, i64 0}


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