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

; 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.R3Material = type { ptr, i32, ptr, ptr, ptr, %class.RNFlags }
%class.RNFlags = type { i64 }
%class.RNArray = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }
%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.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.R3Point = type { [3 x double] }
%class.R3Triad = type { [3 x %class.R3Vector] }
%class.R3Vector = type { [3 x double] }
%class.R2Viewport = type { i32, i32, i32, i32 }
%class.RNRgb = type { [3 x double] }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [91 x i8], align 1
@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.106 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [17 x i8], align 1
@R3default_material = external global %class.R3Material, align 8

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

declare i32 @__gxx_personality_v0(...)

; 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 #2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7R3Scene24ReadGrammarHierarchyFileEPKcP11R3SceneNode(ptr noundef nonnull align 8 dereferenceable(352) %0, ptr noundef %1, ptr noundef %2) #0 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 ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca [1024 x i8], align 16
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca %class.RNArray, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca [256 x i8], align 16
  %23 = alloca i32, align 4
  %24 = alloca [4096 x i8], align 16
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca [4096 x i8], align 16
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca [4096 x i8], align 16
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca [1024 x i8], align 16
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  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
  %40 = load ptr, ptr %5, align 8
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = icmp ne ptr %41, null
  br i1 %42, label %46, label %43

43:                                               ; preds = %3
  %44 = getelementptr inbounds %class.R3Scene, ptr %40, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8, !tbaa !9
  store ptr %45, ptr %7, align 8, !tbaa !5
  br label %46

46:                                               ; preds = %43, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #10
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = call noalias ptr @fopen(ptr noundef %47, ptr noundef @.str.42)
  store ptr %48, ptr %8, align 8, !tbaa !5
  %49 = icmp ne ptr %48, null
  br i1 %49, label %54, label %50

50:                                               ; preds = %46
  %51 = load ptr, ptr @stderr, align 8, !tbaa !5
  %52 = load ptr, ptr %6, align 8, !tbaa !5
  %53 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %51, ptr noundef @.str.43, ptr noundef %52) #10
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %453

54:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 4096, ptr %10) #10
  call void @llvm.memset.p0.i64(ptr align 16 %10, i8 0, i64 4096, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #10
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = call noundef ptr @strrchr(ptr noundef %55, i32 noundef 47) #11
  store ptr %56, ptr %11, align 8, !tbaa !5
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = icmp ne ptr %57, null
  br i1 %58, label %61, label %59

59:                                               ; preds = %54
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %60, ptr %11, align 8, !tbaa !5
  br label %64

61:                                               ; preds = %54
  %62 = load ptr, ptr %11, align 8, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %62, i32 1
  store ptr %63, ptr %11, align 8, !tbaa !5
  br label %64

64:                                               ; preds = %61, %59
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  %66 = call noundef ptr @strrchr(ptr noundef %65, i32 noundef 46) #11
  store ptr %66, ptr %12, align 8, !tbaa !5
  %67 = load ptr, ptr %12, align 8, !tbaa !5
  %68 = icmp ne ptr %67, null
  br i1 %68, label %74, label %69

69:                                               ; preds = %64
  %70 = load ptr, ptr %11, align 8, !tbaa !5
  %71 = load ptr, ptr %11, align 8, !tbaa !5
  %72 = call i64 @strlen(ptr noundef %71) #11
  %73 = getelementptr inbounds i8, ptr %70, i64 %72
  store ptr %73, ptr %12, align 8, !tbaa !5
  br label %74

74:                                               ; preds = %69, %64
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #10
  %75 = load ptr, ptr %12, align 8, !tbaa !5
  %76 = load ptr, ptr %11, align 8, !tbaa !5
  %77 = ptrtoint ptr %75 to i64
  %78 = ptrtoint ptr %76 to i64
  %79 = sub i64 %77, %78
  %80 = trunc i64 %79 to i32
  store i32 %80, ptr %13, align 4, !tbaa !29
  %81 = load i32, ptr %13, align 4, !tbaa !29
  %82 = icmp sgt i32 %81, 4095
  br i1 %82, label %83, label %84

83:                                               ; preds = %74
  store i32 4095, ptr %13, align 4, !tbaa !29
  br label %84

84:                                               ; preds = %83, %74
  %85 = getelementptr inbounds [4096 x i8], ptr %10, i64 0, i64 0
  %86 = load ptr, ptr %11, align 8, !tbaa !5
  %87 = load i32, ptr %13, align 4, !tbaa !29
  %88 = sext i32 %87 to i64
  %89 = call ptr @strncpy(ptr noundef %85, ptr noundef %86, i64 noundef %88) #10
  call void @llvm.lifetime.start.p0(i64 1024, ptr %14) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  store i32 0, ptr %15, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  store i32 1, ptr %16, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #10
  call void @_ZN7RNArrayIP11R3SceneNodeEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  store ptr null, ptr %18, align 8, !tbaa !5
  br label %90

90:                                               ; preds = %445, %443, %84
  %91 = getelementptr inbounds [1024 x i8], ptr %14, i64 0, i64 0
  %92 = load ptr, ptr %8, align 8, !tbaa !5
  %93 = invoke ptr @fgets(ptr noundef %91, i32 noundef 1023, ptr noundef %92)
          to label %94 unwind label %109

94:                                               ; preds = %90
  %95 = icmp ne ptr %93, null
  br i1 %95, label %96, label %447

96:                                               ; preds = %94
  %97 = load i32, ptr %15, align 4, !tbaa !29
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %15, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %99 = getelementptr inbounds [1024 x i8], ptr %14, i64 0, i64 0
  store ptr %99, ptr %21, align 8, !tbaa !5
  br label %100

100:                                              ; preds = %106, %96
  %101 = load ptr, ptr %21, align 8, !tbaa !5
  %102 = load i8, ptr %101, align 1, !tbaa !30
  %103 = sext i8 %102 to i32
  %104 = call i32 @isspace(i32 noundef %103) #11
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %106, label %113

106:                                              ; preds = %100
  %107 = load ptr, ptr %21, align 8, !tbaa !5
  %108 = getelementptr inbounds i8, ptr %107, i32 1
  store ptr %108, ptr %21, align 8, !tbaa !5
  br label %100, !llvm.loop !31

109:                                              ; preds = %447, %90
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %19, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %20, align 4
  br label %452

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

118:                                              ; preds = %113
  store i32 2, ptr %9, align 4
  br label %443, !llvm.loop !33

119:                                              ; preds = %113
  %120 = load ptr, ptr %21, align 8, !tbaa !5
  %121 = load i8, ptr %120, align 1, !tbaa !30
  %122 = sext i8 %121 to i32
  %123 = icmp eq i32 %122, 0
  br i1 %123, label %124, label %125

124:                                              ; preds = %119
  store i32 2, ptr %9, align 4
  br label %443, !llvm.loop !33

125:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 256, ptr %22) #10
  %126 = load ptr, ptr %21, align 8, !tbaa !5
  %127 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %128 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %126, ptr noundef @.str.44, ptr noundef %127) #10
  %129 = icmp ne i32 %128, 1
  br i1 %129, label %130, label %135

130:                                              ; preds = %125
  %131 = load ptr, ptr @stderr, align 8, !tbaa !5
  %132 = load i32, ptr %15, align 4, !tbaa !29
  %133 = load ptr, ptr %6, align 8, !tbaa !5
  %134 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %131, ptr noundef @.str.106, i32 noundef %132, ptr noundef %133) #10
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %442

135:                                              ; preds = %125
  %136 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %137 = call i32 @strcmp(ptr noundef %136, ptr noundef @.str.107) #11
  %138 = icmp ne i32 %137, 0
  br i1 %138, label %195, label %139

139:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  %140 = load ptr, ptr %21, align 8, !tbaa !5
  %141 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %142 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %140, ptr noundef @.str.112, ptr noundef %141, ptr noundef %23) #10
  %143 = icmp ne i32 %142, 2
  br i1 %143, label %144, label %149

144:                                              ; preds = %139
  %145 = load ptr, ptr @stderr, align 8, !tbaa !5
  %146 = load i32, ptr %15, align 4, !tbaa !29
  %147 = load ptr, ptr %6, align 8, !tbaa !5
  %148 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %145, ptr noundef @.str.106, i32 noundef %146, ptr noundef %147) #10
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %191

149:                                              ; preds = %139
  br label %150

150:                                              ; preds = %168, %149
  %151 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %152 unwind label %169

152:                                              ; preds = %150
  %153 = load i32, ptr %23, align 4, !tbaa !29
  %154 = icmp sle i32 %151, %153
  br i1 %154, label %155, label %187

155:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 4096, ptr %24) #10
  %156 = getelementptr inbounds [4096 x i8], ptr %24, i64 0, i64 0
  %157 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %158 unwind label %173

158:                                              ; preds = %155
  %159 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %156, ptr noundef @.str.117, i32 noundef %157) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #10
  %160 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 432) #12
          to label %161 unwind label %177

161:                                              ; preds = %158
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %160, ptr noundef %40)
          to label %162 unwind label %181

162:                                              ; preds = %161
  store ptr %160, ptr %25, align 8, !tbaa !5
  %163 = load ptr, ptr %25, align 8, !tbaa !5
  %164 = getelementptr inbounds [4096 x i8], ptr %24, i64 0, i64 0
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %163, ptr noundef %164)
          to label %165 unwind label %177

165:                                              ; preds = %162
  %166 = load ptr, ptr %25, align 8, !tbaa !5
  %167 = invoke noundef ptr @_ZN7RNArrayIP11R3SceneNodeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef %166)
          to label %168 unwind label %177

168:                                              ; preds = %165
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %24) #10
  br label %150, !llvm.loop !34

169:                                              ; preds = %187, %150
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %19, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %20, align 4
  br label %194

173:                                              ; preds = %155
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %19, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %20, align 4
  br label %186

177:                                              ; preds = %165, %162, %158
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %19, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %20, align 4
  br label %185

181:                                              ; preds = %161
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %19, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %160, i64 noundef 432) #13
  br label %185

185:                                              ; preds = %181, %177
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #10
  br label %186

186:                                              ; preds = %185, %173
  call void @llvm.lifetime.end.p0(i64 4096, ptr %24) #10
  br label %194

187:                                              ; preds = %152
  %188 = load i32, ptr %23, align 4, !tbaa !29
  %189 = invoke noundef ptr @_ZNK7RNArrayIP11R3SceneNodeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %17, i32 noundef %188)
          to label %190 unwind label %169

190:                                              ; preds = %187
  store ptr %189, ptr %18, align 8, !tbaa !5
  store i32 0, ptr %9, align 4
  br label %191

191:                                              ; preds = %190, %144
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  %192 = load i32, ptr %9, align 4
  switch i32 %192, label %442 [
    i32 0, label %193
  ]

193:                                              ; preds = %191
  br label %441

194:                                              ; preds = %186, %169
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %446

195:                                              ; preds = %135
  %196 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %197 = call i32 @strcmp(ptr noundef %196, ptr noundef @.str.118) #11
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %262, label %199

199:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  %200 = load ptr, ptr %21, align 8, !tbaa !5
  %201 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %202 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %200, ptr noundef @.str.112, ptr noundef %201, ptr noundef %26) #10
  %203 = icmp ne i32 %202, 2
  br i1 %203, label %204, label %209

204:                                              ; preds = %199
  %205 = load ptr, ptr @stderr, align 8, !tbaa !5
  %206 = load i32, ptr %15, align 4, !tbaa !29
  %207 = load ptr, ptr %6, align 8, !tbaa !5
  %208 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %205, ptr noundef @.str.106, i32 noundef %206, ptr noundef %207) #10
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %254

209:                                              ; preds = %199
  br label %210

210:                                              ; preds = %228, %209
  %211 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %212 unwind label %229

212:                                              ; preds = %210
  %213 = load i32, ptr %26, align 4, !tbaa !29
  %214 = icmp sle i32 %211, %213
  br i1 %214, label %215, label %247

215:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 4096, ptr %27) #10
  %216 = getelementptr inbounds [4096 x i8], ptr %27, i64 0, i64 0
  %217 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %218 unwind label %233

218:                                              ; preds = %215
  %219 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %216, ptr noundef @.str.117, i32 noundef %217) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  %220 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 432) #12
          to label %221 unwind label %237

221:                                              ; preds = %218
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %220, ptr noundef %40)
          to label %222 unwind label %241

222:                                              ; preds = %221
  store ptr %220, ptr %28, align 8, !tbaa !5
  %223 = load ptr, ptr %28, align 8, !tbaa !5
  %224 = getelementptr inbounds [4096 x i8], ptr %27, i64 0, i64 0
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %223, ptr noundef %224)
          to label %225 unwind label %237

225:                                              ; preds = %222
  %226 = load ptr, ptr %28, align 8, !tbaa !5
  %227 = invoke noundef ptr @_ZN7RNArrayIP11R3SceneNodeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef %226)
          to label %228 unwind label %237

228:                                              ; preds = %225
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %27) #10
  br label %210, !llvm.loop !35

229:                                              ; preds = %210
  %230 = landingpad { ptr, i32 }
          cleanup
  %231 = extractvalue { ptr, i32 } %230, 0
  store ptr %231, ptr %19, align 8
  %232 = extractvalue { ptr, i32 } %230, 1
  store i32 %232, ptr %20, align 4
  br label %261

233:                                              ; preds = %215
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %19, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %20, align 4
  br label %246

237:                                              ; preds = %225, %222, %218
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %19, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %20, align 4
  br label %245

241:                                              ; preds = %221
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %19, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %220, i64 noundef 432) #13
  br label %245

245:                                              ; preds = %241, %237
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  br label %246

246:                                              ; preds = %245, %233
  call void @llvm.lifetime.end.p0(i64 4096, ptr %27) #10
  br label %261

247:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  %248 = load i32, ptr %26, align 4, !tbaa !29
  %249 = invoke noundef ptr @_ZNK7RNArrayIP11R3SceneNodeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %17, i32 noundef %248)
          to label %250 unwind label %257

250:                                              ; preds = %247
  store ptr %249, ptr %29, align 8, !tbaa !5
  %251 = load ptr, ptr %7, align 8, !tbaa !5
  %252 = load ptr, ptr %29, align 8, !tbaa !5
  invoke void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432) %251, ptr noundef %252)
          to label %253 unwind label %257

253:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  store i32 0, ptr %9, align 4
  br label %254

254:                                              ; preds = %253, %204
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  %255 = load i32, ptr %9, align 4
  switch i32 %255, label %442 [
    i32 0, label %256
  ]

256:                                              ; preds = %254
  br label %440

257:                                              ; preds = %250, %247
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %19, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  br label %261

261:                                              ; preds = %257, %246, %229
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  br label %446

262:                                              ; preds = %195
  %263 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %264 = call i32 @strcmp(ptr noundef %263, ptr noundef @.str.119) #11
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %333, label %266

266:                                              ; preds = %262
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  %267 = load ptr, ptr %21, align 8, !tbaa !5
  %268 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %269 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %267, ptr noundef @.str.112, ptr noundef %268, ptr noundef %30) #10
  %270 = icmp ne i32 %269, 2
  br i1 %270, label %271, label %276

271:                                              ; preds = %266
  %272 = load ptr, ptr @stderr, align 8, !tbaa !5
  %273 = load i32, ptr %15, align 4, !tbaa !29
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %272, ptr noundef @.str.106, i32 noundef %273, ptr noundef %274) #10
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %329

276:                                              ; preds = %266
  %277 = load i32, ptr %30, align 4, !tbaa !29
  %278 = icmp sge i32 %277, 0
  br i1 %278, label %279, label %328

279:                                              ; preds = %276
  br label %280

280:                                              ; preds = %298, %279
  %281 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %282 unwind label %299

282:                                              ; preds = %280
  %283 = load i32, ptr %30, align 4, !tbaa !29
  %284 = icmp sle i32 %281, %283
  br i1 %284, label %285, label %317

285:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 4096, ptr %31) #10
  %286 = getelementptr inbounds [4096 x i8], ptr %31, i64 0, i64 0
  %287 = invoke noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %288 unwind label %303

288:                                              ; preds = %285
  %289 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %286, ptr noundef @.str.120, i32 noundef %287) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  %290 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 432) #12
          to label %291 unwind label %307

291:                                              ; preds = %288
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %290, ptr noundef %40)
          to label %292 unwind label %311

292:                                              ; preds = %291
  store ptr %290, ptr %32, align 8, !tbaa !5
  %293 = load ptr, ptr %32, align 8, !tbaa !5
  %294 = getelementptr inbounds [4096 x i8], ptr %31, i64 0, i64 0
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %293, ptr noundef %294)
          to label %295 unwind label %307

295:                                              ; preds = %292
  %296 = load ptr, ptr %32, align 8, !tbaa !5
  %297 = invoke noundef ptr @_ZN7RNArrayIP11R3SceneNodeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef %296)
          to label %298 unwind label %307

298:                                              ; preds = %295
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %31) #10
  br label %280, !llvm.loop !36

299:                                              ; preds = %280
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %19, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %20, align 4
  br label %332

303:                                              ; preds = %285
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %19, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %20, align 4
  br label %316

307:                                              ; preds = %295, %292, %288
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %19, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %20, align 4
  br label %315

311:                                              ; preds = %291
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %19, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %290, i64 noundef 432) #13
  br label %315

315:                                              ; preds = %311, %307
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  br label %316

316:                                              ; preds = %315, %303
  call void @llvm.lifetime.end.p0(i64 4096, ptr %31) #10
  br label %332

317:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %318 = load i32, ptr %30, align 4, !tbaa !29
  %319 = invoke noundef ptr @_ZNK7RNArrayIP11R3SceneNodeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %17, i32 noundef %318)
          to label %320 unwind label %324

320:                                              ; preds = %317
  store ptr %319, ptr %33, align 8, !tbaa !5
  %321 = load ptr, ptr %33, align 8, !tbaa !5
  %322 = load ptr, ptr %18, align 8, !tbaa !5
  invoke void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432) %321, ptr noundef %322)
          to label %323 unwind label %324

323:                                              ; preds = %320
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %328

324:                                              ; preds = %320, %317
  %325 = landingpad { ptr, i32 }
          cleanup
  %326 = extractvalue { ptr, i32 } %325, 0
  store ptr %326, ptr %19, align 8
  %327 = extractvalue { ptr, i32 } %325, 1
  store i32 %327, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %332

328:                                              ; preds = %323, %276
  store i32 0, ptr %9, align 4
  br label %329

329:                                              ; preds = %328, %271
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  %330 = load i32, ptr %9, align 4
  switch i32 %330, label %442 [
    i32 0, label %331
  ]

331:                                              ; preds = %329
  br label %439

332:                                              ; preds = %324, %316, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  br label %446

333:                                              ; preds = %262
  %334 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %335 = call i32 @strcmp(ptr noundef %334, ptr noundef @.str.121) #11
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %358, label %337

337:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %338 = load ptr, ptr %21, align 8, !tbaa !5
  %339 = call ptr @strtok(ptr noundef %338, ptr noundef @.str.122) #10
  store ptr %339, ptr %34, align 8, !tbaa !5
  %340 = load ptr, ptr %34, align 8, !tbaa !5
  %341 = icmp ne ptr %340, null
  br i1 %341, label %342, label %346

342:                                              ; preds = %337
  %343 = load ptr, ptr %34, align 8, !tbaa !5
  %344 = call i32 @strcmp(ptr noundef %343, ptr noundef @.str.121) #11
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %346, label %352

346:                                              ; preds = %342, %337
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.123, i32 noundef 3064, ptr noundef @.str.2)
          to label %347 unwind label %348

347:                                              ; preds = %346
  br label %352

348:                                              ; preds = %346
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %19, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %446

352:                                              ; preds = %347, %342
  %353 = call ptr @strtok(ptr noundef null, ptr noundef @.str.122) #10
  store ptr %353, ptr %34, align 8, !tbaa !5
  %354 = load ptr, ptr %34, align 8, !tbaa !5
  %355 = icmp ne ptr %354, null
  %356 = zext i1 %355 to i64
  %357 = select i1 %355, i32 0, i32 1
  store i32 %357, ptr %16, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %438

358:                                              ; preds = %333
  %359 = getelementptr inbounds [256 x i8], ptr %22, i64 0, i64 0
  %360 = call i32 @strcmp(ptr noundef %359, ptr noundef @.str.124) #11
  %361 = icmp ne i32 %360, 0
  br i1 %361, label %437, label %362

362:                                              ; preds = %358
  %363 = load ptr, ptr %18, align 8, !tbaa !5
  %364 = icmp ne ptr %363, null
  br i1 %364, label %370, label %365

365:                                              ; preds = %362
  %366 = load ptr, ptr @stderr, align 8, !tbaa !5
  %367 = load i32, ptr %15, align 4, !tbaa !29
  %368 = load ptr, ptr %6, align 8, !tbaa !5
  %369 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %366, ptr noundef @.str.125, i32 noundef %367, ptr noundef %368) #10
  store i32 0, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %442

370:                                              ; preds = %362
  %371 = load i32, ptr %16, align 4, !tbaa !29
  %372 = icmp ne i32 %371, 0
  br i1 %372, label %373, label %436

373:                                              ; preds = %370
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #10
  %374 = load ptr, ptr %21, align 8, !tbaa !5
  %375 = call ptr @strtok(ptr noundef %374, ptr noundef @.str.122) #10
  store ptr %375, ptr %35, align 8, !tbaa !5
  %376 = load ptr, ptr %35, align 8, !tbaa !5
  %377 = icmp ne ptr %376, null
  br i1 %377, label %378, label %382

378:                                              ; preds = %373
  %379 = load ptr, ptr %35, align 8, !tbaa !5
  %380 = call i32 @strcmp(ptr noundef %379, ptr noundef @.str.124) #11
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %382, label %388

382:                                              ; preds = %378, %373
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.126, i32 noundef 3078, ptr noundef @.str.2)
          to label %383 unwind label %384

383:                                              ; preds = %382
  br label %388

384:                                              ; preds = %382
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %19, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %20, align 4
  br label %435

388:                                              ; preds = %383, %378
  br label %389

389:                                              ; preds = %432, %388
  br label %390

390:                                              ; preds = %389
  %391 = call ptr @strtok(ptr noundef null, ptr noundef @.str.122) #10
  store ptr %391, ptr %35, align 8, !tbaa !5
  %392 = load ptr, ptr %35, align 8, !tbaa !5
  %393 = icmp ne ptr %392, null
  br i1 %393, label %395, label %394

394:                                              ; preds = %390
  br label %434

395:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  %396 = load ptr, ptr %35, align 8, !tbaa !5
  %397 = call i32 @atoi(ptr noundef %396) #11
  store i32 %397, ptr %36, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1024, ptr %37) #10
  %398 = getelementptr inbounds [1024 x i8], ptr %37, i64 0, i64 0
  %399 = getelementptr inbounds [4096 x i8], ptr %10, i64 0, i64 0
  %400 = load i32, ptr %36, align 4, !tbaa !29
  %401 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %398, ptr noundef @.str.127, ptr noundef %399, i32 noundef %400) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %402 = getelementptr inbounds [1024 x i8], ptr %37, i64 0, i64 0
  %403 = invoke noundef ptr @_ZL8ReadMeshPKc(ptr noundef %402)
          to label %404 unwind label %419

404:                                              ; preds = %395
  store ptr %403, ptr %38, align 8, !tbaa !5
  %405 = load ptr, ptr %38, align 8, !tbaa !5
  %406 = icmp ne ptr %405, null
  br i1 %406, label %407, label %432

407:                                              ; preds = %404
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  %408 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #12
          to label %409 unwind label %423

409:                                              ; preds = %407
  invoke void @_ZN14R3SceneElementC1EP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %408, ptr noundef null)
          to label %410 unwind label %427

410:                                              ; preds = %409
  store ptr %408, ptr %39, align 8, !tbaa !5
  %411 = load ptr, ptr %39, align 8, !tbaa !5
  invoke void @_ZN14R3SceneElement11SetMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %411, ptr noundef @R3default_material)
          to label %412 unwind label %423

412:                                              ; preds = %410
  %413 = load ptr, ptr %39, align 8, !tbaa !5
  %414 = load ptr, ptr %38, align 8, !tbaa !5
  invoke void @_ZN14R3SceneElement11InsertShapeEP7R3Shape(ptr noundef nonnull align 8 dereferenceable(96) %413, ptr noundef %414)
          to label %415 unwind label %423

415:                                              ; preds = %412
  %416 = load ptr, ptr %18, align 8, !tbaa !5
  %417 = load ptr, ptr %39, align 8, !tbaa !5
  invoke void @_ZN11R3SceneNode13InsertElementEP14R3SceneElement(ptr noundef nonnull align 8 dereferenceable(432) %416, ptr noundef %417)
          to label %418 unwind label %423

418:                                              ; preds = %415
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %432

419:                                              ; preds = %395
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %19, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %20, align 4
  br label %433

423:                                              ; preds = %415, %412, %410, %407
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %19, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %20, align 4
  br label %431

427:                                              ; preds = %409
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %19, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %20, align 4
  call void @_ZdlPvm(ptr noundef %408, i64 noundef 96) #13
  br label %431

431:                                              ; preds = %427, %423
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %433

432:                                              ; preds = %418, %404
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 1024, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  br label %389, !llvm.loop !37

433:                                              ; preds = %431, %419
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 1024, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  br label %435

434:                                              ; preds = %394
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  br label %436

435:                                              ; preds = %433, %384
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  br label %446

436:                                              ; preds = %434, %370
  br label %437

437:                                              ; preds = %436, %358
  br label %438

438:                                              ; preds = %437, %352
  br label %439

439:                                              ; preds = %438, %331
  br label %440

440:                                              ; preds = %439, %256
  br label %441

441:                                              ; preds = %440, %193
  store i32 0, ptr %9, align 4
  br label %442

442:                                              ; preds = %441, %365, %329, %254, %191, %130
  call void @llvm.lifetime.end.p0(i64 256, ptr %22) #10
  br label %443

443:                                              ; preds = %442, %124, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  %444 = load i32, ptr %9, align 4
  switch i32 %444, label %451 [
    i32 0, label %445
    i32 2, label %90
  ]

445:                                              ; preds = %443
  br label %90, !llvm.loop !33

446:                                              ; preds = %435, %348, %332, %261, %194
  call void @llvm.lifetime.end.p0(i64 256, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  br label %452

447:                                              ; preds = %94
  %448 = load ptr, ptr %8, align 8, !tbaa !5
  %449 = invoke i32 @fclose(ptr noundef %448)
          to label %450 unwind label %109

450:                                              ; preds = %447
  store i32 1, ptr %4, align 4
  store i32 1, ptr %9, align 4
  br label %451

451:                                              ; preds = %450, %443
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 1024, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %10) #10
  br label %453

452:                                              ; preds = %446, %109
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 1024, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #10
  br label %455

453:                                              ; preds = %451, %50
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #10
  %454 = load i32, ptr %4, align 4
  ret i32 %454

455:                                              ; preds = %452
  %456 = load ptr, ptr %19, align 8
  %457 = load i32, ptr %20, align 4
  %458 = insertvalue { ptr, i32 } poison, ptr %456, 0
  %459 = insertvalue { ptr, i32 } %458, i32 %457, 1
  resume { ptr, i32 } %459
}

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

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

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

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

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

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

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

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

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

declare i32 @fclose(ptr noundef) #2

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

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #5

; Function Attrs: nounwind
declare ptr @strncpy(ptr noundef, ptr noundef, i64 noundef) #7

; Function Attrs: nounwind
declare ptr @strtok(ptr noundef, ptr noundef) #7

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #9

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !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 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}


; 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.R3Material = type { ptr, i32, ptr, ptr, ptr, %class.RNFlags }
%class.RNFlags = type { i64 }
%class.RNArray = type { %class.RNVArray }
%class.RNVArray = type { ptr, i32, i32 }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [91 x i8], align 1
@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.106 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.127 = external hidden unnamed_addr constant [17 x i8], align 1
@R3default_material = external global %class.R3Material, align 8

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

declare i32 @__gxx_personality_v0(...)

; 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 #2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7R3Scene24ReadGrammarHierarchyFileEPKcP11R3SceneNode(ptr noundef nonnull align 8 dereferenceable(352) %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca [4096 x i8], align 16
  %5 = alloca [1024 x i8], align 16
  %6 = alloca %class.RNArray, align 8
  %7 = alloca [256 x i8], align 16
  %8 = alloca i32, align 4
  %9 = alloca [4096 x i8], align 16
  %10 = alloca i32, align 4
  %11 = alloca [4096 x i8], align 16
  %12 = alloca i32, align 4
  %13 = alloca [4096 x i8], align 16
  %14 = alloca [1024 x i8], align 16
  %.not = icmp eq ptr %2, null
  %15 = load ptr, ptr %0, align 8
  %spec.select = select i1 %.not, ptr %15, ptr %2
  %16 = tail call noalias ptr @fopen(ptr noundef %1, ptr noundef nonnull @.str.42)
  %.not124 = icmp eq ptr %16, null
  br i1 %.not124, label %17, label %20

17:                                               ; preds = %3
  %18 = load ptr, ptr @stderr, align 8, !tbaa !5
  %19 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %18, ptr noundef nonnull @.str.43, ptr noundef %1) #15
  br label %187

20:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %4) #16
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(4096) %4, i8 0, i64 4096, i1 false)
  %21 = tail call noundef ptr @strrchr(ptr noundef nonnull dereferenceable(1) %1, i32 noundef 47) #17
  %.not125 = icmp eq ptr %21, null
  %22 = getelementptr inbounds i8, ptr %21, i64 1
  %.080 = select i1 %.not125, ptr %1, ptr %22
  %23 = tail call noundef ptr @strrchr(ptr noundef nonnull dereferenceable(1) %1, i32 noundef 46) #17
  %.not126 = icmp eq ptr %23, null
  br i1 %.not126, label %24, label %27

24:                                               ; preds = %20
  %25 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.080) #17
  %26 = getelementptr inbounds i8, ptr %.080, i64 %25
  br label %27

27:                                               ; preds = %24, %20
  %.081 = phi ptr [ %23, %20 ], [ %26, %24 ]
  %28 = ptrtoint ptr %.081 to i64
  %29 = ptrtoint ptr %.080 to i64
  %30 = sub i64 %28, %29
  %31 = trunc i64 %30 to i32
  %spec.store.select = tail call i32 @llvm.smin.i32(i32 %31, i32 4095)
  %32 = sext i32 %spec.store.select to i64
  %33 = call ptr @strncpy(ptr noundef nonnull %4, ptr noundef %.080, i64 noundef %32) #16
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %5) #16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #16
  call void @_ZN7RNArrayIP11R3SceneNodeEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %34 = call ptr @fgets(ptr noundef nonnull %5, i32 noundef 1023, ptr noundef nonnull %16)
  %.not127194 = icmp eq ptr %34, null
  br i1 %.not127194, label %._crit_edge200, label %.lr.ph199

.lr.ph199:                                        ; preds = %27, %.backedge
  %.082197 = phi i32 [ %41, %.backedge ], [ 0, %27 ]
  %.083196 = phi i32 [ %.386216, %.backedge ], [ 1, %27 ]
  %.087195 = phi ptr [ %.491215, %.backedge ], [ null, %27 ]
  br label %35

35:                                               ; preds = %35, %.lr.ph199
  %.092 = phi ptr [ %5, %.lr.ph199 ], [ %39, %35 ]
  %36 = load i8, ptr %.092, align 1, !tbaa !9
  %37 = sext i8 %36 to i32
  %38 = call i32 @isspace(i32 noundef %37) #17
  %.not128 = icmp eq i32 %38, 0
  %39 = getelementptr inbounds i8, ptr %.092, i64 1
  br i1 %.not128, label %40, label %35, !llvm.loop !10

40:                                               ; preds = %35
  %41 = add nuw nsw i32 %.082197, 1
  switch i8 %36, label %42 [
    i8 35, label %.backedge
    i8 0, label %.backedge
  ], !llvm.loop !12

42:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %7) #16
  %43 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.092, ptr noundef nonnull @.str.44, ptr noundef nonnull %7) #16
  %.not129 = icmp eq i32 %43, 1
  br i1 %.not129, label %47, label %44

44:                                               ; preds = %42
  %45 = load ptr, ptr @stderr, align 8, !tbaa !5
  %46 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %45, ptr noundef nonnull @.str.106, i32 noundef %41, ptr noundef %1) #15
  br label %.loopexit169.loopexit

47:                                               ; preds = %42
  %48 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.107) #17
  %.not130 = icmp eq i32 %48, 0
  br i1 %.not130, label %49, label %75

49:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #16
  %50 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.092, ptr noundef nonnull @.str.112, ptr noundef nonnull %7, ptr noundef nonnull %8) #16
  %.not131 = icmp eq i32 %50, 2
  br i1 %.not131, label %.preheader, label %.thread

.preheader:                                       ; preds = %49
  %51 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %52 = load i32, ptr %8, align 4, !tbaa !13
  %.not132190 = icmp sgt i32 %51, %52
  br i1 %.not132190, label %._crit_edge192, label %.lr.ph191

.thread:                                          ; preds = %49
  %53 = load ptr, ptr @stderr, align 8, !tbaa !5
  %54 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %53, ptr noundef nonnull @.str.106, i32 noundef %41, ptr noundef %1) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #16
  br label %.loopexit169.loopexit

.lr.ph191:                                        ; preds = %.preheader, %62
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %9) #16
  %55 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %56 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %9, ptr noundef nonnull dereferenceable(1) @.str.117, i32 noundef %55) #16
  %57 = invoke noalias noundef nonnull dereferenceable(432) ptr @_Znwm(i64 noundef 432) #18
          to label %58 unwind label %67

58:                                               ; preds = %.lr.ph191
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %57, ptr noundef nonnull %0)
          to label %59 unwind label %69

59:                                               ; preds = %58
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %57, ptr noundef nonnull %9)
          to label %60 unwind label %67

60:                                               ; preds = %59
  %61 = invoke noundef ptr @_ZN7RNArrayIP11R3SceneNodeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull %57)
          to label %62 unwind label %67

62:                                               ; preds = %60
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %9) #16
  %63 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %64 = load i32, ptr %8, align 4, !tbaa !13
  %.not132 = icmp sgt i32 %63, %64
  br i1 %.not132, label %._crit_edge192, label %.lr.ph191, !llvm.loop !15

65:                                               ; preds = %._crit_edge192
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %74

67:                                               ; preds = %60, %59, %.lr.ph191
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %71

69:                                               ; preds = %58
  %70 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %57, i64 noundef 432) #19
  br label %71

71:                                               ; preds = %69, %67
  %.pn = phi { ptr, i32 } [ %68, %67 ], [ %70, %69 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %9) #16
  br label %74

._crit_edge192:                                   ; preds = %62, %.preheader
  %.lcssa179 = phi i32 [ %52, %.preheader ], [ %64, %62 ]
  %72 = invoke noundef ptr @_ZNK7RNArrayIP11R3SceneNodeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %.lcssa179)
          to label %73 unwind label %65

73:                                               ; preds = %._crit_edge192
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #16
  br label %.thread218

74:                                               ; preds = %71, %65
  %.pn.pn = phi { ptr, i32 } [ %.pn, %71 ], [ %66, %65 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #16
  br label %185

75:                                               ; preds = %47
  %76 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.118) #17
  %.not135 = icmp eq i32 %76, 0
  br i1 %.not135, label %77, label %104

77:                                               ; preds = %75
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #16
  %78 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.092, ptr noundef nonnull @.str.112, ptr noundef nonnull %7, ptr noundef nonnull %10) #16
  %.not136 = icmp eq i32 %78, 2
  br i1 %.not136, label %.preheader167, label %.thread164

.preheader167:                                    ; preds = %77
  %79 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %80 = load i32, ptr %10, align 4, !tbaa !13
  %.not137186 = icmp sgt i32 %79, %80
  br i1 %.not137186, label %._crit_edge188, label %.lr.ph187

.thread164:                                       ; preds = %77
  %81 = load ptr, ptr @stderr, align 8, !tbaa !5
  %82 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %81, ptr noundef nonnull @.str.106, i32 noundef %41, ptr noundef %1) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #16
  br label %.loopexit169.loopexit

.lr.ph187:                                        ; preds = %.preheader167, %90
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %11) #16
  %83 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %84 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %11, ptr noundef nonnull dereferenceable(1) @.str.117, i32 noundef %83) #16
  %85 = invoke noalias noundef nonnull dereferenceable(432) ptr @_Znwm(i64 noundef 432) #18
          to label %86 unwind label %93

86:                                               ; preds = %.lr.ph187
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %85, ptr noundef nonnull %0)
          to label %87 unwind label %95

87:                                               ; preds = %86
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %85, ptr noundef nonnull %11)
          to label %88 unwind label %93

88:                                               ; preds = %87
  %89 = invoke noundef ptr @_ZN7RNArrayIP11R3SceneNodeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull %85)
          to label %90 unwind label %93

90:                                               ; preds = %88
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %11) #16
  %91 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %92 = load i32, ptr %10, align 4, !tbaa !13
  %.not137 = icmp sgt i32 %91, %92
  br i1 %.not137, label %._crit_edge188, label %.lr.ph187, !llvm.loop !16

93:                                               ; preds = %88, %87, %.lr.ph187
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %97

95:                                               ; preds = %86
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %85, i64 noundef 432) #19
  br label %97

97:                                               ; preds = %95, %93
  %.pn138 = phi { ptr, i32 } [ %94, %93 ], [ %96, %95 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %11) #16
  br label %103

._crit_edge188:                                   ; preds = %90, %.preheader167
  %.lcssa175 = phi i32 [ %80, %.preheader167 ], [ %92, %90 ]
  %98 = invoke noundef ptr @_ZNK7RNArrayIP11R3SceneNodeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %.lcssa175)
          to label %99 unwind label %101

99:                                               ; preds = %._crit_edge188
  invoke void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432) %spec.select, ptr noundef %98)
          to label %100 unwind label %101

100:                                              ; preds = %99
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #16
  br label %.thread218

101:                                              ; preds = %99, %._crit_edge188
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %103

103:                                              ; preds = %101, %97
  %.pn138.pn = phi { ptr, i32 } [ %.pn138, %97 ], [ %102, %101 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #16
  br label %185

104:                                              ; preds = %75
  %105 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.119) #17
  %.not141 = icmp eq i32 %105, 0
  br i1 %.not141, label %106, label %136

106:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #16
  %107 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %.092, ptr noundef nonnull @.str.112, ptr noundef nonnull %7, ptr noundef nonnull %12) #16
  %.not142 = icmp eq i32 %107, 2
  br i1 %.not142, label %110, label %.thread166

.thread166:                                       ; preds = %106
  %108 = load ptr, ptr @stderr, align 8, !tbaa !5
  %109 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %108, ptr noundef nonnull @.str.106, i32 noundef %41, ptr noundef %1) #15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #16
  br label %.loopexit169.loopexit

110:                                              ; preds = %106
  %111 = load i32, ptr %12, align 4, !tbaa !13
  %112 = icmp sgt i32 %111, -1
  br i1 %112, label %.preheader168, label %.thread165

.preheader168:                                    ; preds = %110
  %113 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %114 = load i32, ptr %12, align 4, !tbaa !13
  %.not143184 = icmp sgt i32 %113, %114
  br i1 %.not143184, label %._crit_edge, label %.lr.ph185

.thread165:                                       ; preds = %110
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #16
  br label %.thread218

.lr.ph185:                                        ; preds = %.preheader168, %122
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %13) #16
  %115 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %116 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %13, ptr noundef nonnull dereferenceable(1) @.str.120, i32 noundef %115) #16
  %117 = invoke noalias noundef nonnull dereferenceable(432) ptr @_Znwm(i64 noundef 432) #18
          to label %118 unwind label %125

118:                                              ; preds = %.lr.ph185
  invoke void @_ZN11R3SceneNodeC1EP7R3Scene(ptr noundef nonnull align 8 dereferenceable(432) %117, ptr noundef nonnull %0)
          to label %119 unwind label %127

119:                                              ; preds = %118
  invoke void @_ZN11R3SceneNode7SetNameEPKc(ptr noundef nonnull align 8 dereferenceable(432) %117, ptr noundef nonnull %13)
          to label %120 unwind label %125

120:                                              ; preds = %119
  %121 = invoke noundef ptr @_ZN7RNArrayIP11R3SceneNodeE6InsertES1_(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull %117)
          to label %122 unwind label %125

122:                                              ; preds = %120
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %13) #16
  %123 = call noundef i32 @_ZNK8RNVArray8NEntriesEv(ptr noundef nonnull align 8 dereferenceable(16) %6)
  %124 = load i32, ptr %12, align 4, !tbaa !13
  %.not143 = icmp sgt i32 %123, %124
  br i1 %.not143, label %._crit_edge, label %.lr.ph185, !llvm.loop !17

125:                                              ; preds = %120, %119, %.lr.ph185
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %129

127:                                              ; preds = %118
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %117, i64 noundef 432) #19
  br label %129

129:                                              ; preds = %127, %125
  %.pn144 = phi { ptr, i32 } [ %126, %125 ], [ %128, %127 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %13) #16
  br label %135

._crit_edge:                                      ; preds = %122, %.preheader168
  %.lcssa171 = phi i32 [ %114, %.preheader168 ], [ %124, %122 ]
  %130 = invoke noundef ptr @_ZNK7RNArrayIP11R3SceneNodeE3KthEi(ptr noundef nonnull align 8 dereferenceable(16) %6, i32 noundef %.lcssa171)
          to label %131 unwind label %132

131:                                              ; preds = %._crit_edge
  invoke void @_ZN11R3SceneNode11InsertChildEPS_(ptr noundef nonnull align 8 dereferenceable(432) %130, ptr noundef %.087195)
          to label %134 unwind label %132

132:                                              ; preds = %131, %._crit_edge
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %135

134:                                              ; preds = %131
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #16
  br label %.thread218

135:                                              ; preds = %132, %129
  %.pn144.pn = phi { ptr, i32 } [ %.pn144, %129 ], [ %133, %132 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #16
  br label %185

136:                                              ; preds = %104
  %137 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.121) #17
  %.not147 = icmp eq i32 %137, 0
  br i1 %.not147, label %138, label %148

138:                                              ; preds = %136
  %139 = call ptr @strtok(ptr noundef nonnull %.092, ptr noundef nonnull @.str.122) #16
  %.not148 = icmp eq ptr %139, null
  br i1 %.not148, label %142, label %140

140:                                              ; preds = %138
  %141 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %139, ptr noundef nonnull dereferenceable(1) @.str.121) #17
  %.not149 = icmp eq i32 %141, 0
  br i1 %.not149, label %145, label %142

142:                                              ; preds = %140, %138
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.123, i32 noundef 3064, ptr noundef nonnull @.str.2)
          to label %145 unwind label %143

143:                                              ; preds = %142
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %185

145:                                              ; preds = %142, %140
  %146 = call ptr @strtok(ptr noundef null, ptr noundef nonnull @.str.122) #16
  %.not150 = icmp eq ptr %146, null
  %147 = zext i1 %.not150 to i32
  br label %.thread218

148:                                              ; preds = %136
  %149 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.124) #17
  %.not151 = icmp eq i32 %149, 0
  br i1 %.not151, label %150, label %.thread218

150:                                              ; preds = %148
  %.not152 = icmp eq ptr %.087195, null
  br i1 %.not152, label %151, label %154

151:                                              ; preds = %150
  %152 = load ptr, ptr @stderr, align 8, !tbaa !5
  %153 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %152, ptr noundef nonnull @.str.125, i32 noundef %41, ptr noundef %1) #15
  br label %.loopexit169.loopexit

154:                                              ; preds = %150
  %.not153 = icmp eq i32 %.083196, 0
  br i1 %.not153, label %.thread218, label %155

155:                                              ; preds = %154
  %156 = call ptr @strtok(ptr noundef nonnull %.092, ptr noundef nonnull @.str.122) #16
  %.not154 = icmp eq ptr %156, null
  br i1 %.not154, label %159, label %157

157:                                              ; preds = %155
  %158 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %156, ptr noundef nonnull dereferenceable(1) @.str.124) #17
  %.not155 = icmp eq i32 %158, 0
  br i1 %.not155, label %162, label %159

159:                                              ; preds = %157, %155
  invoke void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef nonnull @.str, ptr noundef nonnull @.str.126, i32 noundef 3078, ptr noundef nonnull @.str.2)
          to label %162 unwind label %160

160:                                              ; preds = %159
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %185

162:                                              ; preds = %159, %157
  %163 = call ptr @strtok(ptr noundef null, ptr noundef nonnull @.str.122) #16
  %.not156183 = icmp eq ptr %163, null
  br i1 %.not156183, label %.thread218, label %.lr.ph

.lr.ph:                                           ; preds = %162, %181
  %164 = phi ptr [ %182, %181 ], [ %163, %162 ]
  %165 = call i32 @atoi(ptr nocapture noundef %164) #17
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %14) #16
  %166 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %14, ptr noundef nonnull dereferenceable(1) @.str.127, ptr noundef nonnull %4, i32 noundef %165) #16
  %167 = invoke noundef ptr @_ZL8ReadMeshPKc(ptr noundef nonnull %14)
          to label %168 unwind label %175

168:                                              ; preds = %.lr.ph
  %.not157 = icmp eq ptr %167, null
  br i1 %.not157, label %181, label %169

169:                                              ; preds = %168
  %170 = invoke noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #18
          to label %171 unwind label %177

171:                                              ; preds = %169
  invoke void @_ZN14R3SceneElementC1EP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %170, ptr noundef null)
          to label %172 unwind label %179

172:                                              ; preds = %171
  invoke void @_ZN14R3SceneElement11SetMaterialEP10R3Material(ptr noundef nonnull align 8 dereferenceable(96) %170, ptr noundef nonnull @R3default_material)
          to label %173 unwind label %177

173:                                              ; preds = %172
  invoke void @_ZN14R3SceneElement11InsertShapeEP7R3Shape(ptr noundef nonnull align 8 dereferenceable(96) %170, ptr noundef nonnull %167)
          to label %174 unwind label %177

174:                                              ; preds = %173
  invoke void @_ZN11R3SceneNode13InsertElementEP14R3SceneElement(ptr noundef nonnull align 8 dereferenceable(432) %.087195, ptr noundef nonnull %170)
          to label %181 unwind label %177

175:                                              ; preds = %.lr.ph
  %176 = landingpad { ptr, i32 }
          cleanup
  br label %183

177:                                              ; preds = %174, %173, %172, %169
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %183

179:                                              ; preds = %171
  %180 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %170, i64 noundef 96) #19
  br label %183

181:                                              ; preds = %174, %168
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %14) #16
  %182 = call ptr @strtok(ptr noundef null, ptr noundef nonnull @.str.122) #16
  %.not156 = icmp eq ptr %182, null
  br i1 %.not156, label %.thread218, label %.lr.ph, !llvm.loop !18

183:                                              ; preds = %177, %179, %175
  %.pn158.pn = phi { ptr, i32 } [ %176, %175 ], [ %178, %177 ], [ %180, %179 ]
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %14) #16
  br label %185

.thread218:                                       ; preds = %181, %148, %154, %145, %134, %100, %73, %.thread165, %162
  %.390.ph = phi ptr [ %.087195, %162 ], [ %.087195, %.thread165 ], [ %72, %73 ], [ %.087195, %100 ], [ %.087195, %134 ], [ %.087195, %145 ], [ %.087195, %154 ], [ %.087195, %148 ], [ %.087195, %181 ]
  %.285.ph = phi i32 [ 1, %162 ], [ %.083196, %.thread165 ], [ %.083196, %73 ], [ %.083196, %100 ], [ %.083196, %134 ], [ %147, %145 ], [ 0, %154 ], [ %.083196, %148 ], [ 1, %181 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #16
  br label %.backedge

.backedge:                                        ; preds = %40, %40, %.thread218
  %.386216 = phi i32 [ %.285.ph, %.thread218 ], [ %.083196, %40 ], [ %.083196, %40 ]
  %.491215 = phi ptr [ %.390.ph, %.thread218 ], [ %.087195, %40 ], [ %.087195, %40 ]
  %184 = call ptr @fgets(ptr noundef nonnull %5, i32 noundef 1023, ptr noundef nonnull %16)
  %.not127 = icmp eq ptr %184, null
  br i1 %.not127, label %._crit_edge200, label %.lr.ph199, !llvm.loop !12

185:                                              ; preds = %160, %183, %143, %135, %103, %74
  %.pn158.pn.pn.pn = phi { ptr, i32 } [ %144, %143 ], [ %.pn144.pn, %135 ], [ %.pn138.pn, %103 ], [ %.pn.pn, %74 ], [ %.pn158.pn, %183 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #16
  call void @_ZN8RNVArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #16
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #16
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %5) #16
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %4) #16
  resume { ptr, i32 } %.pn158.pn.pn.pn

._crit_edge200:                                   ; preds = %.backedge, %27
  %186 = call i32 @fclose(ptr noundef nonnull %16)
  br label %.loopexit169

.loopexit169.loopexit:                            ; preds = %.thread166, %.thread164, %.thread, %151, %44
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %7) #16
  br label %.loopexit169

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

187:                                              ; preds = %.loopexit169, %17
  %.8 = phi i32 [ %.7, %.loopexit169 ], [ 0, %17 ]
  ret i32 %.8
}

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strncpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly, i64 noundef) local_unnamed_addr #10

; Function Attrs: mustprogress nofree nounwind willreturn
declare ptr @strtok(ptr noundef, ptr nocapture noundef readonly) local_unnamed_addr #11

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #12

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

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

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

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 = { 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 = { "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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "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 #11 = { mustprogress nofree nounwind willreturn "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 #12 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #13 = { 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 #14 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #15 = { cold nounwind }
attributes #16 = { nounwind }
attributes #17 = { nounwind willreturn memory(read) }
attributes #18 = { builtin allocsize(0) }
attributes #19 = { 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 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}


; Effective O3 passes: ADCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass