; LLVM IR from zeux/meshoptimizer :: tools (codectest)

; 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.Stats = type { i8, double, double, double, double, double, double, double, double, double, double }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.0" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::allocator" = type { i8 }

@.str.19 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [35 x i8], align 1
@stderr = external global ptr, align 8
@.str.27 = external hidden unnamed_addr constant [30 x i8], align 1
@stdin = external global ptr, align 8
@.str.28 = external hidden unnamed_addr constant [26 x i8], align 1
@stdout = external global ptr, align 8

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

declare i64 @fwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 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 nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt6vectorIhSaIhEE6insertIPhvEEN9__gnu_cxx17__normal_iteratorIS3_S1_EENS5_IPKhS1_EET_SA_(ptr noundef nonnull align 8 dereferenceable(24), ptr, ptr noundef, ptr noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEC2IPhvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIhEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

declare i32 @meshopt_decodeVertexBuffer(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

declare i64 @meshopt_encodeVertexBufferBound(i64 noundef, i64 noundef) #1

declare void @meshopt_encodeVertexVersion(i32 noundef) #1

declare i64 @meshopt_encodeVertexBuffer(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) #1

declare i32 @printf(ptr noundef, ...) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #4 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %struct.Stats, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca %"class.std::vector", align 8
  %11 = alloca [4096 x i8], align 16
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.0", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca i64, align 8
  %19 = alloca %"class.std::vector", align 8
  %20 = alloca %"class.std::allocator", align 1
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i64, align 8
  %24 = alloca %"class.std::vector", align 8
  %25 = alloca %"class.std::allocator", align 1
  %26 = alloca i64, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  %27 = load i32, ptr %4, align 4, !tbaa !5
  %28 = icmp sgt i32 %27, 1
  br i1 %28, label %29, label %177

29:                                               ; preds = %2
  %30 = load ptr, ptr %5, align 8, !tbaa !9
  %31 = getelementptr inbounds ptr, ptr %30, i64 1
  %32 = load ptr, ptr %31, align 8, !tbaa !9
  %33 = call i32 @strcmp(ptr noundef %32, ptr noundef @.str.20) #9
  %34 = icmp eq i32 %33, 0
  br i1 %34, label %41, label %35

35:                                               ; preds = %29
  %36 = load ptr, ptr %5, align 8, !tbaa !9
  %37 = getelementptr inbounds ptr, ptr %36, i64 1
  %38 = load ptr, ptr %37, align 8, !tbaa !9
  %39 = call i32 @strcmp(ptr noundef %38, ptr noundef @.str.21) #9
  %40 = icmp eq i32 %39, 0
  br i1 %40, label %41, label %177

41:                                               ; preds = %35, %29
  call void @llvm.lifetime.start.p0(i64 88, ptr %6) #10
  call void @llvm.memset.p0.i64(ptr align 8 %6, i8 0, i64 88, i1 false)
  %42 = load ptr, ptr %5, align 8, !tbaa !9
  %43 = getelementptr inbounds ptr, ptr %42, i64 1
  %44 = load ptr, ptr %43, align 8, !tbaa !9
  %45 = call i32 @strcmp(ptr noundef %44, ptr noundef @.str.21) #9
  %46 = icmp eq i32 %45, 0
  %47 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 0
  %48 = zext i1 %46 to i8
  store i8 %48, ptr %47, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  store i32 -1, ptr %7, align 4, !tbaa !5
  %49 = load i32, ptr %4, align 4, !tbaa !5
  %50 = icmp sgt i32 %49, 2
  br i1 %50, label %51, label %81

51:                                               ; preds = %41
  %52 = load ptr, ptr %5, align 8, !tbaa !9
  %53 = getelementptr inbounds ptr, ptr %52, i64 2
  %54 = load ptr, ptr %53, align 8, !tbaa !9
  %55 = getelementptr inbounds i8, ptr %54, i64 0
  %56 = load i8, ptr %55, align 1, !tbaa !15
  %57 = sext i8 %56 to i32
  %58 = icmp eq i32 %57, 45
  br i1 %58, label %59, label %81

59:                                               ; preds = %51
  %60 = load ptr, ptr %5, align 8, !tbaa !9
  %61 = getelementptr inbounds ptr, ptr %60, i64 2
  %62 = load ptr, ptr %61, align 8, !tbaa !9
  %63 = getelementptr inbounds i8, ptr %62, i64 1
  %64 = load i8, ptr %63, align 1, !tbaa !15
  %65 = sext i8 %64 to i32
  %66 = icmp sge i32 %65, 48
  br i1 %66, label %67, label %81

67:                                               ; preds = %59
  %68 = load ptr, ptr %5, align 8, !tbaa !9
  %69 = getelementptr inbounds ptr, ptr %68, i64 2
  %70 = load ptr, ptr %69, align 8, !tbaa !9
  %71 = getelementptr inbounds i8, ptr %70, i64 1
  %72 = load i8, ptr %71, align 1, !tbaa !15
  %73 = sext i8 %72 to i32
  %74 = icmp sle i32 %73, 57
  br i1 %74, label %75, label %81

75:                                               ; preds = %67
  %76 = load ptr, ptr %5, align 8, !tbaa !9
  %77 = getelementptr inbounds ptr, ptr %76, i64 2
  %78 = load ptr, ptr %77, align 8, !tbaa !9
  %79 = getelementptr inbounds i8, ptr %78, i64 1
  %80 = call i32 @atoi(ptr noundef %79) #9
  store i32 %80, ptr %7, align 4, !tbaa !5
  br label %81

81:                                               ; preds = %75, %67, %59, %51, %41
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  %82 = load i32, ptr %7, align 4, !tbaa !5
  %83 = icmp slt i32 %82, 0
  %84 = zext i1 %83 to i64
  %85 = select i1 %83, i32 2, i32 3
  store i32 %85, ptr %8, align 4, !tbaa !5
  br label %86

86:                                               ; preds = %104, %81
  %87 = load i32, ptr %8, align 4, !tbaa !5
  %88 = load i32, ptr %4, align 4, !tbaa !5
  %89 = icmp slt i32 %87, %88
  br i1 %89, label %91, label %90

90:                                               ; preds = %86
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  br label %107

91:                                               ; preds = %86
  %92 = load ptr, ptr %5, align 8, !tbaa !9
  %93 = load i32, ptr %8, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds ptr, ptr %92, i64 %94
  %96 = load ptr, ptr %95, align 8, !tbaa !9
  %97 = load i32, ptr %7, align 4, !tbaa !5
  %98 = icmp slt i32 %97, 0
  br i1 %98, label %99, label %100

99:                                               ; preds = %91
  br label %102

100:                                              ; preds = %91
  %101 = load i32, ptr %7, align 4, !tbaa !5
  br label %102

102:                                              ; preds = %100, %99
  %103 = phi i32 [ 2, %99 ], [ %101, %100 ]
  call void @_Z8testFilePKciP5Stats(ptr noundef %96, i32 noundef %103, ptr noundef %6)
  br label %104

104:                                              ; preds = %102
  %105 = load i32, ptr %8, align 4, !tbaa !5
  %106 = add nsw i32 %105, 1
  store i32 %106, ptr %8, align 4, !tbaa !5
  br label %86, !llvm.loop !16

107:                                              ; preds = %90
  %108 = call i32 (ptr, ...) @printf(ptr noundef @.str.22)
  %109 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 1
  %110 = load double, ptr %109, align 8, !tbaa !18
  %111 = fptosi double %110 to i32
  %112 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 3
  %113 = load double, ptr %112, align 8, !tbaa !19
  %114 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 1
  %115 = load double, ptr %114, align 8, !tbaa !18
  %116 = fdiv double %113, %115
  %117 = call double @exp(double noundef %116) #10
  %118 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 4
  %119 = load double, ptr %118, align 8, !tbaa !20
  %120 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 1
  %121 = load double, ptr %120, align 8, !tbaa !18
  %122 = fdiv double %119, %121
  %123 = call double @exp(double noundef %122) #10
  %124 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, i32 noundef %111, double noundef %117, double noundef %123)
  %125 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 0
  %126 = load i8, ptr %125, align 8, !tbaa !11, !range !21, !noundef !22
  %127 = trunc i8 %126 to i1
  br i1 %127, label %128, label %142

128:                                              ; preds = %107
  %129 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 5
  %130 = load double, ptr %129, align 8, !tbaa !23
  %131 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 1
  %132 = load double, ptr %131, align 8, !tbaa !18
  %133 = fdiv double %130, %132
  %134 = call double @exp(double noundef %133) #10
  %135 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 6
  %136 = load double, ptr %135, align 8, !tbaa !24
  %137 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 1
  %138 = load double, ptr %137, align 8, !tbaa !18
  %139 = fdiv double %136, %138
  %140 = call double @exp(double noundef %139) #10
  %141 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %134, double noundef %140)
  br label %144

142:                                              ; preds = %107
  %143 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  br label %144

144:                                              ; preds = %142, %128
  %145 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 1
  %146 = load double, ptr %145, align 8, !tbaa !18
  %147 = fptosi double %146 to i32
  %148 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 2
  %149 = load double, ptr %148, align 8, !tbaa !25
  %150 = fdiv double %149, 1.024000e+03
  %151 = fdiv double %150, 1.024000e+03
  %152 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 7
  %153 = load double, ptr %152, align 8, !tbaa !26
  %154 = fdiv double %153, 1.024000e+03
  %155 = fdiv double %154, 1.024000e+03
  %156 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 8
  %157 = load double, ptr %156, align 8, !tbaa !27
  %158 = fdiv double %157, 1.024000e+03
  %159 = fdiv double %158, 1.024000e+03
  %160 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, i32 noundef %147, double noundef %151, double noundef %155, double noundef %159)
  %161 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 0
  %162 = load i8, ptr %161, align 8, !tbaa !11, !range !21, !noundef !22
  %163 = trunc i8 %162 to i1
  br i1 %163, label %164, label %174

164:                                              ; preds = %144
  %165 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 9
  %166 = load double, ptr %165, align 8, !tbaa !28
  %167 = fdiv double %166, 1.024000e+03
  %168 = fdiv double %167, 1.024000e+03
  %169 = getelementptr inbounds %struct.Stats, ptr %6, i32 0, i32 10
  %170 = load double, ptr %169, align 8, !tbaa !29
  %171 = fdiv double %170, 1.024000e+03
  %172 = fdiv double %171, 1.024000e+03
  %173 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, double noundef %168, double noundef %172)
  br label %176

174:                                              ; preds = %144
  %175 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  br label %176

176:                                              ; preds = %174, %164
  store i32 0, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %6) #10
  br label %306

177:                                              ; preds = %35, %2
  %178 = load i32, ptr %4, align 4, !tbaa !5
  %179 = icmp slt i32 %178, 2
  br i1 %179, label %189, label %180

180:                                              ; preds = %177
  %181 = load i32, ptr %4, align 4, !tbaa !5
  %182 = icmp sgt i32 %181, 3
  br i1 %182, label %189, label %183

183:                                              ; preds = %180
  %184 = load ptr, ptr %5, align 8, !tbaa !9
  %185 = getelementptr inbounds ptr, ptr %184, i64 1
  %186 = load ptr, ptr %185, align 8, !tbaa !9
  %187 = call i32 @atoi(ptr noundef %186) #9
  %188 = icmp sle i32 %187, 0
  br i1 %188, label %189, label %195

189:                                              ; preds = %183, %180, %177
  %190 = load ptr, ptr @stderr, align 8, !tbaa !9
  %191 = load ptr, ptr %5, align 8, !tbaa !9
  %192 = getelementptr inbounds ptr, ptr %191, i64 0
  %193 = load ptr, ptr %192, align 8, !tbaa !9
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %190, ptr noundef @.str.27, ptr noundef %193) #10
  store i32 1, ptr %3, align 4
  br label %306

195:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #10
  %196 = load ptr, ptr %5, align 8, !tbaa !9
  %197 = getelementptr inbounds ptr, ptr %196, i64 1
  %198 = load ptr, ptr %197, align 8, !tbaa !9
  %199 = call i32 @atoi(ptr noundef %198) #9
  %200 = sext i32 %199 to i64
  store i64 %200, ptr %9, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #10
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  call void @llvm.lifetime.start.p0(i64 4096, ptr %11) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  br label %201

201:                                              ; preds = %217, %195
  %202 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %203 = load ptr, ptr @stdin, align 8, !tbaa !9
  %204 = invoke i64 @fread(ptr noundef %202, i64 noundef 1, i64 noundef 4096, ptr noundef %203)
          to label %205 unwind label %219

205:                                              ; preds = %201
  store i64 %204, ptr %12, align 8, !tbaa !30
  %206 = icmp ugt i64 %204, 0
  br i1 %206, label %207, label %227

207:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  %208 = call ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  %209 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %16, i32 0, i32 0
  store ptr %208, ptr %209, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEC2IPhvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  %210 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %211 = getelementptr inbounds [4096 x i8], ptr %11, i64 0, i64 0
  %212 = load i64, ptr %12, align 8, !tbaa !30
  %213 = getelementptr inbounds i8, ptr %211, i64 %212
  %214 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.0", ptr %15, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8
  %216 = invoke ptr @_ZNSt6vectorIhSaIhEE6insertIPhvEEN9__gnu_cxx17__normal_iteratorIS3_S1_EENS5_IPKhS1_EET_SA_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr %215, ptr noundef %210, ptr noundef %213)
          to label %217 unwind label %223

217:                                              ; preds = %207
  %218 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %17, i32 0, i32 0
  store ptr %216, ptr %218, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  br label %201, !llvm.loop !32

219:                                              ; preds = %269, %201
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %13, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %14, align 4
  br label %305

223:                                              ; preds = %207
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %13, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  br label %305

227:                                              ; preds = %205
  %228 = load i32, ptr %4, align 4, !tbaa !5
  %229 = icmp eq i32 %228, 3
  br i1 %229, label %230, label %269

230:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %231 = load ptr, ptr %5, align 8, !tbaa !9
  %232 = getelementptr inbounds ptr, ptr %231, i64 2
  %233 = load ptr, ptr %232, align 8, !tbaa !9
  %234 = call i32 @atoi(ptr noundef %233) #9
  %235 = sext i32 %234 to i64
  store i64 %235, ptr %18, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #10
  %236 = load i64, ptr %18, align 8, !tbaa !30
  %237 = load i64, ptr %9, align 8, !tbaa !30
  %238 = mul i64 %236, %237
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #10
  call void @_ZNSaIhEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #10
  invoke void @_ZNSt6vectorIhSaIhEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %238, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %239 unwind label %253

239:                                              ; preds = %230
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  %240 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef 0) #10
  %241 = load i64, ptr %18, align 8, !tbaa !30
  %242 = load i64, ptr %9, align 8, !tbaa !30
  %243 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef 0) #10
  %244 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  %245 = invoke i32 @meshopt_decodeVertexBuffer(ptr noundef %240, i64 noundef %241, i64 noundef %242, ptr noundef %243, i64 noundef %244)
          to label %246 unwind label %257

246:                                              ; preds = %239
  store i32 %245, ptr %21, align 4, !tbaa !5
  %247 = load i32, ptr %21, align 4, !tbaa !5
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %249, label %261

249:                                              ; preds = %246
  %250 = load ptr, ptr @stderr, align 8, !tbaa !9
  %251 = load i32, ptr %21, align 4, !tbaa !5
  %252 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %250, ptr noundef @.str.28, i32 noundef %251) #10
  store i32 2, ptr %3, align 4
  store i32 1, ptr %22, align 4
  br label %267

253:                                              ; preds = %230
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %13, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #10
  br label %268

257:                                              ; preds = %261, %239
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %13, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  br label %268

261:                                              ; preds = %246
  %262 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  %263 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  %264 = load ptr, ptr @stdout, align 8, !tbaa !9
  %265 = invoke i64 @fwrite(ptr noundef %262, i64 noundef 1, i64 noundef %263, ptr noundef %264)
          to label %266 unwind label %257

266:                                              ; preds = %261
  store i32 0, ptr %3, align 4
  store i32 1, ptr %22, align 4
  br label %267

267:                                              ; preds = %266, %249
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  br label %304

268:                                              ; preds = %257, %253
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  br label %305

269:                                              ; preds = %227
  invoke void @meshopt_encodeVertexVersion(i32 noundef 1)
          to label %270 unwind label %219

270:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %271 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  %272 = load i64, ptr %9, align 8, !tbaa !30
  %273 = udiv i64 %271, %272
  store i64 %273, ptr %23, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #10
  %274 = load i64, ptr %23, align 8, !tbaa !30
  %275 = load i64, ptr %9, align 8, !tbaa !30
  %276 = invoke i64 @meshopt_encodeVertexBufferBound(i64 noundef %274, i64 noundef %275)
          to label %277 unwind label %291

277:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #10
  call void @_ZNSaIhEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #10
  invoke void @_ZNSt6vectorIhSaIhEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %276, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %278 unwind label %295

278:                                              ; preds = %277
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %279 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %280 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %281 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  %282 = load i64, ptr %23, align 8, !tbaa !30
  %283 = load i64, ptr %9, align 8, !tbaa !30
  %284 = invoke i64 @meshopt_encodeVertexBuffer(ptr noundef %279, i64 noundef %280, ptr noundef %281, i64 noundef %282, i64 noundef %283)
          to label %285 unwind label %299

285:                                              ; preds = %278
  store i64 %284, ptr %26, align 8, !tbaa !30
  %286 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  %287 = load i64, ptr %26, align 8, !tbaa !30
  %288 = load ptr, ptr @stdout, align 8, !tbaa !9
  %289 = invoke i64 @fwrite(ptr noundef %286, i64 noundef 1, i64 noundef %287, ptr noundef %288)
          to label %290 unwind label %299

290:                                              ; preds = %285
  store i32 0, ptr %3, align 4
  store i32 1, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %304

291:                                              ; preds = %270
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %13, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %14, align 4
  br label %303

295:                                              ; preds = %277
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %13, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #10
  br label %303

299:                                              ; preds = %285, %278
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %13, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  br label %303

303:                                              ; preds = %299, %295, %291
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %305

304:                                              ; preds = %290, %267
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %11) #10
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  br label %306

305:                                              ; preds = %303, %268, %223, %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %11) #10
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  br label %308

306:                                              ; preds = %304, %189, %176
  %307 = load i32, ptr %3, align 4
  ret i32 %307

308:                                              ; preds = %305
  %309 = load ptr, ptr %13, align 8
  %310 = load i32, ptr %14, align 4
  %311 = insertvalue { ptr, i32 } poison, ptr %309, 0
  %312 = insertvalue { ptr, i32 } %311, i32 %310, 1
  resume { ptr, i32 } %312
}

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

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

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

; Function Attrs: nounwind
declare double @exp(double noundef) #8

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 norecurse 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 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 #8 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"_ZTS5Stats", !13, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!12, !14, i64 8}
!19 = !{!12, !14, i64 24}
!20 = !{!12, !14, i64 32}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!12, !14, i64 40}
!24 = !{!12, !14, i64 48}
!25 = !{!12, !14, i64 16}
!26 = !{!12, !14, i64 56}
!27 = !{!12, !14, i64 64}
!28 = !{!12, !14, i64 72}
!29 = !{!12, !14, i64 80}
!30 = !{!31, !31, i64 0}
!31 = !{!"long", !7, i64 0}
!32 = distinct !{!32, !17}


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

%struct.Stats = type { i8, double, double, double, double, double, double, double, double, double, double }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.0" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::allocator" = type { i8 }

@.str.19 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [35 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.27 = external hidden unnamed_addr constant [30 x i8], align 1
@stdin = external local_unnamed_addr global ptr, align 8
@.str.28 = external hidden unnamed_addr constant [26 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8

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

; Function Attrs: nofree nounwind
declare noundef i64 @fwrite(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 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 nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt6vectorIhSaIhEE6insertIPhvEEN9__gnu_cxx17__normal_iteratorIS3_S1_EENS5_IPKhS1_EET_SA_(ptr noundef nonnull align 8 dereferenceable(24), ptr, ptr noundef, ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEC2IPhvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIhEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

declare i32 @meshopt_decodeVertexBuffer(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

declare i64 @meshopt_encodeVertexBufferBound(i64 noundef, i64 noundef) local_unnamed_addr #4

declare void @meshopt_encodeVertexVersion(i32 noundef) local_unnamed_addr #4

declare i64 @meshopt_encodeVertexBuffer(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef range(i32 0, 3) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %3 = alloca %struct.Stats, align 8
  %4 = alloca %"class.std::vector", align 8
  %5 = alloca [4096 x i8], align 16
  %6 = alloca %"class.__gnu_cxx::__normal_iterator.0", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %8 = alloca %"class.std::vector", align 8
  %9 = alloca %"class.std::allocator", align 1
  %10 = alloca %"class.std::vector", align 8
  %11 = alloca %"class.std::allocator", align 1
  %12 = icmp sgt i32 %0, 1
  br i1 %12, label %13, label %.thread

13:                                               ; preds = %2
  %14 = getelementptr inbounds i8, ptr %1, i64 8
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %15, ptr noundef nonnull dereferenceable(1) @.str.20) #10
  %17 = icmp eq i32 %16, 0
  br i1 %17, label %21, label %18

18:                                               ; preds = %13
  %19 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %15, ptr noundef nonnull dereferenceable(1) @.str.21) #10
  %20 = icmp eq i32 %19, 0
  br i1 %20, label %21, label %106

21:                                               ; preds = %18, %13
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %3) #11
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(88) %3, i8 0, i64 88, i1 false)
  %22 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %15, ptr noundef nonnull dereferenceable(1) @.str.21) #10
  %23 = icmp eq i32 %22, 0
  %24 = zext i1 %23 to i8
  store i8 %24, ptr %3, align 8, !tbaa !9
  %.not60 = icmp eq i32 %0, 2
  br i1 %.not60, label %36, label %25

25:                                               ; preds = %21
  %26 = getelementptr inbounds i8, ptr %1, i64 16
  %27 = load ptr, ptr %26, align 8, !tbaa !5
  %28 = load i8, ptr %27, align 1, !tbaa !13
  %29 = icmp eq i8 %28, 45
  br i1 %29, label %30, label %36

30:                                               ; preds = %25
  %31 = getelementptr inbounds i8, ptr %27, i64 1
  %32 = load i8, ptr %31, align 1, !tbaa !13
  %33 = add i8 %32, -48
  %or.cond61 = icmp ult i8 %33, 10
  br i1 %or.cond61, label %34, label %36

34:                                               ; preds = %30
  %35 = tail call i32 @atoi(ptr nocapture noundef %31) #10
  br label %36

36:                                               ; preds = %34, %30, %25, %21
  %.040 = phi i32 [ %35, %34 ], [ -1, %30 ], [ -1, %25 ], [ -1, %21 ]
  %37 = icmp slt i32 %.040, 0
  %38 = select i1 %37, i32 2, i32 3
  %39 = icmp ult i32 %38, %0
  br i1 %39, label %.lr.ph66, label %._crit_edge67

.lr.ph66:                                         ; preds = %36
  %40 = select i1 %37, i32 2, i32 %.040
  %41 = zext nneg i32 %38 to i64
  %wide.trip.count = zext nneg i32 %0 to i64
  br label %58

._crit_edge67:                                    ; preds = %58, %36
  %42 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22)
  %43 = getelementptr inbounds i8, ptr %3, i64 8
  %44 = load double, ptr %43, align 8, !tbaa !14
  %45 = fptosi double %44 to i32
  %46 = getelementptr inbounds i8, ptr %3, i64 24
  %47 = load double, ptr %46, align 8, !tbaa !15
  %48 = fdiv double %47, %44
  %49 = call double @exp(double noundef %48) #11
  %50 = getelementptr inbounds i8, ptr %3, i64 32
  %51 = load double, ptr %50, align 8, !tbaa !16
  %52 = load double, ptr %43, align 8, !tbaa !14
  %53 = fdiv double %51, %52
  %54 = call double @exp(double noundef %53) #11
  %55 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i32 noundef %45, double noundef %49, double noundef %54)
  %56 = load i8, ptr %3, align 8, !tbaa !9, !range !17, !noundef !18
  %57 = trunc nuw i8 %56 to i1
  br i1 %57, label %61, label %73

58:                                               ; preds = %.lr.ph66, %58
  %indvars.iv = phi i64 [ %41, %.lr.ph66 ], [ %indvars.iv.next, %58 ]
  %59 = getelementptr inbounds ptr, ptr %1, i64 %indvars.iv
  %60 = load ptr, ptr %59, align 8, !tbaa !5
  call void @_Z8testFilePKciP5Stats(ptr noundef %60, i32 noundef %40, ptr noundef nonnull %3)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge67, label %58, !llvm.loop !19

61:                                               ; preds = %._crit_edge67
  %62 = getelementptr inbounds i8, ptr %3, i64 40
  %63 = load double, ptr %62, align 8, !tbaa !21
  %64 = load double, ptr %43, align 8, !tbaa !14
  %65 = fdiv double %63, %64
  %66 = call double @exp(double noundef %65) #11
  %67 = getelementptr inbounds i8, ptr %3, i64 48
  %68 = load double, ptr %67, align 8, !tbaa !22
  %69 = load double, ptr %43, align 8, !tbaa !14
  %70 = fdiv double %68, %69
  %71 = call double @exp(double noundef %70) #11
  %72 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %66, double noundef %71)
  br label %75

73:                                               ; preds = %._crit_edge67
  %74 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19)
  br label %75

75:                                               ; preds = %73, %61
  %76 = load double, ptr %43, align 8, !tbaa !14
  %77 = fptosi double %76 to i32
  %78 = getelementptr inbounds i8, ptr %3, i64 16
  %79 = load double, ptr %78, align 8, !tbaa !23
  %80 = fmul double %79, 0x3F50000000000000
  %81 = fmul double %80, 0x3F50000000000000
  %82 = getelementptr inbounds i8, ptr %3, i64 56
  %83 = load double, ptr %82, align 8, !tbaa !24
  %84 = fmul double %83, 0x3F50000000000000
  %85 = fmul double %84, 0x3F50000000000000
  %86 = getelementptr inbounds i8, ptr %3, i64 64
  %87 = load double, ptr %86, align 8, !tbaa !25
  %88 = fmul double %87, 0x3F50000000000000
  %89 = fmul double %88, 0x3F50000000000000
  %90 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, i32 noundef %77, double noundef %81, double noundef %85, double noundef %89)
  %91 = load i8, ptr %3, align 8, !tbaa !9, !range !17, !noundef !18
  %92 = trunc nuw i8 %91 to i1
  br i1 %92, label %93, label %103

93:                                               ; preds = %75
  %94 = getelementptr inbounds i8, ptr %3, i64 72
  %95 = load double, ptr %94, align 8, !tbaa !26
  %96 = fmul double %95, 0x3F50000000000000
  %97 = fmul double %96, 0x3F50000000000000
  %98 = getelementptr inbounds i8, ptr %3, i64 80
  %99 = load double, ptr %98, align 8, !tbaa !27
  %100 = fmul double %99, 0x3F50000000000000
  %101 = fmul double %100, 0x3F50000000000000
  %102 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, double noundef %97, double noundef %101)
  br label %105

103:                                              ; preds = %75
  %104 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19)
  br label %105

105:                                              ; preds = %103, %93
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %3) #11
  br label %181

106:                                              ; preds = %18
  %107 = add nsw i32 %0, -4
  %or.cond = icmp ult i32 %107, -2
  br i1 %or.cond, label %.thread, label %108

108:                                              ; preds = %106
  %109 = tail call i32 @atoi(ptr nocapture noundef %15) #10
  %110 = icmp slt i32 %109, 1
  br i1 %110, label %.thread, label %114

.thread:                                          ; preds = %2, %108, %106
  %111 = load ptr, ptr @stderr, align 8, !tbaa !5
  %112 = load ptr, ptr %1, align 8, !tbaa !5
  %113 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %111, ptr noundef nonnull @.str.27, ptr noundef %112) #12
  br label %181

114:                                              ; preds = %108
  %115 = zext nneg i32 %109 to i64
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #11
  call void @_ZNSt6vectorIhSaIhEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %5) #11
  %116 = load ptr, ptr @stdin, align 8, !tbaa !5
  %117 = call i64 @fread(ptr noundef nonnull %5, i64 noundef 1, i64 noundef 4096, ptr noundef %116)
  %.not63 = icmp eq i64 %117, 0
  br i1 %.not63, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %114, %123
  %118 = phi i64 [ %125, %123 ], [ %117, %114 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #11
  %119 = call ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  store ptr %119, ptr %7, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKhSt6vectorIhSaIhEEEC2IPhvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #11
  %120 = getelementptr inbounds i8, ptr %5, i64 %118
  %121 = load ptr, ptr %6, align 8
  %122 = invoke ptr @_ZNSt6vectorIhSaIhEE6insertIPhvEEN9__gnu_cxx17__normal_iteratorIS3_S1_EENS5_IPKhS1_EET_SA_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr %121, ptr noundef nonnull %5, ptr noundef nonnull %120)
          to label %123 unwind label %128

123:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11
  %124 = load ptr, ptr @stdin, align 8, !tbaa !5
  %125 = call i64 @fread(ptr noundef nonnull %5, i64 noundef 1, i64 noundef 4096, ptr noundef %124)
  %.not = icmp eq i64 %125, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

126:                                              ; preds = %157
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %180

128:                                              ; preds = %.lr.ph
  %129 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #11
  br label %180

._crit_edge:                                      ; preds = %123, %114
  %130 = icmp eq i32 %0, 3
  br i1 %130, label %131, label %157

131:                                              ; preds = %._crit_edge
  %132 = getelementptr inbounds i8, ptr %1, i64 16
  %133 = load ptr, ptr %132, align 8, !tbaa !5
  %134 = call i32 @atoi(ptr nocapture noundef %133) #10
  %135 = sext i32 %134 to i64
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #11
  %136 = mul nsw i64 %135, %115
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #11
  call void @_ZNSaIhEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #11
  invoke void @_ZNSt6vectorIhSaIhEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %136, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %137 unwind label %146

137:                                              ; preds = %131
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #11
  %138 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef 0) #11
  %139 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIhSaIhEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef 0) #11
  %140 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  %141 = invoke i32 @meshopt_decodeVertexBuffer(ptr noundef nonnull %138, i64 noundef %135, i64 noundef %115, ptr noundef nonnull %139, i64 noundef %140)
          to label %142 unwind label %148

142:                                              ; preds = %137
  %.not57 = icmp eq i32 %141, 0
  br i1 %.not57, label %150, label %143

143:                                              ; preds = %142
  %144 = load ptr, ptr @stderr, align 8, !tbaa !5
  %145 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %144, ptr noundef nonnull @.str.28, i32 noundef %141) #12
  br label %155

146:                                              ; preds = %131
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #11
  br label %156

148:                                              ; preds = %137
  %149 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  br label %156

150:                                              ; preds = %142
  %151 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  %152 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  %153 = load ptr, ptr @stdout, align 8, !tbaa !5
  %154 = call i64 @fwrite(ptr noundef %151, i64 noundef 1, i64 noundef %152, ptr noundef %153)
  br label %155

155:                                              ; preds = %150, %143
  %.0 = phi i32 [ 2, %143 ], [ 0, %150 ]
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #11
  br label %179

156:                                              ; preds = %148, %146
  %.pn55 = phi { ptr, i32 } [ %149, %148 ], [ %147, %146 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #11
  br label %180

157:                                              ; preds = %._crit_edge
  invoke void @meshopt_encodeVertexVersion(i32 noundef 1)
          to label %158 unwind label %126

158:                                              ; preds = %157
  %159 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  %160 = udiv i64 %159, %115
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #11
  %161 = invoke i64 @meshopt_encodeVertexBufferBound(i64 noundef %160, i64 noundef %115)
          to label %162 unwind label %172

162:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #11
  call void @_ZNSaIhEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #11
  invoke void @_ZNSt6vectorIhSaIhEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %161, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %163 unwind label %174

163:                                              ; preds = %162
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #11
  %164 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  %165 = call noundef i64 @_ZNKSt6vectorIhSaIhEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  %166 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  %167 = invoke i64 @meshopt_encodeVertexBuffer(ptr noundef %164, i64 noundef %165, ptr noundef %166, i64 noundef %160, i64 noundef %115)
          to label %168 unwind label %176

168:                                              ; preds = %163
  %169 = call noundef ptr @_ZNSt6vectorIhSaIhEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  %170 = load ptr, ptr @stdout, align 8, !tbaa !5
  %171 = call i64 @fwrite(ptr noundef %169, i64 noundef 1, i64 noundef %167, ptr noundef %170)
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #11
  br label %179

172:                                              ; preds = %158
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %178

174:                                              ; preds = %162
  %175 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #11
  br label %178

176:                                              ; preds = %163
  %177 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #11
  br label %178

178:                                              ; preds = %176, %174, %172
  %.pn = phi { ptr, i32 } [ %177, %176 ], [ %175, %174 ], [ %173, %172 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #11
  br label %180

179:                                              ; preds = %168, %155
  %.1 = phi i32 [ %.0, %155 ], [ 0, %168 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %5) #11
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  br label %181

180:                                              ; preds = %178, %156, %128, %126
  %.pn58 = phi { ptr, i32 } [ %129, %128 ], [ %.pn55, %156 ], [ %.pn, %178 ], [ %127, %126 ]
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %5) #11
  call void @_ZNSt6vectorIhSaIhEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #11
  resume { ptr, i32 } %.pn58

181:                                              ; preds = %179, %.thread, %105
  %.2 = phi i32 [ 0, %105 ], [ 1, %.thread ], [ %.1, %179 ]
  ret i32 %.2
}

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @exp(double noundef) local_unnamed_addr #9

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIhED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress norecurse 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 = { 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 #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { 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 #9 = { mustprogress nofree nounwind willreturn memory(write) "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 willreturn memory(read) }
attributes #11 = { nounwind }
attributes #12 = { cold 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, !11, i64 0}
!10 = !{!"_ZTS5Stats", !11, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!10, !12, i64 8}
!15 = !{!10, !12, i64 24}
!16 = !{!10, !12, i64 32}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!10, !12, i64 40}
!22 = !{!10, !12, i64 48}
!23 = !{!10, !12, i64 16}
!24 = !{!10, !12, i64 56}
!25 = !{!10, !12, i64 64}
!26 = !{!10, !12, i64 72}
!27 = !{!10, !12, i64 80}
!28 = distinct !{!28, !20}


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