; LLVM IR from niessner/Matterport :: code/gaps/pkgs/R3Shapes/R3Shape.ll (ZNK7R3Shape4CopyEv)

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

@.str.1 = external hidden unnamed_addr constant [33 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7R3Shape8CLASS_IDEv() #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZNK7R3Shape4CopyEv(ptr noundef nonnull align 8 dereferenceable(8) %0) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  %6 = load ptr, ptr %3, align 8
  %7 = load ptr, ptr %6, align 8, !tbaa !9
  %8 = getelementptr inbounds ptr, ptr %7, i64 23
  %9 = load ptr, ptr %8, align 8
  %10 = call noundef i32 %9(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %11 = call noundef i32 @_ZN5R3Box8CLASS_IDEv()
  %12 = icmp eq i32 %10, %11
  br i1 %12, label %13, label %20

13:                                               ; preds = %1
  %14 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 56) #4
  invoke void @_ZN5R3BoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 8 dereferenceable(56) %6)
          to label %15 unwind label %16

15:                                               ; preds = %13
  store ptr %14, ptr %2, align 8
  br label %205

16:                                               ; preds = %13
  %17 = landingpad { ptr, i32 }
          cleanup
  %18 = extractvalue { ptr, i32 } %17, 0
  store ptr %18, ptr %4, align 8
  %19 = extractvalue { ptr, i32 } %17, 1
  store i32 %19, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %14, i64 noundef 56) #5
  br label %207

20:                                               ; preds = %1
  %21 = load ptr, ptr %6, align 8, !tbaa !9
  %22 = getelementptr inbounds ptr, ptr %21, i64 23
  %23 = load ptr, ptr %22, align 8
  %24 = call noundef i32 %23(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %25 = call noundef i32 @_ZN13R3OrientedBox8CLASS_IDEv()
  %26 = icmp eq i32 %24, %25
  br i1 %26, label %27, label %34

27:                                               ; preds = %20
  %28 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 128) #4
  invoke void @_ZN13R3OrientedBoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %28, ptr noundef nonnull align 8 dereferenceable(128) %6)
          to label %29 unwind label %30

29:                                               ; preds = %27
  store ptr %28, ptr %2, align 8
  br label %205

30:                                               ; preds = %27
  %31 = landingpad { ptr, i32 }
          cleanup
  %32 = extractvalue { ptr, i32 } %31, 0
  store ptr %32, ptr %4, align 8
  %33 = extractvalue { ptr, i32 } %31, 1
  store i32 %33, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %28, i64 noundef 128) #5
  br label %207

34:                                               ; preds = %20
  %35 = load ptr, ptr %6, align 8, !tbaa !9
  %36 = getelementptr inbounds ptr, ptr %35, i64 23
  %37 = load ptr, ptr %36, align 8
  %38 = call noundef i32 %37(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %39 = call noundef i32 @_ZN10R3Cylinder8CLASS_IDEv()
  %40 = icmp eq i32 %38, %39
  br i1 %40, label %41, label %48

41:                                               ; preds = %34
  %42 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 232) #4
  invoke void @_ZN10R3CylinderC1ERKS_(ptr noundef nonnull align 8 dereferenceable(232) %42, ptr noundef nonnull align 8 dereferenceable(232) %6)
          to label %43 unwind label %44

43:                                               ; preds = %41
  store ptr %42, ptr %2, align 8
  br label %205

44:                                               ; preds = %41
  %45 = landingpad { ptr, i32 }
          cleanup
  %46 = extractvalue { ptr, i32 } %45, 0
  store ptr %46, ptr %4, align 8
  %47 = extractvalue { ptr, i32 } %45, 1
  store i32 %47, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %42, i64 noundef 232) #5
  br label %207

48:                                               ; preds = %34
  %49 = load ptr, ptr %6, align 8, !tbaa !9
  %50 = getelementptr inbounds ptr, ptr %49, i64 23
  %51 = load ptr, ptr %50, align 8
  %52 = call noundef i32 %51(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %53 = call noundef i32 @_ZN6R3Cone8CLASS_IDEv()
  %54 = icmp eq i32 %52, %53
  br i1 %54, label %55, label %62

55:                                               ; preds = %48
  %56 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 160) #4
  invoke void @_ZN6R3ConeC1ERKS_(ptr noundef nonnull align 8 dereferenceable(160) %56, ptr noundef nonnull align 8 dereferenceable(160) %6)
          to label %57 unwind label %58

57:                                               ; preds = %55
  store ptr %56, ptr %2, align 8
  br label %205

58:                                               ; preds = %55
  %59 = landingpad { ptr, i32 }
          cleanup
  %60 = extractvalue { ptr, i32 } %59, 0
  store ptr %60, ptr %4, align 8
  %61 = extractvalue { ptr, i32 } %59, 1
  store i32 %61, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %56, i64 noundef 160) #5
  br label %207

62:                                               ; preds = %48
  %63 = load ptr, ptr %6, align 8, !tbaa !9
  %64 = getelementptr inbounds ptr, ptr %63, i64 23
  %65 = load ptr, ptr %64, align 8
  %66 = call noundef i32 %65(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %67 = call noundef i32 @_ZN11R3Ellipsoid8CLASS_IDEv()
  %68 = icmp eq i32 %66, %67
  br i1 %68, label %69, label %76

69:                                               ; preds = %62
  %70 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 184) #4
  invoke void @_ZN11R3EllipsoidC1ERKS_(ptr noundef nonnull align 8 dereferenceable(184) %70, ptr noundef nonnull align 8 dereferenceable(184) %6)
          to label %71 unwind label %72

71:                                               ; preds = %69
  store ptr %70, ptr %2, align 8
  br label %205

72:                                               ; preds = %69
  %73 = landingpad { ptr, i32 }
          cleanup
  %74 = extractvalue { ptr, i32 } %73, 0
  store ptr %74, ptr %4, align 8
  %75 = extractvalue { ptr, i32 } %73, 1
  store i32 %75, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %70, i64 noundef 184) #5
  br label %207

76:                                               ; preds = %62
  %77 = load ptr, ptr %6, align 8, !tbaa !9
  %78 = getelementptr inbounds ptr, ptr %77, i64 23
  %79 = load ptr, ptr %78, align 8
  %80 = call noundef i32 %79(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %81 = call noundef i32 @_ZN8R3Sphere8CLASS_IDEv()
  %82 = icmp eq i32 %80, %81
  br i1 %82, label %83, label %90

83:                                               ; preds = %76
  %84 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #4
  invoke void @_ZN8R3SphereC1ERKS_(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(40) %6)
          to label %85 unwind label %86

85:                                               ; preds = %83
  store ptr %84, ptr %2, align 8
  br label %205

86:                                               ; preds = %83
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %4, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %84, i64 noundef 40) #5
  br label %207

90:                                               ; preds = %76
  %91 = load ptr, ptr %6, align 8, !tbaa !9
  %92 = getelementptr inbounds ptr, ptr %91, i64 23
  %93 = load ptr, ptr %92, align 8
  %94 = call noundef i32 %93(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %95 = call noundef i32 @_ZN10R3Triangle8CLASS_IDEv()
  %96 = icmp eq i32 %94, %95
  br i1 %96, label %97, label %104

97:                                               ; preds = %90
  %98 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 136) #4
  invoke void @_ZN10R3TriangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(132) %98, ptr noundef nonnull align 8 dereferenceable(132) %6)
          to label %99 unwind label %100

99:                                               ; preds = %97
  store ptr %98, ptr %2, align 8
  br label %205

100:                                              ; preds = %97
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %4, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %98, i64 noundef 136) #5
  br label %207

104:                                              ; preds = %90
  %105 = load ptr, ptr %6, align 8, !tbaa !9
  %106 = getelementptr inbounds ptr, ptr %105, i64 23
  %107 = load ptr, ptr %106, align 8
  %108 = call noundef i32 %107(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %109 = call noundef i32 @_ZN15R3TriangleArray8CLASS_IDEv()
  %110 = icmp eq i32 %108, %109
  br i1 %110, label %111, label %118

111:                                              ; preds = %104
  %112 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #4
  invoke void @_ZN15R3TriangleArrayC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96) %112, ptr noundef nonnull align 8 dereferenceable(96) %6)
          to label %113 unwind label %114

113:                                              ; preds = %111
  store ptr %112, ptr %2, align 8
  br label %205

114:                                              ; preds = %111
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %4, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %112, i64 noundef 96) #5
  br label %207

118:                                              ; preds = %104
  %119 = load ptr, ptr %6, align 8, !tbaa !9
  %120 = getelementptr inbounds ptr, ptr %119, i64 23
  %121 = load ptr, ptr %120, align 8
  %122 = call noundef i32 %121(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %123 = call noundef i32 @_ZN8R3Circle8CLASS_IDEv()
  %124 = icmp eq i32 %122, %123
  br i1 %124, label %125, label %132

125:                                              ; preds = %118
  %126 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 72) #4
  invoke void @_ZN8R3CircleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(72) %126, ptr noundef nonnull align 8 dereferenceable(72) %6)
          to label %127 unwind label %128

127:                                              ; preds = %125
  store ptr %126, ptr %2, align 8
  br label %205

128:                                              ; preds = %125
  %129 = landingpad { ptr, i32 }
          cleanup
  %130 = extractvalue { ptr, i32 } %129, 0
  store ptr %130, ptr %4, align 8
  %131 = extractvalue { ptr, i32 } %129, 1
  store i32 %131, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %126, i64 noundef 72) #5
  br label %207

132:                                              ; preds = %118
  %133 = load ptr, ptr %6, align 8, !tbaa !9
  %134 = getelementptr inbounds ptr, ptr %133, i64 23
  %135 = load ptr, ptr %134, align 8
  %136 = call noundef i32 %135(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %137 = call noundef i32 @_ZN9R3Ellipse8CLASS_IDEv()
  %138 = icmp eq i32 %136, %137
  br i1 %138, label %139, label %146

139:                                              ; preds = %132
  %140 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 176) #4
  invoke void @_ZN9R3EllipseC1ERKS_(ptr noundef nonnull align 8 dereferenceable(176) %140, ptr noundef nonnull align 8 dereferenceable(176) %6)
          to label %141 unwind label %142

141:                                              ; preds = %139
  store ptr %140, ptr %2, align 8
  br label %205

142:                                              ; preds = %139
  %143 = landingpad { ptr, i32 }
          cleanup
  %144 = extractvalue { ptr, i32 } %143, 0
  store ptr %144, ptr %4, align 8
  %145 = extractvalue { ptr, i32 } %143, 1
  store i32 %145, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %140, i64 noundef 176) #5
  br label %207

146:                                              ; preds = %132
  %147 = load ptr, ptr %6, align 8, !tbaa !9
  %148 = getelementptr inbounds ptr, ptr %147, i64 23
  %149 = load ptr, ptr %148, align 8
  %150 = call noundef i32 %149(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %151 = call noundef i32 @_ZN11R3Rectangle8CLASS_IDEv()
  %152 = icmp eq i32 %150, %151
  br i1 %152, label %153, label %160

153:                                              ; preds = %146
  %154 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 120) #4
  invoke void @_ZN11R3RectangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(120) %154, ptr noundef nonnull align 8 dereferenceable(120) %6)
          to label %155 unwind label %156

155:                                              ; preds = %153
  store ptr %154, ptr %2, align 8
  br label %205

156:                                              ; preds = %153
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %4, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %154, i64 noundef 120) #5
  br label %207

160:                                              ; preds = %146
  %161 = load ptr, ptr %6, align 8, !tbaa !9
  %162 = getelementptr inbounds ptr, ptr %161, i64 23
  %163 = load ptr, ptr %162, align 8
  %164 = call noundef i32 %163(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %165 = call noundef i32 @_ZN7R3Shape8CLASS_IDEv()
  %166 = icmp eq i32 %164, %165
  br i1 %166, label %167, label %174

167:                                              ; preds = %160
  %168 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #4
  invoke void @_ZN10R3PolylineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96) %168, ptr noundef nonnull align 8 dereferenceable(96) %6)
          to label %169 unwind label %170

169:                                              ; preds = %167
  store ptr %168, ptr %2, align 8
  br label %205

170:                                              ; preds = %167
  %171 = landingpad { ptr, i32 }
          cleanup
  %172 = extractvalue { ptr, i32 } %171, 0
  store ptr %172, ptr %4, align 8
  %173 = extractvalue { ptr, i32 } %171, 1
  store i32 %173, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %168, i64 noundef 96) #5
  br label %207

174:                                              ; preds = %160
  %175 = load ptr, ptr %6, align 8, !tbaa !9
  %176 = getelementptr inbounds ptr, ptr %175, i64 23
  %177 = load ptr, ptr %176, align 8
  %178 = call noundef i32 %177(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %179 = call noundef i32 @_ZN7R3Shape8CLASS_IDEv()
  %180 = icmp eq i32 %178, %179
  br i1 %180, label %181, label %188

181:                                              ; preds = %174
  %182 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 104) #4
  invoke void @_ZN18R3CatmullRomSplineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(104) %182, ptr noundef nonnull align 8 dereferenceable(104) %6)
          to label %183 unwind label %184

183:                                              ; preds = %181
  store ptr %182, ptr %2, align 8
  br label %205

184:                                              ; preds = %181
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %4, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %5, align 4
  call void @_ZdlPvm(ptr noundef %182, i64 noundef 104) #5
  br label %207

188:                                              ; preds = %174
  br label %189

189:                                              ; preds = %188
  br label %190

190:                                              ; preds = %189
  br label %191

191:                                              ; preds = %190
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193
  br label %195

195:                                              ; preds = %194
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  br label %198

198:                                              ; preds = %197
  br label %199

199:                                              ; preds = %198
  br label %200

200:                                              ; preds = %199
  %201 = load ptr, ptr %6, align 8, !tbaa !9
  %202 = getelementptr inbounds ptr, ptr %201, i64 23
  %203 = load ptr, ptr %202, align 8
  %204 = call noundef i32 %203(ptr noundef nonnull align 8 dereferenceable(8) %6)
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str.1, i32 noundef %204)
  store ptr null, ptr %2, align 8
  br label %205

205:                                              ; preds = %200, %183, %169, %155, %141, %127, %113, %99, %85, %71, %57, %43, %29, %15
  %206 = load ptr, ptr %2, align 8
  ret ptr %206

207:                                              ; preds = %184, %170, %156, %142, %128, %114, %100, %86, %72, %58, %44, %30, %16
  %208 = load ptr, ptr %4, align 8
  %209 = load i32, ptr %5, align 4
  %210 = insertvalue { ptr, i32 } poison, ptr %208, 0
  %211 = insertvalue { ptr, i32 } %210, i32 %209, 1
  resume { ptr, i32 } %211
}

declare noundef i32 @_ZN5R3Box8CLASS_IDEv() #1

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

declare void @_ZN5R3BoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

declare noundef i32 @_ZN13R3OrientedBox8CLASS_IDEv() #1

declare void @_ZN13R3OrientedBoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #1

declare noundef i32 @_ZN10R3Cylinder8CLASS_IDEv() #1

declare void @_ZN10R3CylinderC1ERKS_(ptr noundef nonnull align 8 dereferenceable(232), ptr noundef nonnull align 8 dereferenceable(232)) unnamed_addr #1

declare noundef i32 @_ZN6R3Cone8CLASS_IDEv() #1

declare void @_ZN6R3ConeC1ERKS_(ptr noundef nonnull align 8 dereferenceable(160), ptr noundef nonnull align 8 dereferenceable(160)) unnamed_addr #1

declare noundef i32 @_ZN11R3Ellipsoid8CLASS_IDEv() #1

declare void @_ZN11R3EllipsoidC1ERKS_(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef nonnull align 8 dereferenceable(184)) unnamed_addr #1

declare noundef i32 @_ZN8R3Sphere8CLASS_IDEv() #1

declare void @_ZN8R3SphereC1ERKS_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #1

declare noundef i32 @_ZN10R3Triangle8CLASS_IDEv() #1

declare void @_ZN10R3TriangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(132), ptr noundef nonnull align 8 dereferenceable(132)) unnamed_addr #1

declare noundef i32 @_ZN15R3TriangleArray8CLASS_IDEv() #1

declare void @_ZN15R3TriangleArrayC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #1

declare noundef i32 @_ZN8R3Circle8CLASS_IDEv() #1

declare void @_ZN8R3CircleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #1

declare noundef i32 @_ZN9R3Ellipse8CLASS_IDEv() #1

declare void @_ZN9R3EllipseC1ERKS_(ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(176)) unnamed_addr #1

declare noundef i32 @_ZN11R3Rectangle8CLASS_IDEv() #1

declare void @_ZN11R3RectangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #1

declare void @_ZN10R3PolylineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #1

declare void @_ZN18R3CatmullRomSplineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #1

declare void @_Z7RNAbortPKcz(ptr noundef, ...) #1

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 = { 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 #3 = { 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 #4 = { builtin allocsize(0) }
attributes #5 = { 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, !10, i64 0}
!10 = !{!"vtable pointer", !8, 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"

@.str.1 = external hidden unnamed_addr constant [33 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN7R3Shape8CLASS_IDEv() local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @_ZNK7R3Shape4CopyEv(ptr noundef nonnull align 8 dereferenceable(8) %0) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = getelementptr inbounds i8, ptr %2, i64 184
  %4 = load ptr, ptr %3, align 8
  %5 = tail call noundef i32 %4(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %6 = tail call noundef i32 @_ZN5R3Box8CLASS_IDEv()
  %7 = icmp eq i32 %5, %6
  br i1 %7, label %8, label %12

8:                                                ; preds = %1
  %9 = tail call noalias noundef nonnull dereferenceable(56) ptr @_Znwm(i64 noundef 56) #4
  invoke void @_ZN5R3BoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(56) %9, ptr noundef nonnull align 8 dereferenceable(56) %0)
          to label %149 unwind label %10

10:                                               ; preds = %8
  %11 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %9, i64 noundef 56) #5
  br label %150

12:                                               ; preds = %1
  %13 = load ptr, ptr %0, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %13, i64 184
  %15 = load ptr, ptr %14, align 8
  %16 = tail call noundef i32 %15(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %17 = tail call noundef i32 @_ZN13R3OrientedBox8CLASS_IDEv()
  %18 = icmp eq i32 %16, %17
  br i1 %18, label %19, label %23

19:                                               ; preds = %12
  %20 = tail call noalias noundef nonnull dereferenceable(128) ptr @_Znwm(i64 noundef 128) #4
  invoke void @_ZN13R3OrientedBoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(128) %20, ptr noundef nonnull align 8 dereferenceable(128) %0)
          to label %149 unwind label %21

21:                                               ; preds = %19
  %22 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %20, i64 noundef 128) #5
  br label %150

23:                                               ; preds = %12
  %24 = load ptr, ptr %0, align 8, !tbaa !5
  %25 = getelementptr inbounds i8, ptr %24, i64 184
  %26 = load ptr, ptr %25, align 8
  %27 = tail call noundef i32 %26(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %28 = tail call noundef i32 @_ZN10R3Cylinder8CLASS_IDEv()
  %29 = icmp eq i32 %27, %28
  br i1 %29, label %30, label %34

30:                                               ; preds = %23
  %31 = tail call noalias noundef nonnull dereferenceable(232) ptr @_Znwm(i64 noundef 232) #4
  invoke void @_ZN10R3CylinderC1ERKS_(ptr noundef nonnull align 8 dereferenceable(232) %31, ptr noundef nonnull align 8 dereferenceable(232) %0)
          to label %149 unwind label %32

32:                                               ; preds = %30
  %33 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %31, i64 noundef 232) #5
  br label %150

34:                                               ; preds = %23
  %35 = load ptr, ptr %0, align 8, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %35, i64 184
  %37 = load ptr, ptr %36, align 8
  %38 = tail call noundef i32 %37(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %39 = tail call noundef i32 @_ZN6R3Cone8CLASS_IDEv()
  %40 = icmp eq i32 %38, %39
  br i1 %40, label %41, label %45

41:                                               ; preds = %34
  %42 = tail call noalias noundef nonnull dereferenceable(160) ptr @_Znwm(i64 noundef 160) #4
  invoke void @_ZN6R3ConeC1ERKS_(ptr noundef nonnull align 8 dereferenceable(160) %42, ptr noundef nonnull align 8 dereferenceable(160) %0)
          to label %149 unwind label %43

43:                                               ; preds = %41
  %44 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %42, i64 noundef 160) #5
  br label %150

45:                                               ; preds = %34
  %46 = load ptr, ptr %0, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %46, i64 184
  %48 = load ptr, ptr %47, align 8
  %49 = tail call noundef i32 %48(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %50 = tail call noundef i32 @_ZN11R3Ellipsoid8CLASS_IDEv()
  %51 = icmp eq i32 %49, %50
  br i1 %51, label %52, label %56

52:                                               ; preds = %45
  %53 = tail call noalias noundef nonnull dereferenceable(184) ptr @_Znwm(i64 noundef 184) #4
  invoke void @_ZN11R3EllipsoidC1ERKS_(ptr noundef nonnull align 8 dereferenceable(184) %53, ptr noundef nonnull align 8 dereferenceable(184) %0)
          to label %149 unwind label %54

54:                                               ; preds = %52
  %55 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %53, i64 noundef 184) #5
  br label %150

56:                                               ; preds = %45
  %57 = load ptr, ptr %0, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i64 184
  %59 = load ptr, ptr %58, align 8
  %60 = tail call noundef i32 %59(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %61 = tail call noundef i32 @_ZN8R3Sphere8CLASS_IDEv()
  %62 = icmp eq i32 %60, %61
  br i1 %62, label %63, label %67

63:                                               ; preds = %56
  %64 = tail call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #4
  invoke void @_ZN8R3SphereC1ERKS_(ptr noundef nonnull align 8 dereferenceable(40) %64, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %149 unwind label %65

65:                                               ; preds = %63
  %66 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %64, i64 noundef 40) #5
  br label %150

67:                                               ; preds = %56
  %68 = load ptr, ptr %0, align 8, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %68, i64 184
  %70 = load ptr, ptr %69, align 8
  %71 = tail call noundef i32 %70(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %72 = tail call noundef i32 @_ZN10R3Triangle8CLASS_IDEv()
  %73 = icmp eq i32 %71, %72
  br i1 %73, label %74, label %78

74:                                               ; preds = %67
  %75 = tail call noalias noundef nonnull dereferenceable(136) ptr @_Znwm(i64 noundef 136) #4
  invoke void @_ZN10R3TriangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(132) %75, ptr noundef nonnull align 8 dereferenceable(132) %0)
          to label %149 unwind label %76

76:                                               ; preds = %74
  %77 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %75, i64 noundef 136) #5
  br label %150

78:                                               ; preds = %67
  %79 = load ptr, ptr %0, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %79, i64 184
  %81 = load ptr, ptr %80, align 8
  %82 = tail call noundef i32 %81(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %83 = tail call noundef i32 @_ZN15R3TriangleArray8CLASS_IDEv()
  %84 = icmp eq i32 %82, %83
  br i1 %84, label %85, label %89

85:                                               ; preds = %78
  %86 = tail call noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #4
  invoke void @_ZN15R3TriangleArrayC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96) %86, ptr noundef nonnull align 8 dereferenceable(96) %0)
          to label %149 unwind label %87

87:                                               ; preds = %85
  %88 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %86, i64 noundef 96) #5
  br label %150

89:                                               ; preds = %78
  %90 = load ptr, ptr %0, align 8, !tbaa !5
  %91 = getelementptr inbounds i8, ptr %90, i64 184
  %92 = load ptr, ptr %91, align 8
  %93 = tail call noundef i32 %92(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %94 = tail call noundef i32 @_ZN8R3Circle8CLASS_IDEv()
  %95 = icmp eq i32 %93, %94
  br i1 %95, label %96, label %100

96:                                               ; preds = %89
  %97 = tail call noalias noundef nonnull dereferenceable(72) ptr @_Znwm(i64 noundef 72) #4
  invoke void @_ZN8R3CircleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(72) %97, ptr noundef nonnull align 8 dereferenceable(72) %0)
          to label %149 unwind label %98

98:                                               ; preds = %96
  %99 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %97, i64 noundef 72) #5
  br label %150

100:                                              ; preds = %89
  %101 = load ptr, ptr %0, align 8, !tbaa !5
  %102 = getelementptr inbounds i8, ptr %101, i64 184
  %103 = load ptr, ptr %102, align 8
  %104 = tail call noundef i32 %103(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %105 = tail call noundef i32 @_ZN9R3Ellipse8CLASS_IDEv()
  %106 = icmp eq i32 %104, %105
  br i1 %106, label %107, label %111

107:                                              ; preds = %100
  %108 = tail call noalias noundef nonnull dereferenceable(176) ptr @_Znwm(i64 noundef 176) #4
  invoke void @_ZN9R3EllipseC1ERKS_(ptr noundef nonnull align 8 dereferenceable(176) %108, ptr noundef nonnull align 8 dereferenceable(176) %0)
          to label %149 unwind label %109

109:                                              ; preds = %107
  %110 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %108, i64 noundef 176) #5
  br label %150

111:                                              ; preds = %100
  %112 = load ptr, ptr %0, align 8, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %112, i64 184
  %114 = load ptr, ptr %113, align 8
  %115 = tail call noundef i32 %114(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %116 = tail call noundef i32 @_ZN11R3Rectangle8CLASS_IDEv()
  %117 = icmp eq i32 %115, %116
  br i1 %117, label %118, label %122

118:                                              ; preds = %111
  %119 = tail call noalias noundef nonnull dereferenceable(120) ptr @_Znwm(i64 noundef 120) #4
  invoke void @_ZN11R3RectangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(120) %119, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %149 unwind label %120

120:                                              ; preds = %118
  %121 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %119, i64 noundef 120) #5
  br label %150

122:                                              ; preds = %111
  %123 = load ptr, ptr %0, align 8, !tbaa !5
  %124 = getelementptr inbounds i8, ptr %123, i64 184
  %125 = load ptr, ptr %124, align 8
  %126 = tail call noundef i32 %125(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %127 = tail call noundef i32 @_ZN7R3Shape8CLASS_IDEv()
  %128 = icmp eq i32 %126, %127
  br i1 %128, label %129, label %133

129:                                              ; preds = %122
  %130 = tail call noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #4
  invoke void @_ZN10R3PolylineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96) %130, ptr noundef nonnull align 8 dereferenceable(96) %0)
          to label %149 unwind label %131

131:                                              ; preds = %129
  %132 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %130, i64 noundef 96) #5
  br label %150

133:                                              ; preds = %122
  %134 = load ptr, ptr %0, align 8, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %134, i64 184
  %136 = load ptr, ptr %135, align 8
  %137 = tail call noundef i32 %136(ptr noundef nonnull align 8 dereferenceable(8) %0)
  %138 = tail call noundef i32 @_ZN7R3Shape8CLASS_IDEv()
  %139 = icmp eq i32 %137, %138
  br i1 %139, label %140, label %144

140:                                              ; preds = %133
  %141 = tail call noalias noundef nonnull dereferenceable(104) ptr @_Znwm(i64 noundef 104) #4
  invoke void @_ZN18R3CatmullRomSplineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(104) %141, ptr noundef nonnull align 8 dereferenceable(104) %0)
          to label %149 unwind label %142

142:                                              ; preds = %140
  %143 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %141, i64 noundef 104) #5
  br label %150

144:                                              ; preds = %133
  %145 = load ptr, ptr %0, align 8, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %145, i64 184
  %147 = load ptr, ptr %146, align 8
  %148 = tail call noundef i32 %147(ptr noundef nonnull align 8 dereferenceable(8) %0)
  tail call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str.1, i32 noundef %148)
  br label %149

149:                                              ; preds = %140, %129, %118, %107, %96, %85, %74, %63, %52, %41, %30, %19, %8, %144
  %.04 = phi ptr [ null, %144 ], [ %9, %8 ], [ %20, %19 ], [ %31, %30 ], [ %42, %41 ], [ %53, %52 ], [ %64, %63 ], [ %75, %74 ], [ %86, %85 ], [ %97, %96 ], [ %108, %107 ], [ %119, %118 ], [ %130, %129 ], [ %141, %140 ]
  ret ptr %.04

150:                                              ; preds = %142, %131, %120, %109, %98, %87, %76, %65, %54, %43, %32, %21, %10
  %.pn = phi { ptr, i32 } [ %11, %10 ], [ %22, %21 ], [ %33, %32 ], [ %44, %43 ], [ %55, %54 ], [ %66, %65 ], [ %77, %76 ], [ %88, %87 ], [ %99, %98 ], [ %110, %109 ], [ %121, %120 ], [ %132, %131 ], [ %143, %142 ]
  resume { ptr, i32 } %.pn
}

declare noundef i32 @_ZN5R3Box8CLASS_IDEv() local_unnamed_addr #1

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

declare void @_ZN5R3BoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

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

declare noundef i32 @_ZN13R3OrientedBox8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN13R3OrientedBoxC1ERKS_(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #1

declare noundef i32 @_ZN10R3Cylinder8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN10R3CylinderC1ERKS_(ptr noundef nonnull align 8 dereferenceable(232), ptr noundef nonnull align 8 dereferenceable(232)) unnamed_addr #1

declare noundef i32 @_ZN6R3Cone8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN6R3ConeC1ERKS_(ptr noundef nonnull align 8 dereferenceable(160), ptr noundef nonnull align 8 dereferenceable(160)) unnamed_addr #1

declare noundef i32 @_ZN11R3Ellipsoid8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN11R3EllipsoidC1ERKS_(ptr noundef nonnull align 8 dereferenceable(184), ptr noundef nonnull align 8 dereferenceable(184)) unnamed_addr #1

declare noundef i32 @_ZN8R3Sphere8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN8R3SphereC1ERKS_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #1

declare noundef i32 @_ZN10R3Triangle8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN10R3TriangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(132), ptr noundef nonnull align 8 dereferenceable(132)) unnamed_addr #1

declare noundef i32 @_ZN15R3TriangleArray8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN15R3TriangleArrayC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #1

declare noundef i32 @_ZN8R3Circle8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN8R3CircleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(72), ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #1

declare noundef i32 @_ZN9R3Ellipse8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN9R3EllipseC1ERKS_(ptr noundef nonnull align 8 dereferenceable(176), ptr noundef nonnull align 8 dereferenceable(176)) unnamed_addr #1

declare noundef i32 @_ZN11R3Rectangle8CLASS_IDEv() local_unnamed_addr #1

declare void @_ZN11R3RectangleC1ERKS_(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #1

declare void @_ZN10R3PolylineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #1

declare void @_ZN18R3CatmullRomSplineC1ERKS_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #1

declare void @_Z7RNAbortPKcz(ptr noundef, ...) local_unnamed_addr #1

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 = { 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 #3 = { 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 #4 = { builtin allocsize(0) }
attributes #5 = { 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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}


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