; LLVM IR from caryll/otfcc :: lib/otf-writer (stat)

; 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.__caryll_vectorinterface_VQ = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_elementinterface_glyf_ComponentReference = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.otfcc_HandlePackage = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.glyf_GlyphStat = type { double, double, double, double, i16, i16, i16, i16, i16 }
%struct.glyf_ComponentReference = type { %struct.VQ, %struct.VQ, i8, i8, %struct.otfcc_Handle, double, double, double, double, i32, i16, i16 }
%struct.VQ = type { double, %struct.vq_SegList }
%struct.vq_SegList = type { i64, i64, ptr }
%struct.otfcc_Handle = type { i32, i16, ptr }
%struct.otfcc_Options = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, ptr, ptr }
%struct.otfcc_ILogger = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.table_glyf = type { i64, i64, ptr }
%struct.glyf_Glyph = type { ptr, %struct.VQ, %struct.VQ, %struct.VQ, %struct.VQ, %struct.glyf_ContourList, %struct.glyf_ReferenceList, %struct.glyf_StemDefList, %struct.glyf_StemDefList, %struct.glyf_MaskList, %struct.glyf_MaskList, i16, ptr, i8, %struct.otfcc_Handle, i16, %struct.glyf_GlyphStat }
%struct.glyf_ContourList = type { i64, i64, ptr }
%struct.glyf_ReferenceList = type { i64, i64, ptr }
%struct.glyf_StemDefList = type { i64, i64, ptr }
%struct.glyf_MaskList = type { i64, i64, ptr }
%struct.glyf_Contour = type { i64, i64, ptr }
%struct.glyf_Point = type { %struct.VQ, %struct.VQ, i8 }

@.str = external hidden unnamed_addr constant [91 x i8], align 1
@iVQ = external constant %struct.__caryll_vectorinterface_VQ, align 8
@glyf_iComponentReference = external constant %struct.__caryll_elementinterface_glyf_ComponentReference, align 8
@otfcc_iHandle = external constant %struct.otfcc_HandlePackage, align 8

; Function Attrs: nounwind uwtable
define dso_local void @stat_single_glyph(ptr dead_on_unwind noalias writable sret(%struct.glyf_GlyphStat) align 8 %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i8 noundef zeroext %4, i16 noundef zeroext %5, ptr noundef %6) #0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i8, align 1
  %12 = alloca i16, align 2
  %13 = alloca ptr, align 8
  %14 = alloca i16, align 2
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca i16, align 2
  %22 = alloca i16, align 2
  %23 = alloca i16, align 2
  %24 = alloca i16, align 2
  %25 = alloca i16, align 2
  %26 = alloca i16, align 2
  %27 = alloca ptr, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca i16, align 2
  %31 = alloca %struct.glyf_ComponentReference, align 8
  %32 = alloca ptr, align 8
  %33 = alloca %struct.otfcc_Handle, align 8
  %34 = alloca %struct.VQ, align 8
  %35 = alloca %struct.VQ, align 8
  %36 = alloca %struct.glyf_GlyphStat, align 8
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store i8 %4, ptr %11, align 1, !tbaa !9
  store i16 %5, ptr %12, align 2, !tbaa !10
  store ptr %6, ptr %13, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %0, i8 0, i64 48, i1 false)
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #5
  %37 = load ptr, ptr %9, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %37, i32 0, i32 4
  %39 = getelementptr inbounds %struct.otfcc_Handle, ptr %38, i32 0, i32 1
  %40 = load i16, ptr %39, align 4, !tbaa !12
  store i16 %40, ptr %14, align 2, !tbaa !10
  %41 = load i8, ptr %11, align 1, !tbaa !9
  %42 = zext i8 %41 to i32
  %43 = icmp sge i32 %42, 255
  br i1 %43, label %44, label %45

44:                                               ; preds = %7
  store i32 1, ptr %15, align 4
  br label %458

45:                                               ; preds = %7
  %46 = load ptr, ptr %10, align 8, !tbaa !5
  %47 = load i16, ptr %14, align 2, !tbaa !10
  %48 = zext i16 %47 to i64
  %49 = getelementptr inbounds i32, ptr %46, i64 %48
  %50 = load i32, ptr %49, align 4, !tbaa !21
  %51 = icmp eq i32 %50, 1
  br i1 %51, label %52, label %71

52:                                               ; preds = %45
  %53 = load ptr, ptr %13, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.otfcc_Options, ptr %53, i32 0, i32 24
  %55 = load ptr, ptr %54, align 8, !tbaa !22
  %56 = getelementptr inbounds %struct.otfcc_ILogger, ptr %55, i32 0, i32 6
  %57 = load ptr, ptr %56, align 8, !tbaa !24
  %58 = load ptr, ptr %13, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.otfcc_Options, ptr %58, i32 0, i32 24
  %60 = load ptr, ptr %59, align 8, !tbaa !22
  %61 = call ptr @sdsempty()
  %62 = load i16, ptr %12, align 2, !tbaa !10
  %63 = zext i16 %62 to i32
  %64 = load i16, ptr %14, align 2, !tbaa !10
  %65 = zext i16 %64 to i32
  %66 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %61, ptr noundef @.str, i32 noundef %63, i32 noundef %65)
  call void %57(ptr noundef %60, i8 noundef zeroext 1, i32 noundef 1, ptr noundef %66)
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  %68 = load i16, ptr %14, align 2, !tbaa !10
  %69 = zext i16 %68 to i64
  %70 = getelementptr inbounds i32, ptr %67, i64 %69
  store i32 2, ptr %70, align 4, !tbaa !21
  store i32 1, ptr %15, align 4
  br label %458

71:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %72 = load ptr, ptr %8, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.table_glyf, ptr %72, i32 0, i32 2
  %74 = load ptr, ptr %73, align 8, !tbaa !26
  %75 = load i16, ptr %14, align 2, !tbaa !10
  %76 = zext i16 %75 to i64
  %77 = getelementptr inbounds ptr, ptr %74, i64 %76
  %78 = load ptr, ptr %77, align 8, !tbaa !5
  store ptr %78, ptr %16, align 8, !tbaa !5
  %79 = load ptr, ptr %10, align 8, !tbaa !5
  %80 = load i16, ptr %14, align 2, !tbaa !10
  %81 = zext i16 %80 to i64
  %82 = getelementptr inbounds i32, ptr %79, i64 %81
  store i32 1, ptr %82, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  store double 0x47EFFFFFE0000000, ptr %17, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  store double 0xC7EFFFFFE0000000, ptr %18, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  store double 0x47EFFFFFE0000000, ptr %19, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  store double 0xC7EFFFFFE0000000, ptr %20, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #5
  store i16 0, ptr %21, align 2, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #5
  store i16 0, ptr %22, align 2, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #5
  store i16 0, ptr %23, align 2, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 2, ptr %24) #5
  store i16 0, ptr %24, align 2, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #5
  store i16 0, ptr %25, align 2, !tbaa !10
  br label %83

83:                                               ; preds = %194, %71
  %84 = load i16, ptr %25, align 2, !tbaa !10
  %85 = zext i16 %84 to i64
  %86 = load ptr, ptr %16, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.glyf_Glyph, ptr %86, i32 0, i32 5
  %88 = getelementptr inbounds %struct.glyf_ContourList, ptr %87, i32 0, i32 0
  %89 = load i64, ptr %88, align 8, !tbaa !28
  %90 = icmp ult i64 %85, %89
  br i1 %90, label %92, label %91

91:                                               ; preds = %83
  store i32 2, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #5
  br label %197

92:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #5
  store i16 0, ptr %26, align 2, !tbaa !10
  br label %93

93:                                               ; preds = %190, %92
  %94 = load i16, ptr %26, align 2, !tbaa !10
  %95 = zext i16 %94 to i64
  %96 = load ptr, ptr %16, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.glyf_Glyph, ptr %96, i32 0, i32 5
  %98 = getelementptr inbounds %struct.glyf_ContourList, ptr %97, i32 0, i32 2
  %99 = load ptr, ptr %98, align 8, !tbaa !31
  %100 = load i16, ptr %25, align 2, !tbaa !10
  %101 = zext i16 %100 to i64
  %102 = getelementptr inbounds %struct.glyf_Contour, ptr %99, i64 %101
  %103 = getelementptr inbounds %struct.glyf_Contour, ptr %102, i32 0, i32 0
  %104 = load i64, ptr %103, align 8, !tbaa !32
  %105 = icmp ult i64 %95, %104
  br i1 %105, label %107, label %106

106:                                              ; preds = %93
  store i32 5, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #5
  br label %193

107:                                              ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %108 = load ptr, ptr %16, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.glyf_Glyph, ptr %108, i32 0, i32 5
  %110 = getelementptr inbounds %struct.glyf_ContourList, ptr %109, i32 0, i32 2
  %111 = load ptr, ptr %110, align 8, !tbaa !31
  %112 = load i16, ptr %25, align 2, !tbaa !10
  %113 = zext i16 %112 to i64
  %114 = getelementptr inbounds %struct.glyf_Contour, ptr %111, i64 %113
  %115 = getelementptr inbounds %struct.glyf_Contour, ptr %114, i32 0, i32 2
  %116 = load ptr, ptr %115, align 8, !tbaa !26
  %117 = load i16, ptr %26, align 2, !tbaa !10
  %118 = zext i16 %117 to i64
  %119 = getelementptr inbounds %struct.glyf_Point, ptr %116, i64 %118
  store ptr %119, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %120 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %121 = load ptr, ptr %9, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %121, i32 0, i32 0
  %123 = call double %120(ptr noundef byval(%struct.VQ) align 8 %122)
  %124 = load ptr, ptr %9, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %124, i32 0, i32 5
  %126 = load double, ptr %125, align 8, !tbaa !35
  %127 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %128 = load ptr, ptr %27, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.glyf_Point, ptr %128, i32 0, i32 0
  %130 = call double %127(ptr noundef byval(%struct.VQ) align 8 %129)
  %131 = call double @llvm.fmuladd.f64(double %126, double %130, double %123)
  %132 = load ptr, ptr %9, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %132, i32 0, i32 6
  %134 = load double, ptr %133, align 8, !tbaa !36
  %135 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %136 = load ptr, ptr %27, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.glyf_Point, ptr %136, i32 0, i32 1
  %138 = call double %135(ptr noundef byval(%struct.VQ) align 8 %137)
  %139 = call double @llvm.fmuladd.f64(double %134, double %138, double %131)
  %140 = call double @llvm.round.f64(double %139)
  store double %140, ptr %28, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %141 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %142 = load ptr, ptr %9, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %142, i32 0, i32 1
  %144 = call double %141(ptr noundef byval(%struct.VQ) align 8 %143)
  %145 = load ptr, ptr %9, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %145, i32 0, i32 7
  %147 = load double, ptr %146, align 8, !tbaa !37
  %148 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %149 = load ptr, ptr %27, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.glyf_Point, ptr %149, i32 0, i32 0
  %151 = call double %148(ptr noundef byval(%struct.VQ) align 8 %150)
  %152 = call double @llvm.fmuladd.f64(double %147, double %151, double %144)
  %153 = load ptr, ptr %9, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %153, i32 0, i32 8
  %155 = load double, ptr %154, align 8, !tbaa !38
  %156 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %157 = load ptr, ptr %27, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.glyf_Point, ptr %157, i32 0, i32 1
  %159 = call double %156(ptr noundef byval(%struct.VQ) align 8 %158)
  %160 = call double @llvm.fmuladd.f64(double %155, double %159, double %152)
  %161 = call double @llvm.round.f64(double %160)
  store double %161, ptr %29, align 8, !tbaa !27
  %162 = load double, ptr %28, align 8, !tbaa !27
  %163 = load double, ptr %17, align 8, !tbaa !27
  %164 = fcmp olt double %162, %163
  br i1 %164, label %165, label %167

165:                                              ; preds = %107
  %166 = load double, ptr %28, align 8, !tbaa !27
  store double %166, ptr %17, align 8, !tbaa !27
  br label %167

167:                                              ; preds = %165, %107
  %168 = load double, ptr %28, align 8, !tbaa !27
  %169 = load double, ptr %18, align 8, !tbaa !27
  %170 = fcmp ogt double %168, %169
  br i1 %170, label %171, label %173

171:                                              ; preds = %167
  %172 = load double, ptr %28, align 8, !tbaa !27
  store double %172, ptr %18, align 8, !tbaa !27
  br label %173

173:                                              ; preds = %171, %167
  %174 = load double, ptr %29, align 8, !tbaa !27
  %175 = load double, ptr %19, align 8, !tbaa !27
  %176 = fcmp olt double %174, %175
  br i1 %176, label %177, label %179

177:                                              ; preds = %173
  %178 = load double, ptr %29, align 8, !tbaa !27
  store double %178, ptr %19, align 8, !tbaa !27
  br label %179

179:                                              ; preds = %177, %173
  %180 = load double, ptr %29, align 8, !tbaa !27
  %181 = load double, ptr %20, align 8, !tbaa !27
  %182 = fcmp ogt double %180, %181
  br i1 %182, label %183, label %185

183:                                              ; preds = %179
  %184 = load double, ptr %29, align 8, !tbaa !27
  store double %184, ptr %20, align 8, !tbaa !27
  br label %185

185:                                              ; preds = %183, %179
  %186 = load i16, ptr %22, align 2, !tbaa !10
  %187 = zext i16 %186 to i32
  %188 = add nsw i32 %187, 1
  %189 = trunc i32 %188 to i16
  store i16 %189, ptr %22, align 2, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %190

190:                                              ; preds = %185
  %191 = load i16, ptr %26, align 2, !tbaa !10
  %192 = add i16 %191, 1
  store i16 %192, ptr %26, align 2, !tbaa !10
  br label %93, !llvm.loop !39

193:                                              ; preds = %106
  br label %194

194:                                              ; preds = %193
  %195 = load i16, ptr %25, align 2, !tbaa !10
  %196 = add i16 %195, 1
  store i16 %196, ptr %25, align 2, !tbaa !10
  br label %83, !llvm.loop !41

197:                                              ; preds = %91
  %198 = load i16, ptr %22, align 2, !tbaa !10
  store i16 %198, ptr %23, align 2, !tbaa !10
  %199 = load ptr, ptr %16, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.glyf_Glyph, ptr %199, i32 0, i32 5
  %201 = getelementptr inbounds %struct.glyf_ContourList, ptr %200, i32 0, i32 0
  %202 = load i64, ptr %201, align 8, !tbaa !28
  %203 = trunc i64 %202 to i16
  store i16 %203, ptr %24, align 2, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #5
  store i16 0, ptr %30, align 2, !tbaa !10
  br label %204

204:                                              ; preds = %418, %197
  %205 = load i16, ptr %30, align 2, !tbaa !10
  %206 = zext i16 %205 to i64
  %207 = load ptr, ptr %16, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.glyf_Glyph, ptr %207, i32 0, i32 6
  %209 = getelementptr inbounds %struct.glyf_ReferenceList, ptr %208, i32 0, i32 0
  %210 = load i64, ptr %209, align 8, !tbaa !42
  %211 = icmp ult i64 %206, %210
  br i1 %211, label %213, label %212

212:                                              ; preds = %204
  store i32 8, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #5
  br label %421

213:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 128, ptr %31) #5
  %214 = load ptr, ptr @glyf_iComponentReference, align 8, !tbaa !43
  call void %214(ptr noundef %31)
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %215 = load ptr, ptr %16, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.glyf_Glyph, ptr %215, i32 0, i32 6
  %217 = getelementptr inbounds %struct.glyf_ReferenceList, ptr %216, i32 0, i32 2
  %218 = load ptr, ptr %217, align 8, !tbaa !45
  %219 = load i16, ptr %30, align 2, !tbaa !10
  %220 = zext i16 %219 to i64
  %221 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %218, i64 %220
  store ptr %221, ptr %32, align 8, !tbaa !5
  %222 = load ptr, ptr getelementptr inbounds (%struct.otfcc_HandlePackage, ptr @otfcc_iHandle, i32 0, i32 4), align 8, !tbaa !46
  %223 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %31, i32 0, i32 4
  %224 = load ptr, ptr getelementptr inbounds (%struct.otfcc_HandlePackage, ptr @otfcc_iHandle, i32 0, i32 8), align 8, !tbaa !48
  %225 = load ptr, ptr %16, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.glyf_Glyph, ptr %225, i32 0, i32 6
  %227 = getelementptr inbounds %struct.glyf_ReferenceList, ptr %226, i32 0, i32 2
  %228 = load ptr, ptr %227, align 8, !tbaa !45
  %229 = load i16, ptr %30, align 2, !tbaa !10
  %230 = zext i16 %229 to i64
  %231 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %228, i64 %230
  %232 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %231, i32 0, i32 4
  %233 = getelementptr inbounds %struct.otfcc_Handle, ptr %232, i32 0, i32 1
  %234 = load i16, ptr %233, align 4, !tbaa !12
  %235 = call { i64, ptr } %224(i16 noundef zeroext %234)
  %236 = getelementptr inbounds { i64, ptr }, ptr %33, i32 0, i32 0
  %237 = extractvalue { i64, ptr } %235, 0
  store i64 %237, ptr %236, align 8
  %238 = getelementptr inbounds { i64, ptr }, ptr %33, i32 0, i32 1
  %239 = extractvalue { i64, ptr } %235, 1
  store ptr %239, ptr %238, align 8
  %240 = getelementptr inbounds { i64, ptr }, ptr %33, i32 0, i32 0
  %241 = load i64, ptr %240, align 8
  %242 = getelementptr inbounds { i64, ptr }, ptr %33, i32 0, i32 1
  %243 = load ptr, ptr %242, align 8
  call void %222(ptr noundef %223, i64 %241, ptr %243)
  %244 = load ptr, ptr %9, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %244, i32 0, i32 5
  %246 = load double, ptr %245, align 8, !tbaa !35
  %247 = load ptr, ptr %32, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %247, i32 0, i32 5
  %249 = load double, ptr %248, align 8, !tbaa !35
  %250 = load ptr, ptr %32, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %250, i32 0, i32 6
  %252 = load double, ptr %251, align 8, !tbaa !36
  %253 = load ptr, ptr %9, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %253, i32 0, i32 7
  %255 = load double, ptr %254, align 8, !tbaa !37
  %256 = fmul double %252, %255
  %257 = call double @llvm.fmuladd.f64(double %246, double %249, double %256)
  %258 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %31, i32 0, i32 5
  store double %257, ptr %258, align 8, !tbaa !35
  %259 = load ptr, ptr %32, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %259, i32 0, i32 5
  %261 = load double, ptr %260, align 8, !tbaa !35
  %262 = load ptr, ptr %9, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %262, i32 0, i32 6
  %264 = load double, ptr %263, align 8, !tbaa !36
  %265 = load ptr, ptr %32, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %265, i32 0, i32 6
  %267 = load double, ptr %266, align 8, !tbaa !36
  %268 = load ptr, ptr %9, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %268, i32 0, i32 8
  %270 = load double, ptr %269, align 8, !tbaa !38
  %271 = fmul double %267, %270
  %272 = call double @llvm.fmuladd.f64(double %261, double %264, double %271)
  %273 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %31, i32 0, i32 6
  store double %272, ptr %273, align 8, !tbaa !36
  %274 = load ptr, ptr %9, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %274, i32 0, i32 5
  %276 = load double, ptr %275, align 8, !tbaa !35
  %277 = load ptr, ptr %32, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %277, i32 0, i32 7
  %279 = load double, ptr %278, align 8, !tbaa !37
  %280 = load ptr, ptr %9, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %280, i32 0, i32 7
  %282 = load double, ptr %281, align 8, !tbaa !37
  %283 = load ptr, ptr %32, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %283, i32 0, i32 8
  %285 = load double, ptr %284, align 8, !tbaa !38
  %286 = fmul double %282, %285
  %287 = call double @llvm.fmuladd.f64(double %276, double %279, double %286)
  %288 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %31, i32 0, i32 7
  store double %287, ptr %288, align 8, !tbaa !37
  %289 = load ptr, ptr %9, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %289, i32 0, i32 6
  %291 = load double, ptr %290, align 8, !tbaa !36
  %292 = load ptr, ptr %32, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %292, i32 0, i32 7
  %294 = load double, ptr %293, align 8, !tbaa !37
  %295 = load ptr, ptr %32, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %295, i32 0, i32 8
  %297 = load double, ptr %296, align 8, !tbaa !38
  %298 = load ptr, ptr %9, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %298, i32 0, i32 8
  %300 = load double, ptr %299, align 8, !tbaa !38
  %301 = fmul double %297, %300
  %302 = call double @llvm.fmuladd.f64(double %291, double %294, double %301)
  %303 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %31, i32 0, i32 8
  store double %302, ptr %303, align 8, !tbaa !38
  %304 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 4), align 8, !tbaa !49
  %305 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %31, i32 0, i32 0
  %306 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 23), align 8, !tbaa !50
  %307 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %308 = load ptr, ptr %32, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %308, i32 0, i32 0
  %310 = call double %307(ptr noundef byval(%struct.VQ) align 8 %309)
  %311 = load ptr, ptr %32, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %311, i32 0, i32 5
  %313 = load double, ptr %312, align 8, !tbaa !35
  %314 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %315 = load ptr, ptr %9, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %315, i32 0, i32 0
  %317 = call double %314(ptr noundef byval(%struct.VQ) align 8 %316)
  %318 = call double @llvm.fmuladd.f64(double %313, double %317, double %310)
  %319 = load ptr, ptr %32, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %319, i32 0, i32 6
  %321 = load double, ptr %320, align 8, !tbaa !36
  %322 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %323, i32 0, i32 1
  %325 = call double %322(ptr noundef byval(%struct.VQ) align 8 %324)
  %326 = call double @llvm.fmuladd.f64(double %321, double %325, double %318)
  call void %306(ptr dead_on_unwind writable sret(%struct.VQ) align 8 %34, double noundef %326)
  call void %304(ptr noundef %305, ptr noundef byval(%struct.VQ) align 8 %34)
  %327 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 4), align 8, !tbaa !49
  %328 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %31, i32 0, i32 1
  %329 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 23), align 8, !tbaa !50
  %330 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %331 = load ptr, ptr %32, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %331, i32 0, i32 1
  %333 = call double %330(ptr noundef byval(%struct.VQ) align 8 %332)
  %334 = load ptr, ptr %32, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %334, i32 0, i32 7
  %336 = load double, ptr %335, align 8, !tbaa !37
  %337 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %338 = load ptr, ptr %9, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %338, i32 0, i32 0
  %340 = call double %337(ptr noundef byval(%struct.VQ) align 8 %339)
  %341 = call double @llvm.fmuladd.f64(double %336, double %340, double %333)
  %342 = load ptr, ptr %32, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %342, i32 0, i32 8
  %344 = load double, ptr %343, align 8, !tbaa !38
  %345 = load ptr, ptr getelementptr inbounds (%struct.__caryll_vectorinterface_VQ, ptr @iVQ, i32 0, i32 22), align 8, !tbaa !33
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %346, i32 0, i32 1
  %348 = call double %345(ptr noundef byval(%struct.VQ) align 8 %347)
  %349 = call double @llvm.fmuladd.f64(double %344, double %348, double %341)
  call void %329(ptr dead_on_unwind writable sret(%struct.VQ) align 8 %35, double noundef %349)
  call void %327(ptr noundef %328, ptr noundef byval(%struct.VQ) align 8 %35)
  call void @llvm.lifetime.start.p0(i64 48, ptr %36) #5
  %350 = load ptr, ptr %8, align 8, !tbaa !5
  %351 = load ptr, ptr %10, align 8, !tbaa !5
  %352 = load i8, ptr %11, align 1, !tbaa !9
  %353 = zext i8 %352 to i32
  %354 = add nsw i32 %353, 1
  %355 = trunc i32 %354 to i8
  %356 = load i16, ptr %12, align 2, !tbaa !10
  %357 = load ptr, ptr %13, align 8, !tbaa !5
  call void @stat_single_glyph(ptr dead_on_unwind writable sret(%struct.glyf_GlyphStat) align 8 %36, ptr noundef %350, ptr noundef %31, ptr noundef %351, i8 noundef zeroext %355, i16 noundef zeroext %356, ptr noundef %357)
  %358 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 0
  %359 = load double, ptr %358, align 8, !tbaa !51
  %360 = load double, ptr %17, align 8, !tbaa !27
  %361 = fcmp olt double %359, %360
  br i1 %361, label %362, label %365

362:                                              ; preds = %213
  %363 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 0
  %364 = load double, ptr %363, align 8, !tbaa !51
  store double %364, ptr %17, align 8, !tbaa !27
  br label %365

365:                                              ; preds = %362, %213
  %366 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 1
  %367 = load double, ptr %366, align 8, !tbaa !52
  %368 = load double, ptr %18, align 8, !tbaa !27
  %369 = fcmp ogt double %367, %368
  br i1 %369, label %370, label %373

370:                                              ; preds = %365
  %371 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 1
  %372 = load double, ptr %371, align 8, !tbaa !52
  store double %372, ptr %18, align 8, !tbaa !27
  br label %373

373:                                              ; preds = %370, %365
  %374 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 2
  %375 = load double, ptr %374, align 8, !tbaa !53
  %376 = load double, ptr %19, align 8, !tbaa !27
  %377 = fcmp olt double %375, %376
  br i1 %377, label %378, label %381

378:                                              ; preds = %373
  %379 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 2
  %380 = load double, ptr %379, align 8, !tbaa !53
  store double %380, ptr %19, align 8, !tbaa !27
  br label %381

381:                                              ; preds = %378, %373
  %382 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 3
  %383 = load double, ptr %382, align 8, !tbaa !54
  %384 = load double, ptr %20, align 8, !tbaa !27
  %385 = fcmp ogt double %383, %384
  br i1 %385, label %386, label %389

386:                                              ; preds = %381
  %387 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 3
  %388 = load double, ptr %387, align 8, !tbaa !54
  store double %388, ptr %20, align 8, !tbaa !27
  br label %389

389:                                              ; preds = %386, %381
  %390 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 4
  %391 = load i16, ptr %390, align 8, !tbaa !55
  %392 = zext i16 %391 to i32
  %393 = add nsw i32 %392, 1
  %394 = load i16, ptr %21, align 2, !tbaa !10
  %395 = zext i16 %394 to i32
  %396 = icmp sgt i32 %393, %395
  br i1 %396, label %397, label %403

397:                                              ; preds = %389
  %398 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 4
  %399 = load i16, ptr %398, align 8, !tbaa !55
  %400 = zext i16 %399 to i32
  %401 = add nsw i32 %400, 1
  %402 = trunc i32 %401 to i16
  store i16 %402, ptr %21, align 2, !tbaa !10
  br label %403

403:                                              ; preds = %397, %389
  %404 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 7
  %405 = load i16, ptr %404, align 2, !tbaa !56
  %406 = zext i16 %405 to i32
  %407 = load i16, ptr %23, align 2, !tbaa !10
  %408 = zext i16 %407 to i32
  %409 = add nsw i32 %408, %406
  %410 = trunc i32 %409 to i16
  store i16 %410, ptr %23, align 2, !tbaa !10
  %411 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %36, i32 0, i32 8
  %412 = load i16, ptr %411, align 8, !tbaa !57
  %413 = zext i16 %412 to i32
  %414 = load i16, ptr %24, align 2, !tbaa !10
  %415 = zext i16 %414 to i32
  %416 = add nsw i32 %415, %413
  %417 = trunc i32 %416 to i16
  store i16 %417, ptr %24, align 2, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 128, ptr %31) #5
  br label %418

418:                                              ; preds = %403
  %419 = load i16, ptr %30, align 2, !tbaa !10
  %420 = add i16 %419, 1
  store i16 %420, ptr %30, align 2, !tbaa !10
  br label %204, !llvm.loop !58

421:                                              ; preds = %212
  %422 = load double, ptr %17, align 8, !tbaa !27
  %423 = load double, ptr %18, align 8, !tbaa !27
  %424 = fcmp ogt double %422, %423
  br i1 %424, label %425, label %426

425:                                              ; preds = %421
  store double 0.000000e+00, ptr %18, align 8, !tbaa !27
  store double 0.000000e+00, ptr %17, align 8, !tbaa !27
  br label %426

426:                                              ; preds = %425, %421
  %427 = load double, ptr %19, align 8, !tbaa !27
  %428 = load double, ptr %20, align 8, !tbaa !27
  %429 = fcmp ogt double %427, %428
  br i1 %429, label %430, label %431

430:                                              ; preds = %426
  store double 0.000000e+00, ptr %20, align 8, !tbaa !27
  store double 0.000000e+00, ptr %19, align 8, !tbaa !27
  br label %431

431:                                              ; preds = %430, %426
  %432 = load double, ptr %17, align 8, !tbaa !27
  %433 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 0
  store double %432, ptr %433, align 8, !tbaa !51
  %434 = load double, ptr %18, align 8, !tbaa !27
  %435 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 1
  store double %434, ptr %435, align 8, !tbaa !52
  %436 = load double, ptr %19, align 8, !tbaa !27
  %437 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 2
  store double %436, ptr %437, align 8, !tbaa !53
  %438 = load double, ptr %20, align 8, !tbaa !27
  %439 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 3
  store double %438, ptr %439, align 8, !tbaa !54
  %440 = load i16, ptr %21, align 2, !tbaa !10
  %441 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 4
  store i16 %440, ptr %441, align 8, !tbaa !55
  %442 = load i16, ptr %22, align 2, !tbaa !10
  %443 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 5
  store i16 %442, ptr %443, align 2, !tbaa !59
  %444 = load ptr, ptr %16, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.glyf_Glyph, ptr %444, i32 0, i32 5
  %446 = getelementptr inbounds %struct.glyf_ContourList, ptr %445, i32 0, i32 0
  %447 = load i64, ptr %446, align 8, !tbaa !28
  %448 = trunc i64 %447 to i16
  %449 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 6
  store i16 %448, ptr %449, align 4, !tbaa !60
  %450 = load i16, ptr %23, align 2, !tbaa !10
  %451 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 7
  store i16 %450, ptr %451, align 2, !tbaa !56
  %452 = load i16, ptr %24, align 2, !tbaa !10
  %453 = getelementptr inbounds %struct.glyf_GlyphStat, ptr %0, i32 0, i32 8
  store i16 %452, ptr %453, align 8, !tbaa !57
  %454 = load ptr, ptr %10, align 8, !tbaa !5
  %455 = load i16, ptr %14, align 2, !tbaa !10
  %456 = zext i16 %455 to i64
  %457 = getelementptr inbounds i32, ptr %454, i64 %456
  store i32 2, ptr %457, align 4, !tbaa !21
  store i32 1, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %458

458:                                              ; preds = %431, %52, %44
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #5
  ret void
}

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

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

declare ptr @sdscatprintf(ptr noundef, ptr noundef, ...) #3

declare ptr @sdsempty() #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.round.f64(double) #4

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

attributes #0 = { 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 #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"short", !7, i64 0}
!12 = !{!13, !11, i64 76}
!13 = !{!"", !14, i64 0, !14, i64 32, !18, i64 64, !18, i64 65, !19, i64 72, !15, i64 88, !15, i64 96, !15, i64 104, !15, i64 112, !20, i64 120, !11, i64 124, !11, i64 126}
!14 = !{!"", !15, i64 0, !16, i64 8}
!15 = !{!"double", !7, i64 0}
!16 = !{!"", !17, i64 0, !17, i64 8, !6, i64 16}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_Bool", !7, i64 0}
!19 = !{!"otfcc_Handle", !20, i64 0, !11, i64 4, !6, i64 8}
!20 = !{!"int", !7, i64 0}
!21 = !{!20, !20, i64 0}
!22 = !{!23, !6, i64 32}
!23 = !{!"", !18, i64 0, !18, i64 1, !18, i64 2, !18, i64 3, !18, i64 4, !18, i64 5, !18, i64 6, !18, i64 7, !18, i64 8, !18, i64 9, !18, i64 10, !18, i64 11, !18, i64 12, !18, i64 13, !18, i64 14, !18, i64 15, !18, i64 16, !18, i64 17, !18, i64 18, !18, i64 19, !18, i64 20, !18, i64 21, !18, i64 22, !6, i64 24, !6, i64 32}
!24 = !{!25, !6, i64 48}
!25 = !{!"otfcc_ILogger", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88}
!26 = !{!16, !6, i64 16}
!27 = !{!15, !15, i64 0}
!28 = !{!29, !17, i64 136}
!29 = !{!"", !6, i64 0, !14, i64 8, !14, i64 40, !14, i64 72, !14, i64 104, !16, i64 136, !16, i64 160, !16, i64 184, !16, i64 208, !16, i64 232, !16, i64 256, !11, i64 280, !6, i64 288, !7, i64 296, !19, i64 304, !11, i64 320, !30, i64 328}
!30 = !{!"", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !11, i64 32, !11, i64 34, !11, i64 36, !11, i64 38, !11, i64 40}
!31 = !{!29, !6, i64 152}
!32 = !{!16, !17, i64 0}
!33 = !{!34, !6, i64 176}
!34 = !{!"__caryll_vectorinterface_VQ", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216}
!35 = !{!13, !15, i64 88}
!36 = !{!13, !15, i64 96}
!37 = !{!13, !15, i64 104}
!38 = !{!13, !15, i64 112}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = distinct !{!41, !40}
!42 = !{!29, !17, i64 160}
!43 = !{!44, !6, i64 0}
!44 = !{!"__caryll_elementinterface_glyf_ComponentReference", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56}
!45 = !{!29, !6, i64 176}
!46 = !{!47, !6, i64 32}
!47 = !{!"otfcc_HandlePackage", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88}
!48 = !{!47, !6, i64 64}
!49 = !{!34, !6, i64 32}
!50 = !{!34, !6, i64 184}
!51 = !{!30, !15, i64 0}
!52 = !{!30, !15, i64 8}
!53 = !{!30, !15, i64 16}
!54 = !{!30, !15, i64 24}
!55 = !{!30, !11, i64 32}
!56 = !{!30, !11, i64 38}
!57 = !{!30, !11, i64 40}
!58 = distinct !{!58, !40}
!59 = !{!30, !11, i64 34}
!60 = !{!30, !11, i64 36}


; 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.__caryll_vectorinterface_VQ = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.__caryll_elementinterface_glyf_ComponentReference = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.otfcc_HandlePackage = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.glyf_GlyphStat = type { double, double, double, double, i16, i16, i16, i16, i16 }
%struct.glyf_ComponentReference = type { %struct.VQ, %struct.VQ, i8, i8, %struct.otfcc_Handle, double, double, double, double, i32, i16, i16 }
%struct.VQ = type { double, %struct.vq_SegList }
%struct.vq_SegList = type { i64, i64, ptr }
%struct.otfcc_Handle = type { i32, i16, ptr }
%struct.glyf_Contour = type { i64, i64, ptr }
%struct.glyf_Point = type { %struct.VQ, %struct.VQ, i8 }

@.str = external hidden unnamed_addr constant [91 x i8], align 1
@iVQ = external local_unnamed_addr constant %struct.__caryll_vectorinterface_VQ, align 8
@glyf_iComponentReference = external local_unnamed_addr constant %struct.__caryll_elementinterface_glyf_ComponentReference, align 8
@otfcc_iHandle = external local_unnamed_addr constant %struct.otfcc_HandlePackage, align 8

; Function Attrs: nounwind uwtable
define dso_local void @stat_single_glyph(ptr dead_on_unwind noalias nocapture writable writeonly sret(%struct.glyf_GlyphStat) align 8 %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr nocapture noundef %3, i8 noundef zeroext %4, i16 noundef zeroext %5, ptr nocapture noundef readonly %6) local_unnamed_addr #0 {
  %8 = alloca %struct.glyf_ComponentReference, align 8
  %9 = alloca %struct.VQ, align 8
  %10 = alloca %struct.VQ, align 8
  %11 = alloca %struct.glyf_GlyphStat, align 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %0, i8 0, i64 48, i1 false)
  %12 = getelementptr inbounds i8, ptr %2, i64 76
  %13 = load i16, ptr %12, align 4, !tbaa !5
  %14 = icmp eq i8 %4, -1
  br i1 %14, label %217, label %15

15:                                               ; preds = %7
  %16 = zext i16 %13 to i64
  %17 = getelementptr inbounds i32, ptr %3, i64 %16
  %18 = load i32, ptr %17, align 4, !tbaa !18
  %19 = icmp eq i32 %18, 1
  br i1 %19, label %20, label %29

20:                                               ; preds = %15
  %21 = getelementptr inbounds i8, ptr %6, i64 32
  %22 = load ptr, ptr %21, align 8, !tbaa !19
  %23 = getelementptr inbounds i8, ptr %22, i64 48
  %24 = load ptr, ptr %23, align 8, !tbaa !21
  %25 = tail call ptr @sdsempty() #6
  %26 = zext i16 %5 to i32
  %27 = zext i16 %13 to i32
  %28 = tail call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %25, ptr noundef nonnull @.str, i32 noundef %26, i32 noundef %27) #6
  tail call void %24(ptr noundef %22, i8 noundef zeroext 1, i32 noundef 1, ptr noundef %28) #6
  br label %.sink.split

29:                                               ; preds = %15
  %30 = getelementptr inbounds i8, ptr %1, i64 16
  %31 = load ptr, ptr %30, align 8, !tbaa !23
  %32 = getelementptr inbounds ptr, ptr %31, i64 %16
  %33 = load ptr, ptr %32, align 8, !tbaa !24
  store i32 1, ptr %17, align 4, !tbaa !18
  %34 = getelementptr inbounds i8, ptr %33, i64 136
  %35 = load i64, ptr %34, align 8, !tbaa !25
  %.not191 = icmp eq i64 %35, 0
  br i1 %.not191, label %._crit_edge166, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %29
  %36 = getelementptr inbounds i8, ptr %33, i64 152
  %37 = load ptr, ptr getelementptr inbounds (i8, ptr @iVQ, i64 176), align 8
  %38 = getelementptr inbounds i8, ptr %2, i64 88
  %39 = getelementptr inbounds i8, ptr %2, i64 96
  %40 = getelementptr inbounds i8, ptr %2, i64 32
  %41 = getelementptr inbounds i8, ptr %2, i64 104
  %42 = getelementptr inbounds i8, ptr %2, i64 112
  %.pre = load ptr, ptr %36, align 8, !tbaa !28
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge
  %43 = phi i64 [ %35, %.preheader.lr.ph ], [ %78, %._crit_edge ]
  %44 = phi ptr [ %.pre, %.preheader.lr.ph ], [ %79, %._crit_edge ]
  %45 = phi i64 [ 0, %.preheader.lr.ph ], [ %83, %._crit_edge ]
  %.0130161 = phi i16 [ 0, %.preheader.lr.ph ], [ %82, %._crit_edge ]
  %.0133160 = phi i16 [ 0, %.preheader.lr.ph ], [ %.1134.lcssa, %._crit_edge ]
  %46 = phi <2 x double> [ <double 0x47EFFFFFE0000000, double 0x47EFFFFFE0000000>, %.preheader.lr.ph ], [ %80, %._crit_edge ]
  %47 = phi <2 x double> [ <double 0xC7EFFFFFE0000000, double 0xC7EFFFFFE0000000>, %.preheader.lr.ph ], [ %81, %._crit_edge ]
  %48 = getelementptr inbounds %struct.glyf_Contour, ptr %44, i64 %45
  %49 = load i64, ptr %48, align 8, !tbaa !29
  %.not192 = icmp eq i64 %49, 0
  br i1 %.not192, label %._crit_edge, label %.lr.ph

._crit_edge166.loopexit:                          ; preds = %._crit_edge
  %50 = trunc i64 %78 to i16
  br label %._crit_edge166

._crit_edge166:                                   ; preds = %._crit_edge166.loopexit, %29
  %51 = phi i16 [ 0, %29 ], [ %50, %._crit_edge166.loopexit ]
  %.0133.lcssa = phi i16 [ 0, %29 ], [ %.1134.lcssa, %._crit_edge166.loopexit ]
  %52 = phi <2 x double> [ <double 0x47EFFFFFE0000000, double 0x47EFFFFFE0000000>, %29 ], [ %80, %._crit_edge166.loopexit ]
  %53 = phi <2 x double> [ <double 0xC7EFFFFFE0000000, double 0xC7EFFFFFE0000000>, %29 ], [ %81, %._crit_edge166.loopexit ]
  %54 = getelementptr inbounds i8, ptr %33, i64 160
  %55 = load i64, ptr %54, align 8, !tbaa !30
  %.not193 = icmp eq i64 %55, 0
  br i1 %.not193, label %._crit_edge183, label %.lr.ph182

.lr.ph182:                                        ; preds = %._crit_edge166
  %56 = load ptr, ptr @glyf_iComponentReference, align 8, !tbaa !31
  %57 = getelementptr inbounds i8, ptr %33, i64 176
  %58 = load ptr, ptr getelementptr inbounds (i8, ptr @otfcc_iHandle, i64 32), align 8
  %59 = getelementptr inbounds i8, ptr %8, i64 72
  %60 = load ptr, ptr getelementptr inbounds (i8, ptr @otfcc_iHandle, i64 64), align 8
  %61 = getelementptr inbounds i8, ptr %2, i64 88
  %62 = getelementptr inbounds i8, ptr %2, i64 104
  %63 = getelementptr inbounds i8, ptr %8, i64 88
  %64 = getelementptr inbounds i8, ptr %8, i64 96
  %65 = getelementptr inbounds i8, ptr %8, i64 112
  %66 = load ptr, ptr getelementptr inbounds (i8, ptr @iVQ, i64 32), align 8
  %67 = load ptr, ptr getelementptr inbounds (i8, ptr @iVQ, i64 184), align 8
  %68 = load ptr, ptr getelementptr inbounds (i8, ptr @iVQ, i64 176), align 8
  %69 = getelementptr inbounds i8, ptr %2, i64 32
  %70 = getelementptr inbounds i8, ptr %8, i64 32
  %71 = add i8 %4, 1
  %72 = getelementptr inbounds i8, ptr %11, i64 8
  %73 = getelementptr inbounds i8, ptr %11, i64 16
  %74 = getelementptr inbounds i8, ptr %11, i64 24
  %75 = getelementptr inbounds i8, ptr %11, i64 32
  %76 = getelementptr inbounds i8, ptr %11, i64 38
  %77 = getelementptr inbounds i8, ptr %11, i64 40
  br label %144

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.pre198 = load i64, ptr %34, align 8, !tbaa !25
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader
  %78 = phi i64 [ %43, %.preheader ], [ %.pre198, %._crit_edge.loopexit ]
  %79 = phi ptr [ %44, %.preheader ], [ %123, %._crit_edge.loopexit ]
  %.1134.lcssa = phi i16 [ %.0133160, %.preheader ], [ %120, %._crit_edge.loopexit ]
  %80 = phi <2 x double> [ %46, %.preheader ], [ %118, %._crit_edge.loopexit ]
  %81 = phi <2 x double> [ %47, %.preheader ], [ %119, %._crit_edge.loopexit ]
  %82 = add i16 %.0130161, 1
  %83 = zext i16 %82 to i64
  %84 = icmp ugt i64 %78, %83
  br i1 %84, label %.preheader, label %._crit_edge166.loopexit, !llvm.loop !33

.lr.ph:                                           ; preds = %.preheader, %.lr.ph
  %85 = phi ptr [ %123, %.lr.ph ], [ %44, %.preheader ]
  %86 = phi i64 [ %122, %.lr.ph ], [ 0, %.preheader ]
  %.0129151 = phi i16 [ %121, %.lr.ph ], [ 0, %.preheader ]
  %.1134150 = phi i16 [ %120, %.lr.ph ], [ %.0133160, %.preheader ]
  %87 = phi <2 x double> [ %118, %.lr.ph ], [ %46, %.preheader ]
  %88 = phi <2 x double> [ %119, %.lr.ph ], [ %47, %.preheader ]
  %89 = getelementptr inbounds %struct.glyf_Contour, ptr %85, i64 %45, i32 2
  %90 = load ptr, ptr %89, align 8, !tbaa !23
  %91 = getelementptr inbounds %struct.glyf_Point, ptr %90, i64 %86
  %92 = tail call double %37(ptr noundef byval(%struct.VQ) align 8 %2) #6
  %93 = load double, ptr %38, align 8, !tbaa !35
  %94 = tail call double %37(ptr noundef byval(%struct.VQ) align 8 %91) #6
  %95 = load double, ptr %39, align 8, !tbaa !36
  %96 = getelementptr inbounds i8, ptr %91, i64 32
  %97 = tail call double %37(ptr noundef nonnull byval(%struct.VQ) align 8 %96) #6
  %98 = tail call double %37(ptr noundef nonnull byval(%struct.VQ) align 8 %40) #6
  %99 = load double, ptr %41, align 8, !tbaa !37
  %100 = tail call double %37(ptr noundef byval(%struct.VQ) align 8 %91) #6
  %101 = load double, ptr %42, align 8, !tbaa !38
  %102 = tail call double %37(ptr noundef nonnull byval(%struct.VQ) align 8 %96) #6
  %103 = insertelement <2 x double> poison, double %99, i64 0
  %104 = insertelement <2 x double> %103, double %93, i64 1
  %105 = insertelement <2 x double> poison, double %100, i64 0
  %106 = insertelement <2 x double> %105, double %94, i64 1
  %107 = insertelement <2 x double> poison, double %98, i64 0
  %108 = insertelement <2 x double> %107, double %92, i64 1
  %109 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %104, <2 x double> %106, <2 x double> %108)
  %110 = insertelement <2 x double> poison, double %101, i64 0
  %111 = insertelement <2 x double> %110, double %95, i64 1
  %112 = insertelement <2 x double> poison, double %102, i64 0
  %113 = insertelement <2 x double> %112, double %97, i64 1
  %114 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %111, <2 x double> %113, <2 x double> %109)
  %115 = tail call <2 x double> @llvm.round.v2f64(<2 x double> %114)
  %116 = fcmp olt <2 x double> %115, %87
  %117 = fcmp ogt <2 x double> %115, %88
  %118 = select <2 x i1> %116, <2 x double> %115, <2 x double> %87
  %119 = select <2 x i1> %117, <2 x double> %115, <2 x double> %88
  %120 = add i16 %.1134150, 1
  %121 = add i16 %.0129151, 1
  %122 = zext i16 %121 to i64
  %123 = load ptr, ptr %36, align 8, !tbaa !28
  %124 = getelementptr inbounds %struct.glyf_Contour, ptr %123, i64 %45
  %125 = load i64, ptr %124, align 8, !tbaa !29
  %126 = icmp ugt i64 %125, %122
  br i1 %126, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !39

._crit_edge183.loopexit:                          ; preds = %144
  %.pre199 = load i64, ptr %34, align 8, !tbaa !25
  %.pre200 = trunc i64 %.pre199 to i16
  br label %._crit_edge183

._crit_edge183:                                   ; preds = %._crit_edge183.loopexit, %._crit_edge166
  %.pre-phi = phi i16 [ %.pre200, %._crit_edge183.loopexit ], [ %51, %._crit_edge166 ]
  %.0132.lcssa = phi i16 [ %210, %._crit_edge183.loopexit ], [ %.0133.lcssa, %._crit_edge166 ]
  %.0131.lcssa = phi i16 [ %212, %._crit_edge183.loopexit ], [ %51, %._crit_edge166 ]
  %.0127.lcssa = phi i16 [ %.1128, %._crit_edge183.loopexit ], [ 0, %._crit_edge166 ]
  %127 = phi <2 x double> [ %205, %._crit_edge183.loopexit ], [ %52, %._crit_edge166 ]
  %128 = phi <2 x double> [ %206, %._crit_edge183.loopexit ], [ %53, %._crit_edge166 ]
  %129 = fcmp ogt <2 x double> %127, %128
  %130 = extractelement <2 x i1> %129, i64 1
  %131 = extractelement <2 x double> %128, i64 1
  %.5113 = select i1 %130, double 0.000000e+00, double %131
  %132 = extractelement <2 x double> %127, i64 1
  %.5 = select i1 %130, double 0.000000e+00, double %132
  %133 = extractelement <2 x i1> %129, i64 0
  %134 = extractelement <2 x double> %128, i64 0
  %.5126 = select i1 %133, double 0.000000e+00, double %134
  %135 = extractelement <2 x double> %127, i64 0
  %.5120 = select i1 %133, double 0.000000e+00, double %135
  store double %.5, ptr %0, align 8, !tbaa !40
  %136 = getelementptr inbounds i8, ptr %0, i64 8
  store double %.5113, ptr %136, align 8, !tbaa !41
  %137 = getelementptr inbounds i8, ptr %0, i64 16
  store double %.5120, ptr %137, align 8, !tbaa !42
  %138 = getelementptr inbounds i8, ptr %0, i64 24
  store double %.5126, ptr %138, align 8, !tbaa !43
  %139 = getelementptr inbounds i8, ptr %0, i64 32
  store i16 %.0127.lcssa, ptr %139, align 8, !tbaa !44
  %140 = getelementptr inbounds i8, ptr %0, i64 34
  store i16 %.0133.lcssa, ptr %140, align 2, !tbaa !45
  %141 = getelementptr inbounds i8, ptr %0, i64 36
  store i16 %.pre-phi, ptr %141, align 4, !tbaa !46
  %142 = getelementptr inbounds i8, ptr %0, i64 38
  store i16 %.0132.lcssa, ptr %142, align 2, !tbaa !47
  %143 = getelementptr inbounds i8, ptr %0, i64 40
  store i16 %.0131.lcssa, ptr %143, align 8, !tbaa !48
  br label %.sink.split

144:                                              ; preds = %.lr.ph182, %144
  %145 = phi i64 [ 0, %.lr.ph182 ], [ %214, %144 ]
  %.0114178 = phi i16 [ 0, %.lr.ph182 ], [ %213, %144 ]
  %.0127175 = phi i16 [ 0, %.lr.ph182 ], [ %.1128, %144 ]
  %.0131174 = phi i16 [ %51, %.lr.ph182 ], [ %212, %144 ]
  %.0132173 = phi i16 [ %.0133.lcssa, %.lr.ph182 ], [ %210, %144 ]
  %146 = phi <2 x double> [ %52, %.lr.ph182 ], [ %205, %144 ]
  %147 = phi <2 x double> [ %53, %.lr.ph182 ], [ %206, %144 ]
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %8) #6
  call void %56(ptr noundef nonnull %8) #6
  %148 = load ptr, ptr %57, align 8, !tbaa !49
  %149 = getelementptr inbounds %struct.glyf_ComponentReference, ptr %148, i64 %145
  %150 = getelementptr inbounds i8, ptr %149, i64 76
  %151 = load i16, ptr %150, align 4, !tbaa !5
  %152 = call { i64, ptr } %60(i16 noundef zeroext %151) #6
  %153 = extractvalue { i64, ptr } %152, 0
  %154 = extractvalue { i64, ptr } %152, 1
  call void %58(ptr noundef nonnull %59, i64 %153, ptr %154) #6
  %155 = getelementptr inbounds i8, ptr %149, i64 88
  %156 = load double, ptr %155, align 8, !tbaa !35
  %157 = getelementptr inbounds i8, ptr %149, i64 96
  %158 = load double, ptr %157, align 8, !tbaa !36
  %159 = getelementptr inbounds i8, ptr %149, i64 104
  %160 = load double, ptr %159, align 8, !tbaa !37
  %161 = getelementptr inbounds i8, ptr %149, i64 112
  %162 = load double, ptr %161, align 8, !tbaa !38
  %163 = load <2 x double>, ptr %62, align 8, !tbaa !50
  %164 = extractelement <2 x double> %163, i64 0
  %165 = fmul double %158, %164
  %166 = load <2 x double>, ptr %61, align 8, !tbaa !50
  %167 = extractelement <2 x double> %166, i64 0
  %168 = call double @llvm.fmuladd.f64(double %167, double %156, double %165)
  store double %168, ptr %63, align 8, !tbaa !35
  %169 = load double, ptr %155, align 8, !tbaa !35
  %170 = insertelement <2 x double> poison, double %162, i64 0
  %171 = insertelement <2 x double> %170, double %158, i64 1
  %172 = fmul <2 x double> %163, %171
  %173 = insertelement <2 x double> poison, double %160, i64 0
  %174 = insertelement <2 x double> %173, double %169, i64 1
  %175 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %166, <2 x double> %174, <2 x double> %172)
  %176 = shufflevector <2 x double> %175, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  store <2 x double> %176, ptr %64, align 8, !tbaa !50
  %177 = load double, ptr %159, align 8, !tbaa !37
  %178 = extractelement <2 x double> %163, i64 1
  %179 = fmul double %178, %162
  %180 = extractelement <2 x double> %166, i64 1
  %181 = call double @llvm.fmuladd.f64(double %180, double %177, double %179)
  store double %181, ptr %65, align 8, !tbaa !38
  %182 = call double %68(ptr noundef byval(%struct.VQ) align 8 %149) #6
  %183 = load double, ptr %155, align 8, !tbaa !35
  %184 = call double %68(ptr noundef byval(%struct.VQ) align 8 %2) #6
  %185 = call double @llvm.fmuladd.f64(double %183, double %184, double %182)
  %186 = load double, ptr %157, align 8, !tbaa !36
  %187 = call double %68(ptr noundef nonnull byval(%struct.VQ) align 8 %69) #6
  %188 = call double @llvm.fmuladd.f64(double %186, double %187, double %185)
  call void %67(ptr dead_on_unwind nonnull writable sret(%struct.VQ) align 8 %9, double noundef %188) #6
  call void %66(ptr noundef nonnull %8, ptr noundef nonnull byval(%struct.VQ) align 8 %9) #6
  %189 = getelementptr inbounds i8, ptr %149, i64 32
  %190 = call double %68(ptr noundef nonnull byval(%struct.VQ) align 8 %189) #6
  %191 = load double, ptr %159, align 8, !tbaa !37
  %192 = call double %68(ptr noundef byval(%struct.VQ) align 8 %2) #6
  %193 = call double @llvm.fmuladd.f64(double %191, double %192, double %190)
  %194 = load double, ptr %161, align 8, !tbaa !38
  %195 = call double %68(ptr noundef nonnull byval(%struct.VQ) align 8 %69) #6
  %196 = call double @llvm.fmuladd.f64(double %194, double %195, double %193)
  call void %67(ptr dead_on_unwind nonnull writable sret(%struct.VQ) align 8 %10, double noundef %196) #6
  call void %66(ptr noundef nonnull %70, ptr noundef nonnull byval(%struct.VQ) align 8 %10) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %11) #6
  call void @stat_single_glyph(ptr dead_on_unwind nonnull writable sret(%struct.glyf_GlyphStat) align 8 %11, ptr noundef %1, ptr noundef nonnull %8, ptr noundef %3, i8 noundef zeroext %71, i16 noundef zeroext %5, ptr noundef %6)
  %197 = load double, ptr %11, align 8, !tbaa !40
  %198 = load double, ptr %72, align 8, !tbaa !41
  %199 = load <2 x double>, ptr %73, align 8
  %200 = load <2 x double>, ptr %74, align 8
  %201 = insertelement <2 x double> %199, double %197, i64 1
  %202 = fcmp olt <2 x double> %201, %146
  %203 = insertelement <2 x double> %200, double %198, i64 1
  %204 = fcmp ogt <2 x double> %203, %147
  %205 = select <2 x i1> %202, <2 x double> %201, <2 x double> %146
  %206 = select <2 x i1> %204, <2 x double> %203, <2 x double> %147
  %207 = load i16, ptr %75, align 8, !tbaa !44
  %.not = icmp ult i16 %207, %.0127175
  %208 = add i16 %207, 1
  %.1128 = select i1 %.not, i16 %.0127175, i16 %208
  %209 = load i16, ptr %76, align 2, !tbaa !47
  %210 = add i16 %209, %.0132173
  %211 = load i16, ptr %77, align 8, !tbaa !48
  %212 = add i16 %211, %.0131174
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %8) #6
  %213 = add i16 %.0114178, 1
  %214 = zext i16 %213 to i64
  %215 = load i64, ptr %54, align 8, !tbaa !30
  %216 = icmp ugt i64 %215, %214
  br i1 %216, label %144, label %._crit_edge183.loopexit, !llvm.loop !51

.sink.split:                                      ; preds = %20, %._crit_edge183
  store i32 2, ptr %17, align 4, !tbaa !18
  br label %217

217:                                              ; preds = %.sink.split, %7
  ret void
}

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

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

declare ptr @sdscatprintf(ptr noundef, ptr noundef, ...) local_unnamed_addr #3

declare ptr @sdsempty() local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #4

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.round.v2f64(<2 x double>) #5

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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, !17, i64 76}
!6 = !{!"", !7, i64 0, !7, i64 32, !14, i64 64, !14, i64 65, !15, i64 72, !8, i64 88, !8, i64 96, !8, i64 104, !8, i64 112, !16, i64 120, !17, i64 124, !17, i64 126}
!7 = !{!"", !8, i64 0, !11, i64 8}
!8 = !{!"double", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"", !12, i64 0, !12, i64 8, !13, i64 16}
!12 = !{!"long", !9, i64 0}
!13 = !{!"any pointer", !9, i64 0}
!14 = !{!"_Bool", !9, i64 0}
!15 = !{!"otfcc_Handle", !16, i64 0, !17, i64 4, !13, i64 8}
!16 = !{!"int", !9, i64 0}
!17 = !{!"short", !9, i64 0}
!18 = !{!16, !16, i64 0}
!19 = !{!20, !13, i64 32}
!20 = !{!"", !14, i64 0, !14, i64 1, !14, i64 2, !14, i64 3, !14, i64 4, !14, i64 5, !14, i64 6, !14, i64 7, !14, i64 8, !14, i64 9, !14, i64 10, !14, i64 11, !14, i64 12, !14, i64 13, !14, i64 14, !14, i64 15, !14, i64 16, !14, i64 17, !14, i64 18, !14, i64 19, !14, i64 20, !14, i64 21, !14, i64 22, !13, i64 24, !13, i64 32}
!21 = !{!22, !13, i64 48}
!22 = !{!"otfcc_ILogger", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88}
!23 = !{!11, !13, i64 16}
!24 = !{!13, !13, i64 0}
!25 = !{!26, !12, i64 136}
!26 = !{!"", !13, i64 0, !7, i64 8, !7, i64 40, !7, i64 72, !7, i64 104, !11, i64 136, !11, i64 160, !11, i64 184, !11, i64 208, !11, i64 232, !11, i64 256, !17, i64 280, !13, i64 288, !9, i64 296, !15, i64 304, !17, i64 320, !27, i64 328}
!27 = !{!"", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24, !17, i64 32, !17, i64 34, !17, i64 36, !17, i64 38, !17, i64 40}
!28 = !{!26, !13, i64 152}
!29 = !{!11, !12, i64 0}
!30 = !{!26, !12, i64 160}
!31 = !{!32, !13, i64 0}
!32 = !{!"__caryll_elementinterface_glyf_ComponentReference", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!6, !8, i64 88}
!36 = !{!6, !8, i64 96}
!37 = !{!6, !8, i64 104}
!38 = !{!6, !8, i64 112}
!39 = distinct !{!39, !34}
!40 = !{!27, !8, i64 0}
!41 = !{!27, !8, i64 8}
!42 = !{!27, !8, i64 16}
!43 = !{!27, !8, i64 24}
!44 = !{!27, !17, i64 32}
!45 = !{!27, !17, i64 34}
!46 = !{!27, !17, i64 36}
!47 = !{!27, !17, i64 38}
!48 = !{!27, !17, i64 40}
!49 = !{!26, !13, i64 176}
!50 = !{!8, !8, i64 0}
!51 = distinct !{!51, !34}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass