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

; 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.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.Predec = type { %class.Component, ptr, ptr, ptr, ptr, %class.powerDef, %class.powerDef }

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN3MatD2Ev(ptr noundef nonnull align 8 dereferenceable(3064) %0) unnamed_addr #2 align 2 {
  %2 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %3 = load ptr, ptr %2, align 8
  %4 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 2
  %5 = load ptr, ptr %4, align 8, !tbaa !9
  %6 = icmp eq ptr %5, null
  br i1 %6, label %8, label %7

7:                                                ; preds = %1
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %5) #3
  call void @_ZdlPvm(ptr noundef %5, i64 noundef 656) #4
  br label %8

8:                                                ; preds = %7, %1
  %9 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 3
  %10 = load ptr, ptr %9, align 8, !tbaa !19
  %11 = icmp eq ptr %10, null
  br i1 %11, label %13, label %12

12:                                               ; preds = %8
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %10) #3
  call void @_ZdlPvm(ptr noundef %10, i64 noundef 656) #4
  br label %13

13:                                               ; preds = %12, %8
  %14 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 4
  %15 = load ptr, ptr %14, align 8, !tbaa !20
  %16 = icmp eq ptr %15, null
  br i1 %16, label %18, label %17

17:                                               ; preds = %13
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %15) #3
  call void @_ZdlPvm(ptr noundef %15, i64 noundef 656) #4
  br label %18

18:                                               ; preds = %17, %13
  %19 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 5
  %20 = load ptr, ptr %19, align 8, !tbaa !21
  %21 = icmp eq ptr %20, null
  br i1 %21, label %23, label %22

22:                                               ; preds = %18
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %20) #3
  call void @_ZdlPvm(ptr noundef %20, i64 noundef 656) #4
  br label %23

23:                                               ; preds = %22, %18
  %24 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 10
  %25 = load ptr, ptr %24, align 8, !tbaa !22
  %26 = getelementptr inbounds %class.Predec, ptr %25, i32 0, i32 1
  %27 = load ptr, ptr %26, align 8, !tbaa !23
  %28 = icmp eq ptr %27, null
  br i1 %28, label %30, label %29

29:                                               ; preds = %23
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %27) #3
  call void @_ZdlPvm(ptr noundef %27, i64 noundef 1704) #4
  br label %30

30:                                               ; preds = %29, %23
  %31 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 10
  %32 = load ptr, ptr %31, align 8, !tbaa !22
  %33 = getelementptr inbounds %class.Predec, ptr %32, i32 0, i32 2
  %34 = load ptr, ptr %33, align 8, !tbaa !25
  %35 = icmp eq ptr %34, null
  br i1 %35, label %37, label %36

36:                                               ; preds = %30
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %34) #3
  call void @_ZdlPvm(ptr noundef %34, i64 noundef 1704) #4
  br label %37

37:                                               ; preds = %36, %30
  %38 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 11
  %39 = load ptr, ptr %38, align 8, !tbaa !26
  %40 = getelementptr inbounds %class.Predec, ptr %39, i32 0, i32 1
  %41 = load ptr, ptr %40, align 8, !tbaa !23
  %42 = icmp eq ptr %41, null
  br i1 %42, label %44, label %43

43:                                               ; preds = %37
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %41) #3
  call void @_ZdlPvm(ptr noundef %41, i64 noundef 1704) #4
  br label %44

44:                                               ; preds = %43, %37
  %45 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 11
  %46 = load ptr, ptr %45, align 8, !tbaa !26
  %47 = getelementptr inbounds %class.Predec, ptr %46, i32 0, i32 2
  %48 = load ptr, ptr %47, align 8, !tbaa !25
  %49 = icmp eq ptr %48, null
  br i1 %49, label %51, label %50

50:                                               ; preds = %44
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %48) #3
  call void @_ZdlPvm(ptr noundef %48, i64 noundef 1704) #4
  br label %51

51:                                               ; preds = %50, %44
  %52 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 12
  %53 = load ptr, ptr %52, align 8, !tbaa !27
  %54 = getelementptr inbounds %class.Predec, ptr %53, i32 0, i32 1
  %55 = load ptr, ptr %54, align 8, !tbaa !23
  %56 = icmp eq ptr %55, null
  br i1 %56, label %58, label %57

57:                                               ; preds = %51
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %55) #3
  call void @_ZdlPvm(ptr noundef %55, i64 noundef 1704) #4
  br label %58

58:                                               ; preds = %57, %51
  %59 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 12
  %60 = load ptr, ptr %59, align 8, !tbaa !27
  %61 = getelementptr inbounds %class.Predec, ptr %60, i32 0, i32 2
  %62 = load ptr, ptr %61, align 8, !tbaa !25
  %63 = icmp eq ptr %62, null
  br i1 %63, label %65, label %64

64:                                               ; preds = %58
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %62) #3
  call void @_ZdlPvm(ptr noundef %62, i64 noundef 1704) #4
  br label %65

65:                                               ; preds = %64, %58
  %66 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 13
  %67 = load ptr, ptr %66, align 8, !tbaa !28
  %68 = getelementptr inbounds %class.Predec, ptr %67, i32 0, i32 1
  %69 = load ptr, ptr %68, align 8, !tbaa !23
  %70 = icmp eq ptr %69, null
  br i1 %70, label %72, label %71

71:                                               ; preds = %65
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %69) #3
  call void @_ZdlPvm(ptr noundef %69, i64 noundef 1704) #4
  br label %72

72:                                               ; preds = %71, %65
  %73 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 13
  %74 = load ptr, ptr %73, align 8, !tbaa !28
  %75 = getelementptr inbounds %class.Predec, ptr %74, i32 0, i32 2
  %76 = load ptr, ptr %75, align 8, !tbaa !25
  %77 = icmp eq ptr %76, null
  br i1 %77, label %79, label %78

78:                                               ; preds = %72
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %76) #3
  call void @_ZdlPvm(ptr noundef %76, i64 noundef 1704) #4
  br label %79

79:                                               ; preds = %78, %72
  %80 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 6
  %81 = load ptr, ptr %80, align 8, !tbaa !29
  %82 = icmp eq ptr %81, null
  br i1 %82, label %84, label %83

83:                                               ; preds = %79
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %81) #3
  call void @_ZdlPvm(ptr noundef %81, i64 noundef 1704) #4
  br label %84

84:                                               ; preds = %83, %79
  %85 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 7
  %86 = load ptr, ptr %85, align 8, !tbaa !30
  %87 = icmp eq ptr %86, null
  br i1 %87, label %89, label %88

88:                                               ; preds = %84
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %86) #3
  call void @_ZdlPvm(ptr noundef %86, i64 noundef 1704) #4
  br label %89

89:                                               ; preds = %88, %84
  %90 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 10
  %91 = load ptr, ptr %90, align 8, !tbaa !22
  %92 = getelementptr inbounds %class.Predec, ptr %91, i32 0, i32 3
  %93 = load ptr, ptr %92, align 8, !tbaa !31
  %94 = icmp eq ptr %93, null
  br i1 %94, label %96, label %95

95:                                               ; preds = %89
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %93) #3
  call void @_ZdlPvm(ptr noundef %93, i64 noundef 1280) #4
  br label %96

96:                                               ; preds = %95, %89
  %97 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 10
  %98 = load ptr, ptr %97, align 8, !tbaa !22
  %99 = getelementptr inbounds %class.Predec, ptr %98, i32 0, i32 4
  %100 = load ptr, ptr %99, align 8, !tbaa !32
  %101 = icmp eq ptr %100, null
  br i1 %101, label %103, label %102

102:                                              ; preds = %96
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %100) #3
  call void @_ZdlPvm(ptr noundef %100, i64 noundef 1280) #4
  br label %103

103:                                              ; preds = %102, %96
  %104 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 11
  %105 = load ptr, ptr %104, align 8, !tbaa !26
  %106 = getelementptr inbounds %class.Predec, ptr %105, i32 0, i32 3
  %107 = load ptr, ptr %106, align 8, !tbaa !31
  %108 = icmp eq ptr %107, null
  br i1 %108, label %110, label %109

109:                                              ; preds = %103
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %107) #3
  call void @_ZdlPvm(ptr noundef %107, i64 noundef 1280) #4
  br label %110

110:                                              ; preds = %109, %103
  %111 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 11
  %112 = load ptr, ptr %111, align 8, !tbaa !26
  %113 = getelementptr inbounds %class.Predec, ptr %112, i32 0, i32 4
  %114 = load ptr, ptr %113, align 8, !tbaa !32
  %115 = icmp eq ptr %114, null
  br i1 %115, label %117, label %116

116:                                              ; preds = %110
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %114) #3
  call void @_ZdlPvm(ptr noundef %114, i64 noundef 1280) #4
  br label %117

117:                                              ; preds = %116, %110
  %118 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 12
  %119 = load ptr, ptr %118, align 8, !tbaa !27
  %120 = getelementptr inbounds %class.Predec, ptr %119, i32 0, i32 3
  %121 = load ptr, ptr %120, align 8, !tbaa !31
  %122 = icmp eq ptr %121, null
  br i1 %122, label %124, label %123

123:                                              ; preds = %117
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %121) #3
  call void @_ZdlPvm(ptr noundef %121, i64 noundef 1280) #4
  br label %124

124:                                              ; preds = %123, %117
  %125 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 12
  %126 = load ptr, ptr %125, align 8, !tbaa !27
  %127 = getelementptr inbounds %class.Predec, ptr %126, i32 0, i32 4
  %128 = load ptr, ptr %127, align 8, !tbaa !32
  %129 = icmp eq ptr %128, null
  br i1 %129, label %131, label %130

130:                                              ; preds = %124
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %128) #3
  call void @_ZdlPvm(ptr noundef %128, i64 noundef 1280) #4
  br label %131

131:                                              ; preds = %130, %124
  %132 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 13
  %133 = load ptr, ptr %132, align 8, !tbaa !28
  %134 = getelementptr inbounds %class.Predec, ptr %133, i32 0, i32 3
  %135 = load ptr, ptr %134, align 8, !tbaa !31
  %136 = icmp eq ptr %135, null
  br i1 %136, label %138, label %137

137:                                              ; preds = %131
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %135) #3
  call void @_ZdlPvm(ptr noundef %135, i64 noundef 1280) #4
  br label %138

138:                                              ; preds = %137, %131
  %139 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 13
  %140 = load ptr, ptr %139, align 8, !tbaa !28
  %141 = getelementptr inbounds %class.Predec, ptr %140, i32 0, i32 4
  %142 = load ptr, ptr %141, align 8, !tbaa !32
  %143 = icmp eq ptr %142, null
  br i1 %143, label %145, label %144

144:                                              ; preds = %138
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %142) #3
  call void @_ZdlPvm(ptr noundef %142, i64 noundef 1280) #4
  br label %145

145:                                              ; preds = %144, %138
  %146 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 8
  %147 = load ptr, ptr %146, align 8, !tbaa !33
  %148 = icmp eq ptr %147, null
  br i1 %148, label %150, label %149

149:                                              ; preds = %145
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %147) #3
  call void @_ZdlPvm(ptr noundef %147, i64 noundef 1280) #4
  br label %150

150:                                              ; preds = %149, %145
  %151 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 9
  %152 = load ptr, ptr %151, align 8, !tbaa !34
  %153 = icmp eq ptr %152, null
  br i1 %153, label %155, label %154

154:                                              ; preds = %150
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %152) #3
  call void @_ZdlPvm(ptr noundef %152, i64 noundef 1280) #4
  br label %155

155:                                              ; preds = %154, %150
  %156 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 10
  %157 = load ptr, ptr %156, align 8, !tbaa !22
  %158 = icmp eq ptr %157, null
  br i1 %158, label %160, label %159

159:                                              ; preds = %155
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %157) #3
  call void @_ZdlPvm(ptr noundef %157, i64 noundef 552) #4
  br label %160

160:                                              ; preds = %159, %155
  %161 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 11
  %162 = load ptr, ptr %161, align 8, !tbaa !26
  %163 = icmp eq ptr %162, null
  br i1 %163, label %165, label %164

164:                                              ; preds = %160
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %162) #3
  call void @_ZdlPvm(ptr noundef %162, i64 noundef 552) #4
  br label %165

165:                                              ; preds = %164, %160
  %166 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 12
  %167 = load ptr, ptr %166, align 8, !tbaa !27
  %168 = icmp eq ptr %167, null
  br i1 %168, label %170, label %169

169:                                              ; preds = %165
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %167) #3
  call void @_ZdlPvm(ptr noundef %167, i64 noundef 552) #4
  br label %170

170:                                              ; preds = %169, %165
  %171 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 13
  %172 = load ptr, ptr %171, align 8, !tbaa !28
  %173 = icmp eq ptr %172, null
  br i1 %173, label %175, label %174

174:                                              ; preds = %170
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %172) #3
  call void @_ZdlPvm(ptr noundef %172, i64 noundef 552) #4
  br label %175

175:                                              ; preds = %174, %170
  %176 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 14
  %177 = load ptr, ptr %176, align 8, !tbaa !35
  %178 = icmp eq ptr %177, null
  br i1 %178, label %180, label %179

179:                                              ; preds = %175
  call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %177) #3
  call void @_ZdlPvm(ptr noundef %177, i64 noundef 1264) #4
  br label %180

180:                                              ; preds = %179, %175
  %181 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 57
  %182 = load i8, ptr %181, align 2, !tbaa !36, !range !37, !noundef !38
  %183 = trunc i8 %182 to i1
  br i1 %183, label %190, label %184

184:                                              ; preds = %180
  %185 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 15
  %186 = load ptr, ptr %185, align 8, !tbaa !39
  %187 = icmp eq ptr %186, null
  br i1 %187, label %189, label %188

188:                                              ; preds = %184
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %186) #3
  call void @_ZdlPvm(ptr noundef %186, i64 noundef 768) #4
  br label %189

189:                                              ; preds = %188, %184
  br label %190

190:                                              ; preds = %189, %180
  %191 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 56
  %192 = load i8, ptr %191, align 1, !tbaa !40, !range !37, !noundef !38
  %193 = trunc i8 %192 to i1
  br i1 %193, label %198, label %194

194:                                              ; preds = %190
  %195 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 57
  %196 = load i8, ptr %195, align 2, !tbaa !36, !range !37, !noundef !38
  %197 = trunc i8 %196 to i1
  br i1 %197, label %198, label %224

198:                                              ; preds = %194, %190
  %199 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 18
  %200 = load ptr, ptr %199, align 8, !tbaa !41
  %201 = icmp eq ptr %200, null
  br i1 %201, label %203, label %202

202:                                              ; preds = %198
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %200) #3
  call void @_ZdlPvm(ptr noundef %200, i64 noundef 768) #4
  br label %203

203:                                              ; preds = %202, %198
  %204 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 19
  %205 = load ptr, ptr %204, align 8, !tbaa !42
  %206 = icmp eq ptr %205, null
  br i1 %206, label %208, label %207

207:                                              ; preds = %203
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %205) #3
  call void @_ZdlPvm(ptr noundef %205, i64 noundef 768) #4
  br label %208

208:                                              ; preds = %207, %203
  %209 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 16
  %210 = load ptr, ptr %209, align 8, !tbaa !43
  %211 = icmp eq ptr %210, null
  br i1 %211, label %213, label %212

212:                                              ; preds = %208
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %210) #3
  call void @_ZdlPvm(ptr noundef %210, i64 noundef 768) #4
  br label %213

213:                                              ; preds = %212, %208
  %214 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 17
  %215 = load ptr, ptr %214, align 8, !tbaa !44
  %216 = icmp eq ptr %215, null
  br i1 %216, label %218, label %217

217:                                              ; preds = %213
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %215) #3
  call void @_ZdlPvm(ptr noundef %215, i64 noundef 768) #4
  br label %218

218:                                              ; preds = %217, %213
  %219 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 20
  %220 = load ptr, ptr %219, align 8, !tbaa !45
  %221 = icmp eq ptr %220, null
  br i1 %221, label %223, label %222

222:                                              ; preds = %218
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %220) #3
  call void @_ZdlPvm(ptr noundef %220, i64 noundef 768) #4
  br label %223

223:                                              ; preds = %222, %218
  br label %224

224:                                              ; preds = %223, %194
  %225 = getelementptr inbounds %class.Mat, ptr %3, i32 0, i32 45
  call void @_ZN8SubarrayD1Ev(ptr noundef nonnull align 8 dereferenceable(424) %225) #3
  call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280) %3) #3
  ret void
}

; Function Attrs: nounwind
declare void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264)) unnamed_addr #1

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

attributes #0 = { 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 #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }
attributes #4 = { 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, !6, i64 288}
!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, !6, i64 296}
!20 = !{!10, !6, i64 304}
!21 = !{!10, !6, i64 312}
!22 = !{!10, !6, i64 352}
!23 = !{!24, !6, i64 280}
!24 = !{!"_ZTS6Predec", !11, i64 0, !6, i64 280, !6, i64 288, !6, i64 296, !6, i64 304, !14, i64 312, !14, i64 432}
!25 = !{!24, !6, i64 288}
!26 = !{!10, !6, i64 360}
!27 = !{!10, !6, i64 368}
!28 = !{!10, !6, i64 376}
!29 = !{!10, !6, i64 320}
!30 = !{!10, !6, i64 328}
!31 = !{!24, !6, i64 296}
!32 = !{!24, !6, i64 304}
!33 = !{!10, !6, i64 336}
!34 = !{!10, !6, i64 344}
!35 = !{!10, !6, i64 384}
!36 = !{!10, !18, i64 2722}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!10, !6, i64 392}
!40 = !{!10, !18, i64 2721}
!41 = !{!10, !6, i64 416}
!42 = !{!10, !6, i64 424}
!43 = !{!10, !6, i64 400}
!44 = !{!10, !6, i64 408}
!45 = !{!10, !6, i64 432}


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

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN3MatD2Ev(ptr noundef nonnull align 8 dereferenceable(3064) %0) unnamed_addr #2 align 2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 288
  %3 = load ptr, ptr %2, align 8, !tbaa !5
  %4 = icmp eq ptr %3, null
  br i1 %4, label %6, label %5

5:                                                ; preds = %1
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %3) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %3, i64 noundef 656) #4
  br label %6

6:                                                ; preds = %5, %1
  %7 = getelementptr inbounds i8, ptr %0, i64 296
  %8 = load ptr, ptr %7, align 8, !tbaa !18
  %9 = icmp eq ptr %8, null
  br i1 %9, label %11, label %10

10:                                               ; preds = %6
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %8) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %8, i64 noundef 656) #4
  br label %11

11:                                               ; preds = %10, %6
  %12 = getelementptr inbounds i8, ptr %0, i64 304
  %13 = load ptr, ptr %12, align 8, !tbaa !19
  %14 = icmp eq ptr %13, null
  br i1 %14, label %16, label %15

15:                                               ; preds = %11
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %13) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %13, i64 noundef 656) #4
  br label %16

16:                                               ; preds = %15, %11
  %17 = getelementptr inbounds i8, ptr %0, i64 312
  %18 = load ptr, ptr %17, align 8, !tbaa !20
  %19 = icmp eq ptr %18, null
  br i1 %19, label %21, label %20

20:                                               ; preds = %16
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(656) %18) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %18, i64 noundef 656) #4
  br label %21

21:                                               ; preds = %20, %16
  %22 = getelementptr inbounds i8, ptr %0, i64 352
  %23 = load ptr, ptr %22, align 8, !tbaa !21
  %24 = getelementptr inbounds i8, ptr %23, i64 280
  %25 = load ptr, ptr %24, align 8, !tbaa !22
  %26 = icmp eq ptr %25, null
  br i1 %26, label %28, label %27

27:                                               ; preds = %21
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %25) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %25, i64 noundef 1704) #4
  %.pre = load ptr, ptr %22, align 8, !tbaa !21
  br label %28

28:                                               ; preds = %27, %21
  %29 = phi ptr [ %.pre, %27 ], [ %23, %21 ]
  %30 = getelementptr inbounds i8, ptr %29, i64 288
  %31 = load ptr, ptr %30, align 8, !tbaa !24
  %32 = icmp eq ptr %31, null
  br i1 %32, label %34, label %33

33:                                               ; preds = %28
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %31) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %31, i64 noundef 1704) #4
  br label %34

34:                                               ; preds = %33, %28
  %35 = getelementptr inbounds i8, ptr %0, i64 360
  %36 = load ptr, ptr %35, align 8, !tbaa !25
  %37 = getelementptr inbounds i8, ptr %36, i64 280
  %38 = load ptr, ptr %37, align 8, !tbaa !22
  %39 = icmp eq ptr %38, null
  br i1 %39, label %41, label %40

40:                                               ; preds = %34
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %38) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %38, i64 noundef 1704) #4
  %.pre35 = load ptr, ptr %35, align 8, !tbaa !25
  br label %41

41:                                               ; preds = %40, %34
  %42 = phi ptr [ %.pre35, %40 ], [ %36, %34 ]
  %43 = getelementptr inbounds i8, ptr %42, i64 288
  %44 = load ptr, ptr %43, align 8, !tbaa !24
  %45 = icmp eq ptr %44, null
  br i1 %45, label %47, label %46

46:                                               ; preds = %41
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %44) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %44, i64 noundef 1704) #4
  br label %47

47:                                               ; preds = %46, %41
  %48 = getelementptr inbounds i8, ptr %0, i64 368
  %49 = load ptr, ptr %48, align 8, !tbaa !26
  %50 = getelementptr inbounds i8, ptr %49, i64 280
  %51 = load ptr, ptr %50, align 8, !tbaa !22
  %52 = icmp eq ptr %51, null
  br i1 %52, label %54, label %53

53:                                               ; preds = %47
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %51) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %51, i64 noundef 1704) #4
  %.pre36 = load ptr, ptr %48, align 8, !tbaa !26
  br label %54

54:                                               ; preds = %53, %47
  %55 = phi ptr [ %.pre36, %53 ], [ %49, %47 ]
  %56 = getelementptr inbounds i8, ptr %55, i64 288
  %57 = load ptr, ptr %56, align 8, !tbaa !24
  %58 = icmp eq ptr %57, null
  br i1 %58, label %60, label %59

59:                                               ; preds = %54
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %57) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %57, i64 noundef 1704) #4
  br label %60

60:                                               ; preds = %59, %54
  %61 = getelementptr inbounds i8, ptr %0, i64 376
  %62 = load ptr, ptr %61, align 8, !tbaa !27
  %63 = getelementptr inbounds i8, ptr %62, i64 280
  %64 = load ptr, ptr %63, align 8, !tbaa !22
  %65 = icmp eq ptr %64, null
  br i1 %65, label %67, label %66

66:                                               ; preds = %60
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %64) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %64, i64 noundef 1704) #4
  %.pre37 = load ptr, ptr %61, align 8, !tbaa !27
  br label %67

67:                                               ; preds = %66, %60
  %68 = phi ptr [ %.pre37, %66 ], [ %62, %60 ]
  %69 = getelementptr inbounds i8, ptr %68, i64 288
  %70 = load ptr, ptr %69, align 8, !tbaa !24
  %71 = icmp eq ptr %70, null
  br i1 %71, label %73, label %72

72:                                               ; preds = %67
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %70) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %70, i64 noundef 1704) #4
  br label %73

73:                                               ; preds = %72, %67
  %74 = getelementptr inbounds i8, ptr %0, i64 320
  %75 = load ptr, ptr %74, align 8, !tbaa !28
  %76 = icmp eq ptr %75, null
  br i1 %76, label %78, label %77

77:                                               ; preds = %73
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %75) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %75, i64 noundef 1704) #4
  br label %78

78:                                               ; preds = %77, %73
  %79 = getelementptr inbounds i8, ptr %0, i64 328
  %80 = load ptr, ptr %79, align 8, !tbaa !29
  %81 = icmp eq ptr %80, null
  br i1 %81, label %83, label %82

82:                                               ; preds = %78
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1697) %80) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %80, i64 noundef 1704) #4
  br label %83

83:                                               ; preds = %82, %78
  %84 = load ptr, ptr %22, align 8, !tbaa !21
  %85 = getelementptr inbounds i8, ptr %84, i64 296
  %86 = load ptr, ptr %85, align 8, !tbaa !30
  %87 = icmp eq ptr %86, null
  br i1 %87, label %89, label %88

88:                                               ; preds = %83
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %86) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %86, i64 noundef 1280) #4
  %.pre38 = load ptr, ptr %22, align 8, !tbaa !21
  br label %89

89:                                               ; preds = %88, %83
  %90 = phi ptr [ %.pre38, %88 ], [ %84, %83 ]
  %91 = getelementptr inbounds i8, ptr %90, i64 304
  %92 = load ptr, ptr %91, align 8, !tbaa !31
  %93 = icmp eq ptr %92, null
  br i1 %93, label %95, label %94

94:                                               ; preds = %89
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %92) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %92, i64 noundef 1280) #4
  br label %95

95:                                               ; preds = %94, %89
  %96 = load ptr, ptr %35, align 8, !tbaa !25
  %97 = getelementptr inbounds i8, ptr %96, i64 296
  %98 = load ptr, ptr %97, align 8, !tbaa !30
  %99 = icmp eq ptr %98, null
  br i1 %99, label %101, label %100

100:                                              ; preds = %95
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %98) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %98, i64 noundef 1280) #4
  %.pre39 = load ptr, ptr %35, align 8, !tbaa !25
  br label %101

101:                                              ; preds = %100, %95
  %102 = phi ptr [ %.pre39, %100 ], [ %96, %95 ]
  %103 = getelementptr inbounds i8, ptr %102, i64 304
  %104 = load ptr, ptr %103, align 8, !tbaa !31
  %105 = icmp eq ptr %104, null
  br i1 %105, label %107, label %106

106:                                              ; preds = %101
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %104) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %104, i64 noundef 1280) #4
  br label %107

107:                                              ; preds = %106, %101
  %108 = load ptr, ptr %48, align 8, !tbaa !26
  %109 = getelementptr inbounds i8, ptr %108, i64 296
  %110 = load ptr, ptr %109, align 8, !tbaa !30
  %111 = icmp eq ptr %110, null
  br i1 %111, label %113, label %112

112:                                              ; preds = %107
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %110) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %110, i64 noundef 1280) #4
  %.pre40 = load ptr, ptr %48, align 8, !tbaa !26
  br label %113

113:                                              ; preds = %112, %107
  %114 = phi ptr [ %.pre40, %112 ], [ %108, %107 ]
  %115 = getelementptr inbounds i8, ptr %114, i64 304
  %116 = load ptr, ptr %115, align 8, !tbaa !31
  %117 = icmp eq ptr %116, null
  br i1 %117, label %119, label %118

118:                                              ; preds = %113
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %116) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %116, i64 noundef 1280) #4
  br label %119

119:                                              ; preds = %118, %113
  %120 = load ptr, ptr %61, align 8, !tbaa !27
  %121 = getelementptr inbounds i8, ptr %120, i64 296
  %122 = load ptr, ptr %121, align 8, !tbaa !30
  %123 = icmp eq ptr %122, null
  br i1 %123, label %125, label %124

124:                                              ; preds = %119
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %122) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %122, i64 noundef 1280) #4
  %.pre41 = load ptr, ptr %61, align 8, !tbaa !27
  br label %125

125:                                              ; preds = %124, %119
  %126 = phi ptr [ %.pre41, %124 ], [ %120, %119 ]
  %127 = getelementptr inbounds i8, ptr %126, i64 304
  %128 = load ptr, ptr %127, align 8, !tbaa !31
  %129 = icmp eq ptr %128, null
  br i1 %129, label %131, label %130

130:                                              ; preds = %125
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %128) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %128, i64 noundef 1280) #4
  br label %131

131:                                              ; preds = %130, %125
  %132 = getelementptr inbounds i8, ptr %0, i64 336
  %133 = load ptr, ptr %132, align 8, !tbaa !32
  %134 = icmp eq ptr %133, null
  br i1 %134, label %136, label %135

135:                                              ; preds = %131
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %133) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %133, i64 noundef 1280) #4
  br label %136

136:                                              ; preds = %135, %131
  %137 = getelementptr inbounds i8, ptr %0, i64 344
  %138 = load ptr, ptr %137, align 8, !tbaa !33
  %139 = icmp eq ptr %138, null
  br i1 %139, label %141, label %140

140:                                              ; preds = %136
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(1280) %138) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %138, i64 noundef 1280) #4
  br label %141

141:                                              ; preds = %140, %136
  %142 = load ptr, ptr %22, align 8, !tbaa !21
  %143 = icmp eq ptr %142, null
  br i1 %143, label %145, label %144

144:                                              ; preds = %141
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %142) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %142, i64 noundef 552) #4
  br label %145

145:                                              ; preds = %144, %141
  %146 = load ptr, ptr %35, align 8, !tbaa !25
  %147 = icmp eq ptr %146, null
  br i1 %147, label %149, label %148

148:                                              ; preds = %145
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %146) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %146, i64 noundef 552) #4
  br label %149

149:                                              ; preds = %148, %145
  %150 = load ptr, ptr %48, align 8, !tbaa !26
  %151 = icmp eq ptr %150, null
  br i1 %151, label %153, label %152

152:                                              ; preds = %149
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %150) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %150, i64 noundef 552) #4
  br label %153

153:                                              ; preds = %152, %149
  %154 = load ptr, ptr %61, align 8, !tbaa !27
  %155 = icmp eq ptr %154, null
  br i1 %155, label %157, label %156

156:                                              ; preds = %153
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(552) %154) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %154, i64 noundef 552) #4
  br label %157

157:                                              ; preds = %156, %153
  %158 = getelementptr inbounds i8, ptr %0, i64 384
  %159 = load ptr, ptr %158, align 8, !tbaa !34
  %160 = icmp eq ptr %159, null
  br i1 %160, label %162, label %161

161:                                              ; preds = %157
  tail call void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264) %159) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %159, i64 noundef 1264) #4
  br label %162

162:                                              ; preds = %161, %157
  %163 = getelementptr inbounds i8, ptr %0, i64 2722
  %164 = load i8, ptr %163, align 2, !tbaa !35, !range !36, !noundef !37
  %165 = trunc nuw i8 %164 to i1
  br i1 %165, label %171, label %166

166:                                              ; preds = %162
  %167 = getelementptr inbounds i8, ptr %0, i64 392
  %168 = load ptr, ptr %167, align 8, !tbaa !38
  %169 = icmp eq ptr %168, null
  br i1 %169, label %171, label %170

170:                                              ; preds = %166
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %168) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %168, i64 noundef 768) #4
  br label %171

171:                                              ; preds = %166, %170, %162
  %172 = getelementptr inbounds i8, ptr %0, i64 2721
  %173 = load i8, ptr %172, align 1, !tbaa !39, !range !36, !noundef !37
  %174 = trunc nuw i8 %173 to i1
  br i1 %174, label %178, label %175

175:                                              ; preds = %171
  %176 = load i8, ptr %163, align 2, !tbaa !35, !range !36, !noundef !37
  %177 = trunc nuw i8 %176 to i1
  br i1 %177, label %178, label %203

178:                                              ; preds = %175, %171
  %179 = getelementptr inbounds i8, ptr %0, i64 416
  %180 = load ptr, ptr %179, align 8, !tbaa !40
  %181 = icmp eq ptr %180, null
  br i1 %181, label %183, label %182

182:                                              ; preds = %178
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %180) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %180, i64 noundef 768) #4
  br label %183

183:                                              ; preds = %182, %178
  %184 = getelementptr inbounds i8, ptr %0, i64 424
  %185 = load ptr, ptr %184, align 8, !tbaa !41
  %186 = icmp eq ptr %185, null
  br i1 %186, label %188, label %187

187:                                              ; preds = %183
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %185) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %185, i64 noundef 768) #4
  br label %188

188:                                              ; preds = %187, %183
  %189 = getelementptr inbounds i8, ptr %0, i64 400
  %190 = load ptr, ptr %189, align 8, !tbaa !42
  %191 = icmp eq ptr %190, null
  br i1 %191, label %193, label %192

192:                                              ; preds = %188
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %190) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %190, i64 noundef 768) #4
  br label %193

193:                                              ; preds = %192, %188
  %194 = getelementptr inbounds i8, ptr %0, i64 408
  %195 = load ptr, ptr %194, align 8, !tbaa !43
  %196 = icmp eq ptr %195, null
  br i1 %196, label %198, label %197

197:                                              ; preds = %193
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %195) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %195, i64 noundef 768) #4
  br label %198

198:                                              ; preds = %197, %193
  %199 = getelementptr inbounds i8, ptr %0, i64 432
  %200 = load ptr, ptr %199, align 8, !tbaa !44
  %201 = icmp eq ptr %200, null
  br i1 %201, label %203, label %202

202:                                              ; preds = %198
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(761) %200) #3
  tail call void @_ZdlPvm(ptr noundef nonnull %200, i64 noundef 768) #4
  br label %203

203:                                              ; preds = %198, %202, %175
  %204 = getelementptr inbounds i8, ptr %0, i64 1864
  tail call void @_ZN8SubarrayD1Ev(ptr noundef nonnull align 8 dereferenceable(424) %204) #3
  tail call void @_ZN9ComponentD2Ev(ptr noundef nonnull align 8 dereferenceable(280) %0) #3
  ret void
}

; Function Attrs: nounwind
declare void @_ZN4WireD1Ev(ptr noundef nonnull align 8 dereferenceable(1264)) unnamed_addr #1

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

attributes #0 = { 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 #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }
attributes #4 = { 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, !14, i64 288}
!6 = !{!"_ZTS3Mat", !7, i64 0, !14, i64 280, !14, i64 288, !14, i64 296, !14, i64 304, !14, i64 312, !14, i64 320, !14, i64 328, !14, i64 336, !14, i64 344, !14, i64 352, !14, i64 360, !14, i64 368, !14, i64 376, !14, i64 384, !14, i64 392, !14, i64 400, !14, i64 408, !14, i64 416, !14, i64 424, !14, i64 432, !12, i64 440, !12, i64 560, !12, i64 680, !12, i64 800, !12, i64 920, !12, i64 1040, !12, i64 1160, !12, i64 1280, !12, i64 1400, !12, i64 1520, !12, i64 1640, !9, i64 1760, !9, i64 1768, !9, i64 1776, !9, i64 1784, !9, i64 1792, !9, i64 1800, !9, i64 1808, !9, i64 1816, !9, i64 1824, !9, i64 1832, !9, i64 1840, !9, i64 1848, !9, i64 1856, !15, i64 1864, !12, i64 2288, !12, i64 2408, !12, i64 2528, !9, i64 2648, !16, i64 2656, !16, i64 2660, !9, i64 2664, !8, i64 2672, !8, i64 2696, !17, i64 2720, !17, i64 2721, !17, i64 2722, !17, i64 2723, !16, i64 2724, !12, i64 2728, !9, i64 2848, !9, i64 2856, !9, i64 2864, !9, i64 2872, !9, i64 2880, !9, i64 2888, !12, i64 2896, !16, i64 3016, !16, i64 3020, !16, i64 3024, !16, i64 3028, !9, i64 3032, !16, i64 3040, !16, i64 3044, !16, i64 3048, !16, i64 3052, !16, i64 3056, !16, i64 3060}
!7 = !{!"_ZTS9Component", !8, i64 0, !12, i64 24, !12, i64 144, !9, i64 264, !9, i64 272}
!8 = !{!"_ZTS4Area", !9, i64 0, !9, i64 8, !9, i64 16}
!9 = !{!"double", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTS8powerDef", !13, i64 0, !13, i64 40, !13, i64 80}
!13 = !{!"_ZTS15powerComponents", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32}
!14 = !{!"any pointer", !10, i64 0}
!15 = !{!"_ZTS8Subarray", !7, i64 0, !14, i64 280, !16, i64 288, !16, i64 292, !16, i64 296, !16, i64 300, !8, i64 304, !8, i64 328, !17, i64 352, !9, i64 360, !9, i64 368, !9, i64 376, !9, i64 384, !9, i64 392, !9, i64 400, !9, i64 408, !9, i64 416}
!16 = !{!"int", !10, i64 0}
!17 = !{!"bool", !10, i64 0}
!18 = !{!6, !14, i64 296}
!19 = !{!6, !14, i64 304}
!20 = !{!6, !14, i64 312}
!21 = !{!6, !14, i64 352}
!22 = !{!23, !14, i64 280}
!23 = !{!"_ZTS6Predec", !7, i64 0, !14, i64 280, !14, i64 288, !14, i64 296, !14, i64 304, !12, i64 312, !12, i64 432}
!24 = !{!23, !14, i64 288}
!25 = !{!6, !14, i64 360}
!26 = !{!6, !14, i64 368}
!27 = !{!6, !14, i64 376}
!28 = !{!6, !14, i64 320}
!29 = !{!6, !14, i64 328}
!30 = !{!23, !14, i64 296}
!31 = !{!23, !14, i64 304}
!32 = !{!6, !14, i64 336}
!33 = !{!6, !14, i64 344}
!34 = !{!6, !14, i64 384}
!35 = !{!6, !17, i64 2722}
!36 = !{i8 0, i8 2}
!37 = !{}
!38 = !{!6, !14, i64 392}
!39 = !{!6, !17, i64 2721}
!40 = !{!6, !14, i64 416}
!41 = !{!6, !14, i64 424}
!42 = !{!6, !14, i64 400}
!43 = !{!6, !14, i64 408}
!44 = !{!6, !14, i64 432}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass