; LLVM IR from niessner/Matterport :: code/gaps/pkgs/R3Graphics/R3Scene.ll (ZN7R3Scene13ReadParseFileEPKcP11R3SceneNode)

; 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.RNArray.17 = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%class.RNRgb = type { [3 x double] }
%class.R4Matrix = type { [4 x [4 x double]] }
%class.R3Affine = type { %class.R3Transformation, %class.R4Matrix, %class.R4Matrix, %class.RNFlags }
%class.R3Transformation = type { ptr }
%class.RNFlags = type { i64 }
%class.R3Point = type { [3 x double] }
%class.R3Scene = type { ptr, %class.RNArray, %class.RNArray.0, %class.RNArray.1, %class.RNArray.2, %class.RNArray.3, %class.RNArray.4, %class.RNSymbolTable, %class.R3Viewer, %class.RNRgb, %class.RNRgb, ptr, ptr, ptr }
%class.RNArray = type { %class.RNVArray }
%class.RNArray.0 = type { %class.RNVArray }
%class.RNArray.1 = type { %class.RNVArray }
%class.RNArray.2 = type { %class.RNVArray }
%class.RNArray.3 = type { %class.RNVArray }
%class.RNArray.4 = type { %class.RNVArray }
%class.RNSymbolTable = type { %class.RNMap }
%class.RNMap = type { ptr }
%class.R3Viewer = type { ptr, %class.R3Camera, %class.R2Viewport }
%class.R3Camera = type { %class.R3CoordSystem, double, double, double, double, double, ptr }
%class.R3CoordSystem = type { %class.R3Point, %class.R3Triad }
%class.R3Triad = type { [3 x %class.R3Vector] }
%class.R3Vector = type { [3 x double] }
%class.R2Viewport = type { i32, i32, i32, i32 }

@stderr = external global ptr, align 8
@.str.42 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.129 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.130 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.131 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.132 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.134 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.136 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.137 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.138 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.139 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.140 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.141 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.142 = external hidden unnamed_addr constant [48 x i8], align 1

declare i32 @__gxx_personality_v0(...)

declare void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #0

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

declare void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) unnamed_addr #0

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7R3Scene14InsertMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(352), ptr noundef) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7R3Scene10InsertBrdfEP6R3Brdf(ptr noundef nonnull align 8 dereferenceable(352), ptr noundef) #5 align 2

declare void @_ZN11R3SceneNode17SetTransformationERK8R3Affine(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef nonnull align 8 dereferenceable(272)) #0

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #6

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strncmp(ptr noundef, ptr noundef, i64 noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7R3Scene13ReadParseFileEPKcP11R3SceneNode(ptr noundef nonnull align 8 dereferenceable(352) %0, ptr noundef %1, ptr noundef %2) #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca [4096 x i8], align 16
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %class.RNArray.17, align 8
  %14 = alloca [4096 x i8], align 16
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca [4096 x i8], align 16
  %19 = alloca double, align 8
  %20 = alloca [16 x double], align 16
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %class.RNRgb, align 8
  %28 = alloca i1, align 1
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca [1024 x i8], align 16
  %32 = alloca %class.R4Matrix, align 8
  %33 = alloca %class.R3Affine, align 8
  %34 = alloca i32, align 4
  %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 [4096 x i8], align 16
  %41 = alloca [4096 x i8], align 16
  %42 = alloca [4096 x i8], align 16
  %43 = alloca ptr, align 8
  %44 = alloca %class.R3Point, align 8
  %45 = alloca i1, align 1
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %46 = load ptr, ptr %5, align 8
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = icmp ne ptr %47, null
  br i1 %48, label %52, label %49

49:                                               ; preds = %3
  %50 = getelementptr inbounds %class.R3Scene, ptr %46, i32 0, i32 0
  %51 = load ptr, ptr %50, align 8, !tbaa !9
  store ptr %51, ptr %7, align 8, !tbaa !5
  br label %52

52:                                               ; preds = %49, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = call noalias ptr @fopen(ptr noundef %53, ptr noundef @.str.42)
  store ptr %54, ptr %8, align 8, !tbaa !5
  %55 = icmp ne ptr %54, null
  br i1 %55, label %60, label %56

56:                                               ; preds = %52
  %57 = load ptr, ptr @stderr, align 8, !tbaa !5
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %57, ptr noundef @.str.43, ptr noundef %58) #8
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %362

60:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 4096, ptr %10) #8
  %61 = getelementptr inbounds [4096 x i8], ptr %10, i64 0, i64 0
  %62 = load ptr, ptr %8, align 8, !tbaa !5
  %63 = call ptr @fgets(ptr noundef %61, i32 noundef 4096, ptr noundef %62)
  %64 = icmp ne ptr %63, null
  br i1 %64, label %69, label %65

65:                                               ; preds = %60
  %66 = load ptr, ptr @stderr, align 8, !tbaa !5
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef @.str.128, ptr noundef %67) #8
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %361

69:                                               ; preds = %60
  %70 = getelementptr inbounds [4096 x i8], ptr %10, i64 0, i64 0
  %71 = call i32 @strncmp(ptr noundef %70, ptr noundef @.str.129, i64 noundef 16) #9
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %77

73:                                               ; preds = %69
  %74 = load ptr, ptr @stderr, align 8, !tbaa !5
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %74, ptr noundef @.str.130, ptr noundef %75) #8
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %361

77:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  store i32 0, ptr %11, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  store i32 0, ptr %12, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #8
  call void @_ZN7RNArrayIP7R3ShapeEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13)
  call void @llvm.lifetime.start.p0(i64 4096, ptr %14) #8
  call void @llvm.memset.p0.i64(ptr align 16 %14, i8 0, i64 4096, i1 false)
  %78 = getelementptr inbounds <{ i8, [4095 x i8] }>, ptr %14, i32 0, i32 0
  store i8 46, ptr %78, align 16
  br label %79

79:                                               ; preds = %353, %351, %77
  %80 = getelementptr inbounds [4096 x i8], ptr %10, i64 0, i64 0
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = invoke ptr @fgets(ptr noundef %80, i32 noundef 4096, ptr noundef %81)
          to label %83 unwind label %104

83:                                               ; preds = %79
  %84 = icmp ne ptr %82, null
  br i1 %84, label %85, label %355

85:                                               ; preds = %83
  %86 = load i32, ptr %11, align 4, !tbaa !29
  %87 = add nsw i32 %86, 1
  store i32 %87, ptr %11, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %88 = getelementptr inbounds [4096 x i8], ptr %10, i64 0, i64 0
  store ptr %88, ptr %17, align 8, !tbaa !5
  br label %89

89:                                               ; preds = %101, %85
  %90 = load ptr, ptr %17, align 8, !tbaa !5
  %91 = load i8, ptr %90, align 1, !tbaa !30
  %92 = icmp ne i8 %91, 0
  br i1 %92, label %93, label %99

93:                                               ; preds = %89
  %94 = load ptr, ptr %17, align 8, !tbaa !5
  %95 = load i8, ptr %94, align 1, !tbaa !30
  %96 = sext i8 %95 to i32
  %97 = call i32 @isspace(i32 noundef %96) #9
  %98 = icmp ne i32 %97, 0
  br label %99

99:                                               ; preds = %93, %89
  %100 = phi i1 [ false, %89 ], [ %98, %93 ]
  br i1 %100, label %101, label %108

101:                                              ; preds = %99
  %102 = load ptr, ptr %17, align 8, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %102, i32 1
  store ptr %103, ptr %17, align 8, !tbaa !5
  br label %89, !llvm.loop !31

104:                                              ; preds = %355, %79
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %15, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %16, align 4
  br label %360

108:                                              ; preds = %99
  %109 = load ptr, ptr %17, align 8, !tbaa !5
  %110 = icmp ne ptr %109, null
  br i1 %110, label %112, label %111

111:                                              ; preds = %108
  store i32 2, ptr %9, align 4
  br label %351, !llvm.loop !33

112:                                              ; preds = %108
  %113 = load ptr, ptr %17, align 8, !tbaa !5
  %114 = load i8, ptr %113, align 1, !tbaa !30
  %115 = sext i8 %114 to i32
  %116 = icmp eq i32 %115, 35
  br i1 %116, label %117, label %118

117:                                              ; preds = %112
  store i32 2, ptr %9, align 4
  br label %351, !llvm.loop !33

118:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4096, ptr %18) #8
  %119 = load ptr, ptr %17, align 8, !tbaa !5
  %120 = getelementptr inbounds [4096 x i8], ptr %18, i64 0, i64 0
  %121 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %119, ptr noundef @.str.44, ptr noundef %120) #8
  %122 = icmp eq i32 %121, 1
  br i1 %122, label %123, label %349

123:                                              ; preds = %118
  %124 = getelementptr inbounds [4096 x i8], ptr %18, i64 0, i64 0
  %125 = call i32 @strcmp(ptr noundef %124, ptr noundef @.str.131) #9
  %126 = icmp ne i32 %125, 0
  br i1 %126, label %273, label %127

127:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 128, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %128 = load ptr, ptr %17, align 8, !tbaa !5
  %129 = getelementptr inbounds [4096 x i8], ptr %18, i64 0, i64 0
  %130 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 0
  %131 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 1
  %132 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 2
  %133 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 3
  %134 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 4
  %135 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 5
  %136 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 6
  %137 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 7
  %138 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 8
  %139 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 9
  %140 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 10
  %141 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 11
  %142 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 12
  %143 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 13
  %144 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 14
  %145 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 15
  %146 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %128, ptr noundef @.str.132, ptr noundef %129, ptr noundef %21, ptr noundef %22, ptr noundef %130, ptr noundef %131, ptr noundef %132, ptr noundef %133, ptr noundef %134, ptr noundef %135, ptr noundef %136, ptr noundef %137, ptr noundef %138, ptr noundef %139, ptr noundef %140, ptr noundef %141, ptr noundef %142, ptr noundef %143, ptr noundef %144, ptr noundef %145, ptr noundef %19, ptr noundef %23, ptr noundef %23, ptr noundef %23, ptr noundef %23) #8
  %147 = icmp ne i32 %146, 24
  br i1 %147, label %148, label %153

148:                                              ; preds = %127
  %149 = load ptr, ptr @stderr, align 8, !tbaa !5
  %150 = load i32, ptr %11, align 4, !tbaa !29
  %151 = load ptr, ptr %6, align 8, !tbaa !5
  %152 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %149, ptr noundef @.str.133, i32 noundef %150, ptr noundef %151) #8
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %207

153:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %154 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 432) #10
          to label %155 unwind label %210

155:                                              ; preds = %153
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %154, ptr noundef %46)
          to label %156 unwind label %214

156:                                              ; preds = %155
  store ptr %154, ptr %24, align 8, !tbaa !5
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  %158 = load ptr, ptr %24, align 8, !tbaa !5
  invoke void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432) %157, ptr noundef %158)
          to label %159 unwind label %210

159:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %160 = load i32, ptr %22, align 4, !tbaa !29
  %161 = invoke noundef ptr @_ZNK7RNArrayIP7R3ShapeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %13, i32 noundef %160)
          to label %162 unwind label %218

162:                                              ; preds = %159
  store ptr %161, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %163 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 184) #10
          to label %164 unwind label %222

164:                                              ; preds = %162
  store i1 true, ptr %28, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #8
  %165 = load double, ptr %19, align 8, !tbaa !34
  %166 = fadd double 2.500000e-01, %165
  invoke void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %27, double noundef 0.000000e+00, double noundef %166, double noundef 0.000000e+00)
          to label %167 unwind label %226

167:                                              ; preds = %164
  %168 = load double, ptr %19, align 8, !tbaa !34
  %169 = fadd double 2.500000e-01, %168
  invoke void @_ZN6R3BrdfC1ERK5RNRgbdddPKc(ptr noundef nonnull align 8 dereferenceable(180) %163, ptr noundef nonnull align 8 dereferenceable(24) %27, double noundef 0.000000e+00, double noundef %169, double noundef 1.000000e+00, ptr noundef null)
          to label %170 unwind label %226

170:                                              ; preds = %167
  store i1 false, ptr %28, align 1
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  store ptr %163, ptr %26, align 8, !tbaa !5
  %171 = load ptr, ptr %26, align 8, !tbaa !5
  invoke void @_ZN7R3Scene10InsertBrdfEP6R3Brdf(ptr noundef nonnull align 8 dereferenceable(352) %46, ptr noundef %171)
          to label %172 unwind label %222

172:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %173 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 48) #10
          to label %174 unwind label %233

174:                                              ; preds = %172
  %175 = load ptr, ptr %26, align 8, !tbaa !5
  invoke void @_ZN10R3MaterialC1EPK6R3BrdfPKc(ptr noundef nonnull align 8 dereferenceable(48) %173, ptr noundef %175, ptr noundef null)
          to label %176 unwind label %237

176:                                              ; preds = %174
  store ptr %173, ptr %29, align 8, !tbaa !5
  %177 = load ptr, ptr %29, align 8, !tbaa !5
  invoke void @_ZN7R3Scene14InsertMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(352) %46, ptr noundef %177)
          to label %178 unwind label %233

178:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %179 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #10
          to label %180 unwind label %241

180:                                              ; preds = %178
  invoke void @_ZN14R3SceneElementC1EP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %179, ptr noundef null)
          to label %181 unwind label %245

181:                                              ; preds = %180
  store ptr %179, ptr %30, align 8, !tbaa !5
  %182 = load ptr, ptr %30, align 8, !tbaa !5
  %183 = load ptr, ptr %29, align 8, !tbaa !5
  invoke void @_ZN14R3SceneElement11SetMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %182, ptr noundef %183)
          to label %184 unwind label %241

184:                                              ; preds = %181
  %185 = load ptr, ptr %30, align 8, !tbaa !5
  %186 = load ptr, ptr %25, align 8, !tbaa !5
  invoke void @_ZN14R3SceneElement11InsertShapeEP7R3Shape(ptr noundef nonnull align 8 dereferenceable(96) %185, ptr noundef %186)
          to label %187 unwind label %241

187:                                              ; preds = %184
  %188 = load ptr, ptr %24, align 8, !tbaa !5
  %189 = load ptr, ptr %30, align 8, !tbaa !5
  invoke void @_ZN11R3SceneNode13InsertElementEP14R3SceneElement(ptr noundef nonnull align 8 dereferenceable(432) %188, ptr noundef %189)
          to label %190 unwind label %241

190:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 1024, ptr %31) #8
  %191 = getelementptr inbounds [1024 x i8], ptr %31, i64 0, i64 0
  %192 = load i32, ptr %12, align 4, !tbaa !29
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %12, align 4, !tbaa !29
  %194 = load i32, ptr %22, align 4, !tbaa !29
  %195 = load double, ptr %19, align 8, !tbaa !34
  %196 = fmul double 1.000000e+03, %195
  %197 = fptosi double %196 to i32
  %198 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %191, ptr noundef @.str.134, i32 noundef %192, i32 noundef %194, i32 noundef %197) #8
  %199 = load ptr, ptr %24, align 8, !tbaa !5
  %200 = getelementptr inbounds [1024 x i8], ptr %31, i64 0, i64 0
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %199, ptr noundef %200)
          to label %201 unwind label %249

201:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 128, ptr %32) #8
  %202 = getelementptr inbounds [16 x double], ptr %20, i64 0, i64 0
  invoke void @_ZN8R4MatrixC1EPKd(ptr noundef nonnull align 8 dereferenceable(128) %32, ptr noundef %202)
          to label %203 unwind label %253

203:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 272, ptr %33) #8
  invoke void @_ZN8R3AffineC1ERK8R4Matrixi(ptr noundef nonnull align 8 dereferenceable(272) %33, ptr noundef nonnull align 8 dereferenceable(128) %32, i32 noundef 0)
          to label %204 unwind label %257

204:                                              ; preds = %203
  %205 = load ptr, ptr %24, align 8, !tbaa !5
  invoke void @_ZN11R3SceneNode17SetTransformationERK8R3Affine(ptr noundef nonnull align 8 dereferenceable(432) %205, ptr noundef nonnull align 8 dereferenceable(272) %33)
          to label %206 unwind label %261

206:                                              ; preds = %204
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %33) #8
  call void @llvm.lifetime.end.p0(i64 272, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 1024, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  store i32 0, ptr %9, align 4
  br label %207

207:                                              ; preds = %206, %148
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  %208 = load i32, ptr %9, align 4
  switch i32 %208, label %350 [
    i32 0, label %209
  ]

209:                                              ; preds = %207
  br label %348

210:                                              ; preds = %156, %153
  %211 = landingpad { ptr, i32 }
          cleanup
  %212 = extractvalue { ptr, i32 } %211, 0
  store ptr %212, ptr %15, align 8
  %213 = extractvalue { ptr, i32 } %211, 1
  store i32 %213, ptr %16, align 4
  br label %272

214:                                              ; preds = %155
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %15, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %154, i64 noundef 432) #11
  br label %272

218:                                              ; preds = %159
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %15, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %16, align 4
  br label %271

222:                                              ; preds = %170, %162
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %15, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %16, align 4
  br label %270

226:                                              ; preds = %167, %164
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %15, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  %230 = load i1, ptr %28, align 1
  br i1 %230, label %231, label %232

231:                                              ; preds = %226
  call void @_ZdlPvm(ptr noundef %163, i64 noundef 184) #11
  br label %232

232:                                              ; preds = %231, %226
  br label %270

233:                                              ; preds = %176, %172
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %15, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %16, align 4
  br label %269

237:                                              ; preds = %174
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %15, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %173, i64 noundef 48) #11
  br label %269

241:                                              ; preds = %187, %184, %181, %178
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %15, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %16, align 4
  br label %268

245:                                              ; preds = %180
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %15, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %16, align 4
  call void @_ZdlPvm(ptr noundef %179, i64 noundef 96) #11
  br label %268

249:                                              ; preds = %190
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %15, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %16, align 4
  br label %267

253:                                              ; preds = %201
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %15, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %16, align 4
  br label %266

257:                                              ; preds = %203
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %15, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %16, align 4
  br label %265

261:                                              ; preds = %204
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %15, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %16, align 4
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %33) #8
  br label %265

265:                                              ; preds = %261, %257
  call void @llvm.lifetime.end.p0(i64 272, ptr %33) #8
  br label %266

266:                                              ; preds = %265, %253
  call void @llvm.lifetime.end.p0(i64 128, ptr %32) #8
  br label %267

267:                                              ; preds = %266, %249
  call void @llvm.lifetime.end.p0(i64 1024, ptr %31) #8
  br label %268

268:                                              ; preds = %267, %245, %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %269

269:                                              ; preds = %268, %237, %233
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %270

270:                                              ; preds = %269, %232, %222
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %271

271:                                              ; preds = %270, %218
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %272

272:                                              ; preds = %271, %214, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %354

273:                                              ; preds = %123
  %274 = getelementptr inbounds [4096 x i8], ptr %18, i64 0, i64 0
  %275 = call i32 @strcmp(ptr noundef %274, ptr noundef @.str.135) #9
  %276 = icmp ne i32 %275, 0
  br i1 %276, label %330, label %277

277:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 4096, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 4096, ptr %41) #8
  %278 = load ptr, ptr %17, align 8, !tbaa !5
  %279 = getelementptr inbounds [4096 x i8], ptr %18, i64 0, i64 0
  %280 = getelementptr inbounds [4096 x i8], ptr %40, i64 0, i64 0
  %281 = getelementptr inbounds [4096 x i8], ptr %41, i64 0, i64 0
  %282 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %278, ptr noundef @.str.136, ptr noundef %279, ptr noundef %34, ptr noundef %35, ptr noundef %36, ptr noundef %37, ptr noundef %38, ptr noundef %39, ptr noundef %280, ptr noundef %281, ptr noundef %34, ptr noundef %34, ptr noundef %34, ptr noundef %34, ptr noundef %34) #8
  %283 = icmp ne i32 %282, 14
  br i1 %283, label %284, label %289

284:                                              ; preds = %277
  %285 = load ptr, ptr @stderr, align 8, !tbaa !5
  %286 = load i32, ptr %11, align 4, !tbaa !29
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %285, ptr noundef @.str.137, i32 noundef %286, ptr noundef %287) #8
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %326

289:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 4096, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  store ptr null, ptr %43, align 8, !tbaa !5
  %290 = getelementptr inbounds [4096 x i8], ptr %41, i64 0, i64 0
  %291 = call i32 @strcmp(ptr noundef %290, ptr noundef @.str.138) #9
  %292 = icmp ne i32 %291, 0
  br i1 %292, label %293, label %309

293:                                              ; preds = %289
  %294 = getelementptr inbounds [4096 x i8], ptr %42, i64 0, i64 0
  %295 = getelementptr inbounds [4096 x i8], ptr %14, i64 0, i64 0
  %296 = getelementptr inbounds [4096 x i8], ptr %41, i64 0, i64 0
  %297 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %294, ptr noundef @.str.139, ptr noundef %295, ptr noundef %296) #8
  %298 = getelementptr inbounds [4096 x i8], ptr %42, i64 0, i64 0
  %299 = invoke noundef ptr @_ZL8ReadMeshPKc(ptr noundef %298)
          to label %300 unwind label %304

300:                                              ; preds = %293
  store ptr %299, ptr %43, align 8, !tbaa !5
  %301 = load ptr, ptr %43, align 8, !tbaa !5
  %302 = icmp ne ptr %301, null
  br i1 %302, label %308, label %303

303:                                              ; preds = %300
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %325

304:                                              ; preds = %321, %309, %293
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %15, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %16, align 4
  br label %329

308:                                              ; preds = %300
  br label %321

309:                                              ; preds = %289
  %310 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #10
          to label %311 unwind label %304

311:                                              ; preds = %309
  store i1 true, ptr %45, align 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %44) #8
  invoke void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %44, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %312 unwind label %314

312:                                              ; preds = %311
  invoke void @_ZN8R3SphereC1ERK7R3Pointd(ptr noundef nonnull align 8 dereferenceable(40) %310, ptr noundef nonnull align 8 dereferenceable(24) %44, double noundef 0.000000e+00)
          to label %313 unwind label %314

313:                                              ; preds = %312
  store i1 false, ptr %45, align 1
  store ptr %310, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %44) #8
  br label %321

314:                                              ; preds = %312, %311
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %15, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %44) #8
  %318 = load i1, ptr %45, align 1
  br i1 %318, label %319, label %320

319:                                              ; preds = %314
  call void @_ZdlPvm(ptr noundef %310, i64 noundef 40) #11
  br label %320

320:                                              ; preds = %319, %314
  br label %329

321:                                              ; preds = %313, %308
  %322 = load ptr, ptr %43, align 8, !tbaa !5
  %323 = invoke noundef ptr @_ZN7RNArrayIP7R3ShapeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef %322)
          to label %324 unwind label %304

324:                                              ; preds = %321
  store i32 0, ptr %9, align 4
  br label %325

325:                                              ; preds = %324, %303
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4096, ptr %42) #8
  br label %326

326:                                              ; preds = %325, %284
  call void @llvm.lifetime.end.p0(i64 4096, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4096, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  %327 = load i32, ptr %9, align 4
  switch i32 %327, label %350 [
    i32 0, label %328
  ]

328:                                              ; preds = %326
  br label %347

329:                                              ; preds = %320, %304
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4096, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4096, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4096, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %354

330:                                              ; preds = %273
  %331 = getelementptr inbounds [4096 x i8], ptr %18, i64 0, i64 0
  %332 = call i32 @strcmp(ptr noundef %331, ptr noundef @.str.140) #9
  %333 = icmp ne i32 %332, 0
  br i1 %333, label %346, label %334

334:                                              ; preds = %330
  %335 = load ptr, ptr %17, align 8, !tbaa !5
  %336 = getelementptr inbounds [4096 x i8], ptr %18, i64 0, i64 0
  %337 = getelementptr inbounds [4096 x i8], ptr %14, i64 0, i64 0
  %338 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %335, ptr noundef @.str.141, ptr noundef %336, ptr noundef %337) #8
  %339 = icmp ne i32 %338, 2
  br i1 %339, label %340, label %345

340:                                              ; preds = %334
  %341 = load ptr, ptr @stderr, align 8, !tbaa !5
  %342 = load i32, ptr %11, align 4, !tbaa !29
  %343 = load ptr, ptr %6, align 8, !tbaa !5
  %344 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %341, ptr noundef @.str.142, i32 noundef %342, ptr noundef %343) #8
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %350

345:                                              ; preds = %334
  br label %346

346:                                              ; preds = %345, %330
  br label %347

347:                                              ; preds = %346, %328
  br label %348

348:                                              ; preds = %347, %209
  br label %349

349:                                              ; preds = %348, %118
  store i32 0, ptr %9, align 4
  br label %350

350:                                              ; preds = %349, %340, %326, %207
  call void @llvm.lifetime.end.p0(i64 4096, ptr %18) #8
  br label %351

351:                                              ; preds = %350, %117, %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  %352 = load i32, ptr %9, align 4
  switch i32 %352, label %359 [
    i32 0, label %353
    i32 2, label %79
  ]

353:                                              ; preds = %351
  br label %79, !llvm.loop !33

354:                                              ; preds = %329, %272
  call void @llvm.lifetime.end.p0(i64 4096, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %360

355:                                              ; preds = %83
  %356 = load ptr, ptr %8, align 8, !tbaa !5
  %357 = invoke i32 @fclose(ptr noundef %356)
          to label %358 unwind label %104

358:                                              ; preds = %355
  store i32 1, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %359

359:                                              ; preds = %358, %351
  call void @llvm.lifetime.end.p0(i64 4096, ptr %14) #8
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  br label %361

360:                                              ; preds = %354, %104
  call void @llvm.lifetime.end.p0(i64 4096, ptr %14) #8
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4096, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  br label %364

361:                                              ; preds = %359, %73, %65
  call void @llvm.lifetime.end.p0(i64 4096, ptr %10) #8
  br label %362

362:                                              ; preds = %361, %56
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  %363 = load i32, ptr %4, align 4
  ret i32 %363

364:                                              ; preds = %360
  %365 = load ptr, ptr %15, align 8
  %366 = load i32, ptr %16, align 4
  %367 = insertvalue { ptr, i32 } poison, ptr %365, 0
  %368 = insertvalue { ptr, i32 } %367, i32 %366, 1
  resume { ptr, i32 } %368
}

; Function Attrs: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #6

declare void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) #0

declare void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) #0

; Function Attrs: mustprogress uwtable
declare hidden noundef ptr @_ZL8ReadMeshPKc(ptr noundef) #5

declare void @_ZN14R3SceneElementC1EP10R3Material(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) unnamed_addr #0

declare void @_ZN14R3SceneElement11InsertShapeEP7R3Shape(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) #0

declare void @_ZN11R3SceneNode13InsertElementEP14R3SceneElement(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) #0

declare noalias ptr @fopen(ptr noundef, ptr noundef) #0

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

declare void @_ZN8R3SphereC1ERK7R3Pointd(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(24), double noundef) unnamed_addr #0

declare void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #0

declare void @_ZN8R4MatrixC1EPKd(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) unnamed_addr #0

declare void @_ZN8R3AffineC1ERK8R4Matrixi(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(128), i32 noundef) unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272)) unnamed_addr #6

declare i32 @fclose(ptr noundef) #0

declare ptr @fgets(ptr noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind willreturn memory(read)
declare i32 @isspace(i32 noundef) #4

; Function Attrs: nounwind
declare i32 @__isoc99_sscanf(ptr noundef, ptr noundef, ...) #6

declare void @_ZN14R3SceneElement11SetMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7RNArrayIP7R3ShapeEC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK7RNArrayIP7R3ShapeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #5 align 2

declare void @_ZN6R3BrdfC1ERK5RNRgbdddPKc(ptr noundef nonnull align 8 dereferenceable(180), ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef, ptr noundef) unnamed_addr #0

declare void @_ZN10R3MaterialC1EPK6R3BrdfPKc(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef) unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN7RNArrayIP7R3ShapeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #5 align 2

; Function Attrs: nounwind
declare void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6

attributes #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 = { 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 #2 = { 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 #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { 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 0}
!10 = !{!"_ZTS7R3Scene", !6, i64 0, !11, i64 8, !14, i64 24, !15, i64 40, !16, i64 56, !17, i64 72, !18, i64 88, !19, i64 104, !21, i64 112, !28, i64 280, !28, i64 304, !6, i64 328, !6, i64 336, !6, i64 344}
!11 = !{!"_ZTS7RNArrayIP11R3SceneNodeE", !12, i64 0}
!12 = !{!"_ZTS8RNVArray", !6, i64 0, !13, i64 8, !13, i64 12}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTS7RNArrayIP7R3LightE", !12, i64 0}
!15 = !{!"_ZTS7RNArrayIP10R3MaterialE", !12, i64 0}
!16 = !{!"_ZTS7RNArrayIP6R3BrdfE", !12, i64 0}
!17 = !{!"_ZTS7RNArrayIP9R2TextureE", !12, i64 0}
!18 = !{!"_ZTS7RNArrayIP7R3SceneE", !12, i64 0}
!19 = !{!"_ZTS13RNSymbolTableIPKcE", !20, i64 0}
!20 = !{!"_ZTS5RNMapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKcE", !6, i64 0}
!21 = !{!"_ZTS8R3Viewer", !22, i64 8, !27, i64 152}
!22 = !{!"_ZTS8R3Camera", !23, i64 0, !26, i64 96, !26, i64 104, !26, i64 112, !26, i64 120, !26, i64 128, !6, i64 136}
!23 = !{!"_ZTS13R3CoordSystem", !24, i64 0, !25, i64 24}
!24 = !{!"_ZTS7R3Point", !7, i64 0}
!25 = !{!"_ZTS7R3Triad", !7, i64 0}
!26 = !{!"double", !7, i64 0}
!27 = !{!"_ZTS10R2Viewport", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12}
!28 = !{!"_ZTS5RNRgb", !7, i64 0}
!29 = !{!13, !13, i64 0}
!30 = !{!7, !7, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = !{!26, !26, 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.RNArray.17 = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%class.RNRgb = type { [3 x double] }
%class.R4Matrix = type { [4 x [4 x double]] }
%class.R3Affine = type { %class.R3Transformation, %class.R4Matrix, %class.R4Matrix, %class.RNFlags }
%class.R3Transformation = type { ptr }
%class.RNFlags = type { i64 }
%class.R3Point = type { [3 x double] }

@stderr = external local_unnamed_addr global ptr, align 8
@.str.42 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.129 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.130 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.131 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.132 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.134 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.136 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.137 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.138 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.139 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.140 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.141 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.142 = external hidden unnamed_addr constant [48 x i8], align 1

declare i32 @__gxx_personality_v0(...)

declare void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #0

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

declare void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) unnamed_addr #0

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7R3Scene14InsertMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(352), ptr noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7R3Scene10InsertBrdfEP6R3Brdf(ptr noundef nonnull align 8 dereferenceable(352), ptr noundef) local_unnamed_addr #5 align 2

declare void @_ZN11R3SceneNode17SetTransformationERK8R3Affine(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strncmp(ptr nocapture noundef, ptr nocapture noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7R3Scene13ReadParseFileEPKcP11R3SceneNode(ptr noundef nonnull align 8 dereferenceable(352) %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca [4096 x i8], align 16
  %5 = alloca %class.RNArray.17, align 8
  %6 = alloca [4096 x i8], align 16
  %7 = alloca [4096 x i8], align 16
  %8 = alloca double, align 8
  %9 = alloca [16 x double], align 16
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %class.RNRgb, align 8
  %14 = alloca [1024 x i8], align 16
  %15 = alloca %class.R4Matrix, align 8
  %16 = alloca %class.R3Affine, align 8
  %17 = alloca i32, align 4
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca [4096 x i8], align 16
  %24 = alloca [4096 x i8], align 16
  %25 = alloca [4096 x i8], align 16
  %26 = alloca %class.R3Point, align 8
  %.not = icmp eq ptr %2, null
  %27 = load ptr, ptr %0, align 8
  %spec.select = select i1 %.not, ptr %27, ptr %2
  %28 = tail call noalias ptr @fopen(ptr noundef %1, ptr noundef nonnull @.str.42)
  %.not87 = icmp eq ptr %28, null
  br i1 %.not87, label %29, label %32

29:                                               ; preds = %3
  %30 = load ptr, ptr @stderr, align 8, !tbaa !5
  %31 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %30, ptr noundef nonnull @.str.43, ptr noundef %1) #10
  br label %180

32:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %4) #11
  %33 = call ptr @fgets(ptr noundef nonnull %4, i32 noundef 4096, ptr noundef nonnull %28)
  %.not88 = icmp eq ptr %33, null
  br i1 %.not88, label %34, label %37

34:                                               ; preds = %32
  %35 = load ptr, ptr @stderr, align 8, !tbaa !5
  %36 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %35, ptr noundef nonnull @.str.128, ptr noundef %1) #10
  br label %179

37:                                               ; preds = %32
  %38 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %4, ptr noundef nonnull dereferenceable(1) @.str.129, i64 noundef 16) #12
  %.not89 = icmp eq i32 %38, 0
  br i1 %.not89, label %42, label %39

39:                                               ; preds = %37
  %40 = load ptr, ptr @stderr, align 8, !tbaa !5
  %41 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %40, ptr noundef nonnull @.str.130, ptr noundef %1) #10
  br label %179

42:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #11
  call void @_ZN7RNArrayIP7R3ShapeEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5)
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %6) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(4096) %6, i8 0, i64 4096, i1 false)
  store i8 46, ptr %6, align 16
  %43 = call ptr @fgets(ptr noundef nonnull %4, i32 noundef 4096, ptr noundef nonnull %28)
  %.not90157 = icmp eq ptr %43, null
  br i1 %.not90157, label %._crit_edge, label %.lr.ph160

.lr.ph160:                                        ; preds = %42
  %44 = getelementptr inbounds i8, ptr %9, i64 8
  %45 = getelementptr inbounds i8, ptr %9, i64 16
  %46 = getelementptr inbounds i8, ptr %9, i64 24
  %47 = getelementptr inbounds i8, ptr %9, i64 32
  %48 = getelementptr inbounds i8, ptr %9, i64 40
  %49 = getelementptr inbounds i8, ptr %9, i64 48
  %50 = getelementptr inbounds i8, ptr %9, i64 56
  %51 = getelementptr inbounds i8, ptr %9, i64 64
  %52 = getelementptr inbounds i8, ptr %9, i64 72
  %53 = getelementptr inbounds i8, ptr %9, i64 80
  %54 = getelementptr inbounds i8, ptr %9, i64 88
  %55 = getelementptr inbounds i8, ptr %9, i64 96
  %56 = getelementptr inbounds i8, ptr %9, i64 104
  %57 = getelementptr inbounds i8, ptr %9, i64 112
  %58 = getelementptr inbounds i8, ptr %9, i64 120
  br label %59

59:                                               ; preds = %.lr.ph160, %.backedge
  %.056159 = phi i32 [ 0, %.lr.ph160 ], [ %60, %.backedge ]
  %.057158 = phi i32 [ 0, %.lr.ph160 ], [ %.461201, %.backedge ]
  %60 = add nuw nsw i32 %.056159, 1
  %61 = load i8, ptr %4, align 16, !tbaa !9
  %.not91155 = icmp eq i8 %61, 0
  br i1 %.not91155, label %.critedge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %59, %65
  %62 = phi i8 [ %67, %65 ], [ %61, %59 ]
  %.062156 = phi ptr [ %66, %65 ], [ %4, %59 ]
  %63 = sext i8 %62 to i32
  %64 = call i32 @isspace(i32 noundef %63) #12
  %.not92 = icmp eq i32 %64, 0
  br i1 %.not92, label %.critedge, label %65

65:                                               ; preds = %.lr.ph
  %66 = getelementptr inbounds i8, ptr %.062156, i64 1
  %67 = load i8, ptr %66, align 1, !tbaa !9
  %.not91 = icmp eq i8 %67, 0
  br i1 %.not91, label %.critedge.thread, label %.lr.ph, !llvm.loop !10

.critedge:                                        ; preds = %.lr.ph
  %68 = icmp eq i8 %62, 35
  br i1 %68, label %.backedge, label %.critedge.thread, !llvm.loop !12

.critedge.thread:                                 ; preds = %65, %59, %.critedge
  %.062121 = phi ptr [ %.062156, %.critedge ], [ %4, %59 ], [ %66, %65 ]
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %7) #11
  %69 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.062121, ptr noundef nonnull @.str.44, ptr noundef nonnull %7) #11
  %70 = icmp eq i32 %69, 1
  br i1 %70, label %71, label %.thread202

71:                                               ; preds = %.critedge.thread
  %72 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.131) #12
  %.not93 = icmp eq i32 %72, 0
  br i1 %.not93, label %73, label %144

73:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #11
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %9) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #11
  %74 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.062121, ptr noundef nonnull @.str.132, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %9, ptr noundef nonnull %44, ptr noundef nonnull %45, ptr noundef nonnull %46, ptr noundef nonnull %47, ptr noundef nonnull %48, ptr noundef nonnull %49, ptr noundef nonnull %50, ptr noundef nonnull %51, ptr noundef nonnull %52, ptr noundef nonnull %53, ptr noundef nonnull %54, ptr noundef nonnull %55, ptr noundef nonnull %56, ptr noundef nonnull %57, ptr noundef nonnull %58, ptr noundef nonnull %8, ptr noundef nonnull %12, ptr noundef nonnull %12, ptr noundef nonnull %12, ptr noundef nonnull %12) #11
  %.not94 = icmp eq i32 %74, 24
  br i1 %.not94, label %75, label %111

75:                                               ; preds = %73
  %76 = invoke noalias noundef nonnull dereferenceable(432) ptr @_Znwm(i64 noundef 432) #13
          to label %77 unwind label %114

77:                                               ; preds = %75
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %76, ptr noundef nonnull %0)
          to label %78 unwind label %116

78:                                               ; preds = %77
  invoke void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432) %spec.select, ptr noundef nonnull %76)
          to label %79 unwind label %114

79:                                               ; preds = %78
  %80 = load i32, ptr %11, align 4, !tbaa !13
  %81 = invoke noundef ptr @_ZNK7RNArrayIP7R3ShapeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %5, i32 noundef %80)
          to label %82 unwind label %118

82:                                               ; preds = %79
  %83 = invoke noalias noundef nonnull dereferenceable(184) ptr @_Znwm(i64 noundef 184) #13
          to label %84 unwind label %120

84:                                               ; preds = %82
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #11
  %85 = load double, ptr %8, align 8, !tbaa !15
  %86 = fadd double %85, 2.500000e-01
  invoke void @_ZN5RNRgbC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %13, double noundef 0.000000e+00, double noundef %86, double noundef 0.000000e+00)
          to label %87 unwind label %122

87:                                               ; preds = %84
  %88 = load double, ptr %8, align 8, !tbaa !15
  %89 = fadd double %88, 2.500000e-01
  invoke void @_ZN6R3BrdfC1ERK5RNRgbdddPKc(ptr noundef nonnull align 8 dereferenceable(180) %83, ptr noundef nonnull align 8 dereferenceable(24) %13, double noundef 0.000000e+00, double noundef %89, double noundef 1.000000e+00, ptr noundef null)
          to label %90 unwind label %122

90:                                               ; preds = %87
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #11
  invoke void @_ZN7R3Scene10InsertBrdfEP6R3Brdf(ptr noundef nonnull align 8 dereferenceable(352) %0, ptr noundef nonnull %83)
          to label %91 unwind label %120

91:                                               ; preds = %90
  %92 = invoke noalias noundef nonnull dereferenceable(48) ptr @_Znwm(i64 noundef 48) #13
          to label %93 unwind label %124

93:                                               ; preds = %91
  invoke void @_ZN10R3MaterialC1EPK6R3BrdfPKc(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull %83, ptr noundef null)
          to label %94 unwind label %126

94:                                               ; preds = %93
  invoke void @_ZN7R3Scene14InsertMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(352) %0, ptr noundef nonnull %92)
          to label %95 unwind label %124

95:                                               ; preds = %94
  %96 = invoke noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #13
          to label %97 unwind label %128

97:                                               ; preds = %95
  invoke void @_ZN14R3SceneElementC1EP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %96, ptr noundef null)
          to label %98 unwind label %130

98:                                               ; preds = %97
  invoke void @_ZN14R3SceneElement11SetMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %96, ptr noundef nonnull %92)
          to label %99 unwind label %128

99:                                               ; preds = %98
  invoke void @_ZN14R3SceneElement11InsertShapeEP7R3Shape(ptr noundef nonnull align 8 dereferenceable(96) %96, ptr noundef %81)
          to label %100 unwind label %128

100:                                              ; preds = %99
  invoke void @_ZN11R3SceneNode13InsertElementEP14R3SceneElement(ptr noundef nonnull align 8 dereferenceable(432) %76, ptr noundef nonnull %96)
          to label %101 unwind label %128

101:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %14) #11
  %102 = add nsw i32 %.057158, 1
  %103 = load i32, ptr %11, align 4, !tbaa !13
  %104 = load double, ptr %8, align 8, !tbaa !15
  %105 = fmul double %104, 1.000000e+03
  %106 = fptosi double %105 to i32
  %107 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %14, ptr noundef nonnull dereferenceable(1) @.str.134, i32 noundef %.057158, i32 noundef %103, i32 noundef %106) #11
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %76, ptr noundef nonnull %14)
          to label %108 unwind label %132

108:                                              ; preds = %101
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %15) #11
  invoke void @_ZN8R4MatrixC1EPKd(ptr noundef nonnull align 8 dereferenceable(128) %15, ptr noundef nonnull %9)
          to label %109 unwind label %134

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 272, ptr nonnull %16) #11
  invoke void @_ZN8R3AffineC1ERK8R4Matrixi(ptr noundef nonnull align 8 dereferenceable(272) %16, ptr noundef nonnull align 8 dereferenceable(128) %15, i32 noundef 0)
          to label %110 unwind label %136

110:                                              ; preds = %109
  invoke void @_ZN11R3SceneNode17SetTransformationERK8R3Affine(ptr noundef nonnull align 8 dereferenceable(432) %76, ptr noundef nonnull align 8 dereferenceable(272) %16)
          to label %.thread unwind label %138

.thread:                                          ; preds = %110
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %16) #11
  call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %15) #11
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %14) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11
  br label %.thread202

111:                                              ; preds = %73
  %112 = load ptr, ptr @stderr, align 8, !tbaa !5
  %113 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %112, ptr noundef nonnull @.str.133, i32 noundef %60, ptr noundef %1) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11
  br label %.loopexit.loopexit

114:                                              ; preds = %78, %75
  %115 = landingpad { ptr, i32 }
          cleanup
  br label %143

116:                                              ; preds = %77
  %117 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %76, i64 noundef 432) #14
  br label %143

118:                                              ; preds = %79
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %143

120:                                              ; preds = %90, %82
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %143

122:                                              ; preds = %87, %84
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #11
  call void @_ZdlPvm(ptr noundef nonnull %83, i64 noundef 184) #14
  br label %143

124:                                              ; preds = %94, %91
  %125 = landingpad { ptr, i32 }
          cleanup
  br label %143

126:                                              ; preds = %93
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %92, i64 noundef 48) #14
  br label %143

128:                                              ; preds = %100, %99, %98, %95
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %143

130:                                              ; preds = %97
  %131 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %96, i64 noundef 96) #14
  br label %143

132:                                              ; preds = %101
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %142

134:                                              ; preds = %108
  %135 = landingpad { ptr, i32 }
          cleanup
  br label %141

136:                                              ; preds = %109
  %137 = landingpad { ptr, i32 }
          cleanup
  br label %140

138:                                              ; preds = %110
  %139 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8R3AffineD1Ev(ptr noundef nonnull align 8 dereferenceable(272) %16) #11
  br label %140

140:                                              ; preds = %138, %136
  %.pn = phi { ptr, i32 } [ %139, %138 ], [ %137, %136 ]
  call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %16) #11
  br label %141

141:                                              ; preds = %140, %134
  %.pn.pn = phi { ptr, i32 } [ %.pn, %140 ], [ %135, %134 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %15) #11
  br label %142

142:                                              ; preds = %141, %132
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %141 ], [ %133, %132 ]
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %14) #11
  br label %143

143:                                              ; preds = %118, %124, %126, %142, %130, %128, %122, %120, %116, %114
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %115, %114 ], [ %117, %116 ], [ %119, %118 ], [ %121, %120 ], [ %123, %122 ], [ %125, %124 ], [ %127, %126 ], [ %.pn.pn.pn, %142 ], [ %129, %128 ], [ %131, %130 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #11
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %9) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #11
  br label %177

144:                                              ; preds = %71
  %145 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.135) #12
  %.not103 = icmp eq i32 %145, 0
  br i1 %.not103, label %146, label %169

146:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %23) #11
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %24) #11
  %147 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.062121, ptr noundef nonnull @.str.136, ptr noundef nonnull %7, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull %22, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %17, ptr noundef nonnull %17, ptr noundef nonnull %17, ptr noundef nonnull %17, ptr noundef nonnull %17) #11
  %.not104 = icmp eq i32 %147, 14
  br i1 %.not104, label %150, label %.thread113

.thread113:                                       ; preds = %146
  %148 = load ptr, ptr @stderr, align 8, !tbaa !5
  %149 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %148, ptr noundef nonnull @.str.137, i32 noundef %60, ptr noundef %1) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  br label %.loopexit.loopexit

150:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %25) #11
  %151 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %24, ptr noundef nonnull dereferenceable(1) @.str.138) #12
  %.not105 = icmp eq i32 %151, 0
  br i1 %.not105, label %158, label %152

152:                                              ; preds = %150
  %153 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %25, ptr noundef nonnull dereferenceable(1) @.str.139, ptr noundef nonnull %6, ptr noundef nonnull %24) #11
  %154 = invoke noundef ptr @_ZL8ReadMeshPKc(ptr noundef nonnull %25)
          to label %155 unwind label %156

155:                                              ; preds = %152
  %.not106 = icmp eq ptr %154, null
  br i1 %.not106, label %167, label %165

156:                                              ; preds = %165, %158, %152
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %168

158:                                              ; preds = %150
  %159 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #13
          to label %160 unwind label %156

160:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #11
  invoke void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24) %26, double noundef 0.000000e+00, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %161 unwind label %163

161:                                              ; preds = %160
  invoke void @_ZN8R3SphereC1ERK7R3Pointd(ptr noundef nonnull align 8 dereferenceable(40) %159, ptr noundef nonnull align 8 dereferenceable(24) %26, double noundef 0.000000e+00)
          to label %162 unwind label %163

162:                                              ; preds = %161
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #11
  br label %165

163:                                              ; preds = %161, %160
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #11
  call void @_ZdlPvm(ptr noundef nonnull %159, i64 noundef 40) #14
  br label %168

165:                                              ; preds = %155, %162
  %.0 = phi ptr [ %154, %155 ], [ %159, %162 ]
  %166 = invoke noundef ptr @_ZN7RNArrayIP7R3ShapeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull %.0)
          to label %.thread116 unwind label %156

.thread116:                                       ; preds = %165
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  br label %.thread202

167:                                              ; preds = %155
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  br label %.loopexit.loopexit

168:                                              ; preds = %163, %156
  %.pn107 = phi { ptr, i32 } [ %157, %156 ], [ %164, %163 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  br label %177

169:                                              ; preds = %144
  %170 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.140) #12
  %.not110 = icmp eq i32 %170, 0
  br i1 %.not110, label %171, label %.thread202

171:                                              ; preds = %169
  %172 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.062121, ptr noundef nonnull @.str.141, ptr noundef nonnull %7, ptr noundef nonnull %6) #11
  %.not111 = icmp eq i32 %172, 2
  br i1 %.not111, label %.thread202, label %173

173:                                              ; preds = %171
  %174 = load ptr, ptr @stderr, align 8, !tbaa !5
  %175 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %174, ptr noundef nonnull @.str.142, i32 noundef %60, ptr noundef %1) #10
  br label %.loopexit.loopexit

.thread202:                                       ; preds = %169, %171, %.critedge.thread, %.thread, %.thread116
  %.360.ph = phi i32 [ %.057158, %.thread116 ], [ %102, %.thread ], [ %.057158, %.critedge.thread ], [ %.057158, %171 ], [ %.057158, %169 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %7) #11
  br label %.backedge

.backedge:                                        ; preds = %.critedge, %.thread202
  %.461201 = phi i32 [ %.360.ph, %.thread202 ], [ %.057158, %.critedge ]
  %176 = call ptr @fgets(ptr noundef nonnull %4, i32 noundef 4096, ptr noundef nonnull %28)
  %.not90 = icmp eq ptr %176, null
  br i1 %.not90, label %._crit_edge, label %59, !llvm.loop !12

177:                                              ; preds = %168, %143
  %.pn107.pn = phi { ptr, i32 } [ %.pn107, %168 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn, %143 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %7) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %6) #11
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #11
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %4) #11
  resume { ptr, i32 } %.pn107.pn

._crit_edge:                                      ; preds = %.backedge, %42
  %178 = call i32 @fclose(ptr noundef nonnull %28)
  br label %.loopexit

.loopexit.loopexit:                               ; preds = %167, %.thread113, %111, %173
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %7) #11
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %._crit_edge
  %.7 = phi i32 [ 1, %._crit_edge ], [ 0, %.loopexit.loopexit ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %6) #11
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #11
  br label %179

179:                                              ; preds = %.loopexit, %39, %34
  %.8 = phi i32 [ 0, %39 ], [ %.7, %.loopexit ], [ 0, %34 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %4) #11
  br label %180

180:                                              ; preds = %179, %29
  %.9 = phi i32 [ %.8, %179 ], [ 0, %29 ]
  ret i32 %.9
}

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #6

declare void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) local_unnamed_addr #0

declare void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare hidden noundef ptr @_ZL8ReadMeshPKc(ptr noundef) local_unnamed_addr #5

declare void @_ZN14R3SceneElementC1EP10R3Material(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) unnamed_addr #0

declare void @_ZN14R3SceneElement11InsertShapeEP7R3Shape(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) local_unnamed_addr #0

declare void @_ZN11R3SceneNode13InsertElementEP14R3SceneElement(ptr noundef nonnull align 8 dereferenceable(432), ptr noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #6

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

declare void @_ZN8R3SphereC1ERK7R3Pointd(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(24), double noundef) unnamed_addr #0

declare void @_ZN7R3PointC1Eddd(ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef) unnamed_addr #0

declare void @_ZN8R4MatrixC1EPKd(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) unnamed_addr #0

declare void @_ZN8R3AffineC1ERK8R4Matrixi(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(128), i32 noundef) unnamed_addr #0

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

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef ptr @fgets(ptr noundef, i32 noundef, ptr nocapture noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i32 @isspace(i32 noundef) local_unnamed_addr #9

; Function Attrs: nofree nounwind
declare noundef i32 @__isoc99_sscanf(ptr nocapture noundef readonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #6

declare void @_ZN14R3SceneElement11SetMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7RNArrayIP7R3ShapeEC2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK7RNArrayIP7R3ShapeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #5 align 2

declare void @_ZN6R3BrdfC1ERK5RNRgbdddPKc(ptr noundef nonnull align 8 dereferenceable(180), ptr noundef nonnull align 8 dereferenceable(24), double noundef, double noundef, double noundef, ptr noundef) unnamed_addr #0

declare void @_ZN10R3MaterialC1EPK6R3BrdfPKc(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef, ptr noundef) unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN7RNArrayIP7R3ShapeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #5 align 2

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

attributes #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 = { 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 #2 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { mustprogress nofree nounwind willreturn memory(read) "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 = { cold nounwind }
attributes #11 = { nounwind }
attributes #12 = { nounwind willreturn memory(read) }
attributes #13 = { builtin allocsize(0) }
attributes #14 = { 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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"double", !7, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass