; LLVM IR from niessner/Matterport :: code/gaps/pkgs/R3Shapes (ply)

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

%struct.PlyFile = type { ptr, i32, float, i32, ptr, i32, ptr, i32, ptr, ptr, ptr }
%struct.PlyElement = type { ptr, i32, i32, i32, ptr, ptr, i32, i32 }

@_ZL18native_binary_type = external hidden global i32, align 4
@_ZL13types_checked = external hidden global i32, align 4
@.str.9 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [11 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z22get_native_binary_typev() #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z11check_typesv() #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_Z8my_allociiPc(i32 noundef, i32 noundef, ptr noundef) #1

; Function Attrs: nounwind
declare noalias ptr @strdup(ptr noundef) #2

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

; Function Attrs: mustprogress uwtable
define dso_local ptr @ply_read(ptr noundef %0, ptr noundef %1, ptr noundef %2) #3 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  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
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %17 = load ptr, ptr %5, align 8, !tbaa !5
  %18 = icmp eq ptr %17, null
  br i1 %18, label %19, label %20

19:                                               ; preds = %3
  store ptr null, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %258

20:                                               ; preds = %3
  %21 = load i32, ptr @_ZL18native_binary_type, align 4, !tbaa !9
  %22 = icmp eq i32 %21, -1
  br i1 %22, label %23, label %24

23:                                               ; preds = %20
  call void @_Z22get_native_binary_typev()
  br label %24

24:                                               ; preds = %23, %20
  %25 = load i32, ptr @_ZL13types_checked, align 4, !tbaa !9
  %26 = icmp ne i32 %25, 0
  br i1 %26, label %28, label %27

27:                                               ; preds = %24
  call void @_Z11check_typesv()
  br label %28

28:                                               ; preds = %27, %24
  %29 = call noundef ptr @_Z8my_allociiPc(i32 noundef 80, i32 noundef 737, ptr noundef @.str.9)
  store ptr %29, ptr %10, align 8, !tbaa !5
  %30 = load ptr, ptr %10, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.PlyFile, ptr %30, i32 0, i32 3
  store i32 0, ptr %31, align 8, !tbaa !11
  %32 = load ptr, ptr %10, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.PlyFile, ptr %32, i32 0, i32 6
  store ptr null, ptr %33, align 8, !tbaa !14
  %34 = load ptr, ptr %10, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.PlyFile, ptr %34, i32 0, i32 5
  store i32 0, ptr %35, align 8, !tbaa !15
  %36 = load ptr, ptr %10, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.PlyFile, ptr %36, i32 0, i32 8
  store ptr null, ptr %37, align 8, !tbaa !16
  %38 = load ptr, ptr %10, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.PlyFile, ptr %38, i32 0, i32 7
  store i32 0, ptr %39, align 8, !tbaa !17
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = load ptr, ptr %10, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.PlyFile, ptr %41, i32 0, i32 0
  store ptr %40, ptr %42, align 8, !tbaa !18
  %43 = load ptr, ptr %10, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.PlyFile, ptr %43, i32 0, i32 10
  store ptr null, ptr %44, align 8, !tbaa !19
  %45 = load ptr, ptr %10, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.PlyFile, ptr %45, i32 0, i32 0
  %47 = load ptr, ptr %46, align 8, !tbaa !18
  %48 = call noundef ptr @_Z9get_wordsP8_IO_FILEPiPPc(ptr noundef %47, ptr noundef %11, ptr noundef %15)
  store ptr %48, ptr %12, align 8, !tbaa !5
  %49 = load ptr, ptr %12, align 8, !tbaa !5
  %50 = icmp ne ptr %49, null
  br i1 %50, label %51, label %57

51:                                               ; preds = %28
  %52 = load ptr, ptr %12, align 8, !tbaa !5
  %53 = getelementptr inbounds ptr, ptr %52, i64 0
  %54 = load ptr, ptr %53, align 8, !tbaa !5
  %55 = call i32 @equal_strings(ptr noundef %54, ptr noundef @.str.31)
  %56 = icmp ne i32 %55, 0
  br i1 %56, label %63, label %57

57:                                               ; preds = %51, %28
  %58 = load ptr, ptr %12, align 8, !tbaa !5
  %59 = icmp ne ptr %58, null
  br i1 %59, label %60, label %62

60:                                               ; preds = %57
  %61 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %61) #5
  br label %62

62:                                               ; preds = %60, %57
  store ptr null, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %258

63:                                               ; preds = %51
  br label %64

64:                                               ; preds = %166, %63
  %65 = load ptr, ptr %12, align 8, !tbaa !5
  %66 = icmp ne ptr %65, null
  br i1 %66, label %67, label %172

67:                                               ; preds = %64
  %68 = load ptr, ptr %12, align 8, !tbaa !5
  %69 = getelementptr inbounds ptr, ptr %68, i64 0
  %70 = load ptr, ptr %69, align 8, !tbaa !5
  %71 = call i32 @equal_strings(ptr noundef %70, ptr noundef @.str.32)
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %117

73:                                               ; preds = %67
  %74 = load i32, ptr %11, align 4, !tbaa !9
  %75 = icmp ne i32 %74, 3
  br i1 %75, label %76, label %78

76:                                               ; preds = %73
  %77 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %77) #5
  store ptr null, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %258

78:                                               ; preds = %73
  %79 = load ptr, ptr %12, align 8, !tbaa !5
  %80 = getelementptr inbounds ptr, ptr %79, i64 1
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = call i32 @equal_strings(ptr noundef %81, ptr noundef @.str.33)
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %84, label %87

84:                                               ; preds = %78
  %85 = load ptr, ptr %10, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.PlyFile, ptr %85, i32 0, i32 1
  store i32 1, ptr %86, align 8, !tbaa !20
  br label %109

87:                                               ; preds = %78
  %88 = load ptr, ptr %12, align 8, !tbaa !5
  %89 = getelementptr inbounds ptr, ptr %88, i64 1
  %90 = load ptr, ptr %89, align 8, !tbaa !5
  %91 = call i32 @equal_strings(ptr noundef %90, ptr noundef @.str.34)
  %92 = icmp ne i32 %91, 0
  br i1 %92, label %93, label %96

93:                                               ; preds = %87
  %94 = load ptr, ptr %10, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.PlyFile, ptr %94, i32 0, i32 1
  store i32 2, ptr %95, align 8, !tbaa !20
  br label %108

96:                                               ; preds = %87
  %97 = load ptr, ptr %12, align 8, !tbaa !5
  %98 = getelementptr inbounds ptr, ptr %97, i64 1
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  %100 = call i32 @equal_strings(ptr noundef %99, ptr noundef @.str.35)
  %101 = icmp ne i32 %100, 0
  br i1 %101, label %102, label %105

102:                                              ; preds = %96
  %103 = load ptr, ptr %10, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.PlyFile, ptr %103, i32 0, i32 1
  store i32 3, ptr %104, align 8, !tbaa !20
  br label %107

105:                                              ; preds = %96
  %106 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %106) #5
  store ptr null, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %258

107:                                              ; preds = %102
  br label %108

108:                                              ; preds = %107, %93
  br label %109

109:                                              ; preds = %108, %84
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = getelementptr inbounds ptr, ptr %110, i64 2
  %112 = load ptr, ptr %111, align 8, !tbaa !5
  %113 = call double @atof(ptr noundef %112) #6
  %114 = fptrunc double %113 to float
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.PlyFile, ptr %115, i32 0, i32 2
  store float %114, ptr %116, align 4, !tbaa !21
  br label %166

117:                                              ; preds = %67
  %118 = load ptr, ptr %12, align 8, !tbaa !5
  %119 = getelementptr inbounds ptr, ptr %118, i64 0
  %120 = load ptr, ptr %119, align 8, !tbaa !5
  %121 = call i32 @equal_strings(ptr noundef %120, ptr noundef @.str.36)
  %122 = icmp ne i32 %121, 0
  br i1 %122, label %123, label %126

123:                                              ; preds = %117
  %124 = load ptr, ptr %10, align 8, !tbaa !5
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_Z11add_elementP7PlyFilePPc(ptr noundef %124, ptr noundef %125)
  br label %165

126:                                              ; preds = %117
  %127 = load ptr, ptr %12, align 8, !tbaa !5
  %128 = getelementptr inbounds ptr, ptr %127, i64 0
  %129 = load ptr, ptr %128, align 8, !tbaa !5
  %130 = call i32 @equal_strings(ptr noundef %129, ptr noundef @.str.37)
  %131 = icmp ne i32 %130, 0
  br i1 %131, label %132, label %135

132:                                              ; preds = %126
  %133 = load ptr, ptr %10, align 8, !tbaa !5
  %134 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_Z12add_propertyP7PlyFilePPc(ptr noundef %133, ptr noundef %134)
  br label %164

135:                                              ; preds = %126
  %136 = load ptr, ptr %12, align 8, !tbaa !5
  %137 = getelementptr inbounds ptr, ptr %136, i64 0
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = call i32 @equal_strings(ptr noundef %138, ptr noundef @.str.38)
  %140 = icmp ne i32 %139, 0
  br i1 %140, label %141, label %144

141:                                              ; preds = %135
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_Z11add_commentP7PlyFilePc(ptr noundef %142, ptr noundef %143)
  br label %163

144:                                              ; preds = %135
  %145 = load ptr, ptr %12, align 8, !tbaa !5
  %146 = getelementptr inbounds ptr, ptr %145, i64 0
  %147 = load ptr, ptr %146, align 8, !tbaa !5
  %148 = call i32 @equal_strings(ptr noundef %147, ptr noundef @.str.39)
  %149 = icmp ne i32 %148, 0
  br i1 %149, label %150, label %153

150:                                              ; preds = %144
  %151 = load ptr, ptr %10, align 8, !tbaa !5
  %152 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_Z12add_obj_infoP7PlyFilePc(ptr noundef %151, ptr noundef %152)
  br label %162

153:                                              ; preds = %144
  %154 = load ptr, ptr %12, align 8, !tbaa !5
  %155 = getelementptr inbounds ptr, ptr %154, i64 0
  %156 = load ptr, ptr %155, align 8, !tbaa !5
  %157 = call i32 @equal_strings(ptr noundef %156, ptr noundef @.str.40)
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %161

159:                                              ; preds = %153
  %160 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %160) #5
  br label %172

161:                                              ; preds = %153
  br label %162

162:                                              ; preds = %161, %150
  br label %163

163:                                              ; preds = %162, %141
  br label %164

164:                                              ; preds = %163, %132
  br label %165

165:                                              ; preds = %164, %123
  br label %166

166:                                              ; preds = %165, %109
  %167 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free(ptr noundef %167) #5
  %168 = load ptr, ptr %10, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.PlyFile, ptr %168, i32 0, i32 0
  %170 = load ptr, ptr %169, align 8, !tbaa !18
  %171 = call noundef ptr @_Z9get_wordsP8_IO_FILEPiPPc(ptr noundef %170, ptr noundef %11, ptr noundef %15)
  store ptr %171, ptr %12, align 8, !tbaa !5
  br label %64, !llvm.loop !22

172:                                              ; preds = %159, %64
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %173

173:                                              ; preds = %215, %172
  %174 = load i32, ptr %8, align 4, !tbaa !9
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.PlyFile, ptr %175, i32 0, i32 3
  %177 = load i32, ptr %176, align 8, !tbaa !11
  %178 = icmp slt i32 %174, %177
  br i1 %178, label %179, label %218

179:                                              ; preds = %173
  %180 = load ptr, ptr %10, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.PlyFile, ptr %180, i32 0, i32 4
  %182 = load ptr, ptr %181, align 8, !tbaa !24
  %183 = load i32, ptr %8, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds ptr, ptr %182, i64 %184
  %186 = load ptr, ptr %185, align 8, !tbaa !5
  store ptr %186, ptr %14, align 8, !tbaa !5
  %187 = load ptr, ptr %14, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.PlyElement, ptr %187, i32 0, i32 3
  %189 = load i32, ptr %188, align 8, !tbaa !25
  %190 = sext i32 %189 to i64
  %191 = mul i64 1, %190
  %192 = trunc i64 %191 to i32
  %193 = call noundef ptr @_Z8my_allociiPc(i32 noundef %192, i32 noundef 801, ptr noundef @.str.9)
  %194 = load ptr, ptr %14, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.PlyElement, ptr %194, i32 0, i32 5
  store ptr %193, ptr %195, align 8, !tbaa !27
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %209, %179
  %197 = load i32, ptr %9, align 4, !tbaa !9
  %198 = load ptr, ptr %14, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.PlyElement, ptr %198, i32 0, i32 3
  %200 = load i32, ptr %199, align 8, !tbaa !25
  %201 = icmp slt i32 %197, %200
  br i1 %201, label %202, label %212

202:                                              ; preds = %196
  %203 = load ptr, ptr %14, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.PlyElement, ptr %203, i32 0, i32 5
  %205 = load ptr, ptr %204, align 8, !tbaa !27
  %206 = load i32, ptr %9, align 4, !tbaa !9
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds i8, ptr %205, i64 %207
  store i8 0, ptr %208, align 1, !tbaa !28
  br label %209

209:                                              ; preds = %202
  %210 = load i32, ptr %9, align 4, !tbaa !9
  %211 = add nsw i32 %210, 1
  store i32 %211, ptr %9, align 4, !tbaa !9
  br label %196, !llvm.loop !29

212:                                              ; preds = %196
  %213 = load ptr, ptr %14, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.PlyElement, ptr %213, i32 0, i32 6
  store i32 -1, ptr %214, align 8, !tbaa !30
  br label %215

215:                                              ; preds = %212
  %216 = load i32, ptr %8, align 4, !tbaa !9
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %8, align 4, !tbaa !9
  br label %173, !llvm.loop !31

218:                                              ; preds = %173
  %219 = load ptr, ptr %10, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.PlyFile, ptr %219, i32 0, i32 3
  %221 = load i32, ptr %220, align 8, !tbaa !11
  %222 = sext i32 %221 to i64
  %223 = mul i64 8, %222
  %224 = trunc i64 %223 to i32
  %225 = call noundef ptr @_Z8my_allociiPc(i32 noundef %224, i32 noundef 809, ptr noundef @.str.9)
  store ptr %225, ptr %13, align 8, !tbaa !5
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %226

226:                                              ; preds = %247, %218
  %227 = load i32, ptr %8, align 4, !tbaa !9
  %228 = load ptr, ptr %10, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.PlyFile, ptr %228, i32 0, i32 3
  %230 = load i32, ptr %229, align 8, !tbaa !11
  %231 = icmp slt i32 %227, %230
  br i1 %231, label %232, label %250

232:                                              ; preds = %226
  %233 = load ptr, ptr %10, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.PlyFile, ptr %233, i32 0, i32 4
  %235 = load ptr, ptr %234, align 8, !tbaa !24
  %236 = load i32, ptr %8, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds ptr, ptr %235, i64 %237
  %239 = load ptr, ptr %238, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.PlyElement, ptr %239, i32 0, i32 0
  %241 = load ptr, ptr %240, align 8, !tbaa !32
  %242 = call noalias ptr @strdup(ptr noundef %241) #5
  %243 = load ptr, ptr %13, align 8, !tbaa !5
  %244 = load i32, ptr %8, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds ptr, ptr %243, i64 %245
  store ptr %242, ptr %246, align 8, !tbaa !5
  br label %247

247:                                              ; preds = %232
  %248 = load i32, ptr %8, align 4, !tbaa !9
  %249 = add nsw i32 %248, 1
  store i32 %249, ptr %8, align 4, !tbaa !9
  br label %226, !llvm.loop !33

250:                                              ; preds = %226
  %251 = load ptr, ptr %13, align 8, !tbaa !5
  %252 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %251, ptr %252, align 8, !tbaa !5
  %253 = load ptr, ptr %10, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.PlyFile, ptr %253, i32 0, i32 3
  %255 = load i32, ptr %254, align 8, !tbaa !11
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 %255, ptr %256, align 4, !tbaa !9
  %257 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %257, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %258

258:                                              ; preds = %250, %105, %76, %62, %19
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  %259 = load ptr, ptr %4, align 8
  ret ptr %259
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z9get_wordsP8_IO_FILEPiPPc(ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local i32 @equal_strings(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare double @atof(ptr noundef nonnull) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z11add_elementP7PlyFilePPc(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12add_propertyP7PlyFilePPc(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z11add_commentP7PlyFilePc(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12add_obj_infoP7PlyFilePc(ptr noundef, ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 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 #4 = { 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 #5 = { nounwind }
attributes #6 = { nounwind willreturn memory(read) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"_ZTS7PlyFile", !6, i64 0, !10, i64 8, !13, i64 12, !10, i64 16, !6, i64 24, !10, i64 32, !6, i64 40, !10, i64 48, !6, i64 56, !6, i64 64, !6, i64 72}
!13 = !{!"float", !7, i64 0}
!14 = !{!12, !6, i64 40}
!15 = !{!12, !10, i64 32}
!16 = !{!12, !6, i64 56}
!17 = !{!12, !10, i64 48}
!18 = !{!12, !6, i64 0}
!19 = !{!12, !6, i64 72}
!20 = !{!12, !10, i64 8}
!21 = !{!12, !13, i64 12}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!12, !6, i64 24}
!25 = !{!26, !10, i64 16}
!26 = !{!"_ZTS10PlyElement", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !10, i64 44}
!27 = !{!26, !6, i64 32}
!28 = !{!7, !7, i64 0}
!29 = distinct !{!29, !23}
!30 = !{!26, !10, i64 40}
!31 = distinct !{!31, !23}
!32 = !{!26, !6, i64 0}
!33 = distinct !{!33, !23}


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

@_ZL18native_binary_type = external hidden local_unnamed_addr global i32, align 4
@_ZL13types_checked = external hidden local_unnamed_addr global i32, align 4
@.str.9 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [11 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z22get_native_binary_typev() local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z11check_typesv() local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_Z8my_allociiPc(i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias ptr @strdup(ptr nocapture noundef readonly) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @ply_read(ptr noundef %0, ptr nocapture noundef writeonly %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #3 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #6
  %6 = icmp eq ptr %0, null
  br i1 %6, label %.critedge, label %7

7:                                                ; preds = %3
  %8 = load i32, ptr @_ZL18native_binary_type, align 4, !tbaa !5
  %9 = icmp eq i32 %8, -1
  br i1 %9, label %10, label %11

10:                                               ; preds = %7
  tail call void @_Z22get_native_binary_typev()
  br label %11

11:                                               ; preds = %10, %7
  %12 = load i32, ptr @_ZL13types_checked, align 4, !tbaa !5
  %.not = icmp eq i32 %12, 0
  br i1 %.not, label %13, label %14

13:                                               ; preds = %11
  tail call void @_Z11check_typesv()
  br label %14

14:                                               ; preds = %13, %11
  %15 = tail call noundef ptr @_Z8my_allociiPc(i32 noundef 80, i32 noundef 737, ptr noundef nonnull @.str.9)
  %16 = getelementptr inbounds i8, ptr %15, i64 16
  store i32 0, ptr %16, align 8, !tbaa !9
  %17 = getelementptr inbounds i8, ptr %15, i64 40
  store ptr null, ptr %17, align 8, !tbaa !13
  %18 = getelementptr inbounds i8, ptr %15, i64 32
  store i32 0, ptr %18, align 8, !tbaa !14
  %19 = getelementptr inbounds i8, ptr %15, i64 56
  store ptr null, ptr %19, align 8, !tbaa !15
  %20 = getelementptr inbounds i8, ptr %15, i64 48
  store i32 0, ptr %20, align 8, !tbaa !16
  store ptr %0, ptr %15, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %15, i64 72
  store ptr null, ptr %21, align 8, !tbaa !18
  %22 = call noundef ptr @_Z9get_wordsP8_IO_FILEPiPPc(ptr noundef nonnull %0, ptr noundef nonnull %4, ptr noundef nonnull %5)
  %.not73 = icmp eq ptr %22, null
  br i1 %.not73, label %.critedge, label %23

23:                                               ; preds = %14
  %24 = load ptr, ptr %22, align 8, !tbaa !19
  %25 = call i32 @equal_strings(ptr noundef %24, ptr noundef nonnull @.str.31)
  %.not74 = icmp eq i32 %25, 0
  br i1 %.not74, label %28, label %.preheader

.preheader:                                       ; preds = %23
  %26 = getelementptr inbounds i8, ptr %15, i64 8
  %27 = getelementptr inbounds i8, ptr %15, i64 12
  br label %29

28:                                               ; preds = %23
  call void @free(ptr noundef nonnull %22) #6
  br label %.critedge

29:                                               ; preds = %.preheader, %73
  %.06790 = phi ptr [ %22, %.preheader ], [ %75, %73 ]
  %30 = load ptr, ptr %.06790, align 8, !tbaa !19
  %31 = call i32 @equal_strings(ptr noundef %30, ptr noundef nonnull @.str.32)
  %.not76 = icmp eq i32 %31, 0
  br i1 %.not76, label %51, label %32

32:                                               ; preds = %29
  %33 = load i32, ptr %4, align 4, !tbaa !5
  %.not82 = icmp eq i32 %33, 3
  br i1 %.not82, label %35, label %34

34:                                               ; preds = %32
  call void @free(ptr noundef nonnull %.06790) #6
  br label %.critedge

35:                                               ; preds = %32
  %36 = getelementptr inbounds i8, ptr %.06790, i64 8
  %37 = load ptr, ptr %36, align 8, !tbaa !19
  %38 = call i32 @equal_strings(ptr noundef %37, ptr noundef nonnull @.str.33)
  %.not83 = icmp eq i32 %38, 0
  br i1 %.not83, label %39, label %46

39:                                               ; preds = %35
  %40 = load ptr, ptr %36, align 8, !tbaa !19
  %41 = call i32 @equal_strings(ptr noundef %40, ptr noundef nonnull @.str.34)
  %.not84 = icmp eq i32 %41, 0
  br i1 %.not84, label %42, label %46

42:                                               ; preds = %39
  %43 = load ptr, ptr %36, align 8, !tbaa !19
  %44 = call i32 @equal_strings(ptr noundef %43, ptr noundef nonnull @.str.35)
  %.not85 = icmp eq i32 %44, 0
  br i1 %.not85, label %45, label %46

45:                                               ; preds = %42
  call void @free(ptr noundef nonnull %.06790) #6
  br label %.critedge

46:                                               ; preds = %42, %39, %35
  %.sink = phi i32 [ 1, %35 ], [ 2, %39 ], [ 3, %42 ]
  store i32 %.sink, ptr %26, align 8, !tbaa !20
  %47 = getelementptr inbounds i8, ptr %.06790, i64 16
  %48 = load ptr, ptr %47, align 8, !tbaa !19
  %49 = call double @atof(ptr noundef %48) #7
  %50 = fptrunc double %49 to float
  store float %50, ptr %27, align 4, !tbaa !21
  br label %73

51:                                               ; preds = %29
  %52 = load ptr, ptr %.06790, align 8, !tbaa !19
  %53 = call i32 @equal_strings(ptr noundef %52, ptr noundef nonnull @.str.36)
  %.not77 = icmp eq i32 %53, 0
  br i1 %.not77, label %55, label %54

54:                                               ; preds = %51
  call void @_Z11add_elementP7PlyFilePPc(ptr noundef nonnull %15, ptr noundef nonnull %.06790)
  br label %73

55:                                               ; preds = %51
  %56 = load ptr, ptr %.06790, align 8, !tbaa !19
  %57 = call i32 @equal_strings(ptr noundef %56, ptr noundef nonnull @.str.37)
  %.not78 = icmp eq i32 %57, 0
  br i1 %.not78, label %59, label %58

58:                                               ; preds = %55
  call void @_Z12add_propertyP7PlyFilePPc(ptr noundef nonnull %15, ptr noundef nonnull %.06790)
  br label %73

59:                                               ; preds = %55
  %60 = load ptr, ptr %.06790, align 8, !tbaa !19
  %61 = call i32 @equal_strings(ptr noundef %60, ptr noundef nonnull @.str.38)
  %.not79 = icmp eq i32 %61, 0
  br i1 %.not79, label %64, label %62

62:                                               ; preds = %59
  %63 = load ptr, ptr %5, align 8, !tbaa !19
  call void @_Z11add_commentP7PlyFilePc(ptr noundef nonnull %15, ptr noundef %63)
  br label %73

64:                                               ; preds = %59
  %65 = load ptr, ptr %.06790, align 8, !tbaa !19
  %66 = call i32 @equal_strings(ptr noundef %65, ptr noundef nonnull @.str.39)
  %.not80 = icmp eq i32 %66, 0
  br i1 %.not80, label %69, label %67

67:                                               ; preds = %64
  %68 = load ptr, ptr %5, align 8, !tbaa !19
  call void @_Z12add_obj_infoP7PlyFilePc(ptr noundef nonnull %15, ptr noundef %68)
  br label %73

69:                                               ; preds = %64
  %70 = load ptr, ptr %.06790, align 8, !tbaa !19
  %71 = call i32 @equal_strings(ptr noundef %70, ptr noundef nonnull @.str.40)
  %.not81 = icmp eq i32 %71, 0
  br i1 %.not81, label %73, label %72

72:                                               ; preds = %69
  call void @free(ptr noundef nonnull %.06790) #6
  br label %.loopexit

73:                                               ; preds = %54, %62, %69, %67, %58, %46
  call void @free(ptr noundef nonnull %.06790) #6
  %74 = load ptr, ptr %15, align 8, !tbaa !17
  %75 = call noundef ptr @_Z9get_wordsP8_IO_FILEPiPPc(ptr noundef %74, ptr noundef nonnull %4, ptr noundef nonnull %5)
  %.not75 = icmp eq ptr %75, null
  br i1 %.not75, label %.loopexit, label %29, !llvm.loop !22

.loopexit:                                        ; preds = %73, %72
  %76 = load i32, ptr %16, align 8, !tbaa !9
  %77 = icmp sgt i32 %76, 0
  br i1 %77, label %.lr.ph94, label %._crit_edge95

.lr.ph94:                                         ; preds = %.loopexit
  %78 = getelementptr inbounds i8, ptr %15, i64 24
  br label %79

79:                                               ; preds = %.lr.ph94, %._crit_edge
  %indvars.iv105 = phi i64 [ 0, %.lr.ph94 ], [ %indvars.iv.next106, %._crit_edge ]
  %80 = load ptr, ptr %78, align 8, !tbaa !24
  %81 = getelementptr inbounds ptr, ptr %80, i64 %indvars.iv105
  %82 = load ptr, ptr %81, align 8, !tbaa !19
  %83 = getelementptr inbounds i8, ptr %82, i64 16
  %84 = load i32, ptr %83, align 8, !tbaa !25
  %85 = call noundef ptr @_Z8my_allociiPc(i32 noundef %84, i32 noundef 801, ptr noundef nonnull @.str.9)
  %86 = getelementptr inbounds i8, ptr %82, i64 32
  store ptr %85, ptr %86, align 8, !tbaa !27
  %87 = load i32, ptr %83, align 8, !tbaa !25
  %88 = icmp sgt i32 %87, 0
  br i1 %88, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %79, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %79 ]
  %89 = load ptr, ptr %86, align 8, !tbaa !27
  %90 = getelementptr inbounds i8, ptr %89, i64 %indvars.iv
  store i8 0, ptr %90, align 1, !tbaa !28
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %91 = load i32, ptr %83, align 8, !tbaa !25
  %92 = sext i32 %91 to i64
  %93 = icmp slt i64 %indvars.iv.next, %92
  br i1 %93, label %.lr.ph, label %._crit_edge, !llvm.loop !29

._crit_edge:                                      ; preds = %.lr.ph, %79
  %94 = getelementptr inbounds i8, ptr %82, i64 40
  store i32 -1, ptr %94, align 8, !tbaa !30
  %indvars.iv.next106 = add nuw nsw i64 %indvars.iv105, 1
  %95 = load i32, ptr %16, align 8, !tbaa !9
  %96 = sext i32 %95 to i64
  %97 = icmp slt i64 %indvars.iv.next106, %96
  br i1 %97, label %79, label %._crit_edge95, !llvm.loop !31

._crit_edge95:                                    ; preds = %._crit_edge, %.loopexit
  %.lcssa86 = phi i32 [ %76, %.loopexit ], [ %95, %._crit_edge ]
  %98 = shl i32 %.lcssa86, 3
  %99 = call noundef ptr @_Z8my_allociiPc(i32 noundef %98, i32 noundef 809, ptr noundef nonnull @.str.9)
  %100 = load i32, ptr %16, align 8, !tbaa !9
  %101 = icmp sgt i32 %100, 0
  br i1 %101, label %.lr.ph98, label %._crit_edge99

.lr.ph98:                                         ; preds = %._crit_edge95
  %102 = getelementptr inbounds i8, ptr %15, i64 24
  %wide.trip.count = zext nneg i32 %100 to i64
  br label %103

103:                                              ; preds = %.lr.ph98, %103
  %indvars.iv108 = phi i64 [ 0, %.lr.ph98 ], [ %indvars.iv.next109, %103 ]
  %104 = load ptr, ptr %102, align 8, !tbaa !24
  %105 = getelementptr inbounds ptr, ptr %104, i64 %indvars.iv108
  %106 = load ptr, ptr %105, align 8, !tbaa !19
  %107 = load ptr, ptr %106, align 8, !tbaa !32
  %108 = call noalias ptr @strdup(ptr noundef %107) #6
  %109 = getelementptr inbounds ptr, ptr %99, i64 %indvars.iv108
  store ptr %108, ptr %109, align 8, !tbaa !19
  %indvars.iv.next109 = add nuw nsw i64 %indvars.iv108, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next109, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge99, label %103, !llvm.loop !33

._crit_edge99:                                    ; preds = %103, %._crit_edge95
  store ptr %99, ptr %2, align 8, !tbaa !19
  store i32 %100, ptr %1, align 4, !tbaa !5
  br label %.critedge

.critedge:                                        ; preds = %28, %14, %3, %._crit_edge99, %45, %34
  %.0 = phi ptr [ null, %34 ], [ null, %45 ], [ %15, %._crit_edge99 ], [ null, %3 ], [ null, %14 ], [ null, %28 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  ret ptr %.0
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z9get_wordsP8_IO_FILEPiPPc(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local i32 @equal_strings(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare double @atof(ptr nocapture noundef nonnull) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z11add_elementP7PlyFilePPc(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12add_propertyP7PlyFilePPc(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z11add_commentP7PlyFilePc(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12add_obj_infoP7PlyFilePc(ptr noundef, ptr noundef) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 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 #4 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { 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 #6 = { nounwind }
attributes #7 = { nounwind willreturn memory(read) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 16}
!10 = !{!"_ZTS7PlyFile", !11, i64 0, !6, i64 8, !12, i64 12, !6, i64 16, !11, i64 24, !6, i64 32, !11, i64 40, !6, i64 48, !11, i64 56, !11, i64 64, !11, i64 72}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!10, !11, i64 40}
!14 = !{!10, !6, i64 32}
!15 = !{!10, !11, i64 56}
!16 = !{!10, !6, i64 48}
!17 = !{!10, !11, i64 0}
!18 = !{!10, !11, i64 72}
!19 = !{!11, !11, i64 0}
!20 = !{!10, !6, i64 8}
!21 = !{!10, !12, i64 12}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!10, !11, i64 24}
!25 = !{!26, !6, i64 16}
!26 = !{!"_ZTS10PlyElement", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !11, i64 24, !11, i64 32, !6, i64 40, !6, i64 44}
!27 = !{!26, !11, i64 32}
!28 = !{!7, !7, i64 0}
!29 = distinct !{!29, !23}
!30 = !{!26, !6, i64 40}
!31 = distinct !{!31, !23}
!32 = !{!26, !11, i64 0}
!33 = distinct !{!33, !23}


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