; LLVM IR from ashishzero/karma :: src/modules/core (stb)

; 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.Allocator = type { ptr, ptr }
%struct.stbtt_fontinfo = type { ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf }
%struct.stbtt__buf = type { ptr, i32, i32 }
%struct.Thread_Context = type { %union.Handle, i64, %struct.Allocator, %struct.Temporary_Memory, ptr, ptr }
%union.Handle = type { ptr }
%struct.Temporary_Memory = type { ptr, ptr, i64 }
%struct.stbtt_vertex = type { i16, i16, i16, i16, i16, i16, i8, i8 }

@.str.10 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@__PRETTY_FUNCTION__.stbtt_GetGlyphSDF = external hidden unnamed_addr constant [124 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z11memory_freePKv9Allocator(ptr noundef, ptr, ptr) #0

; Function Attrs: uwtable
declare hidden noundef ptr @_ZTW7context() #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local i32 @stbtt_GetGlyphShape(ptr noundef, i32 noundef, ptr noundef) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @stbtt_GetGlyphBitmapBoxSubpixel(ptr noundef, i32 noundef, float noundef, float noundef, float noundef, float noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_Z15memory_allocatem9Allocator(i64 noundef, ptr, ptr) #0

; Function Attrs: mustprogress uwtable
define dso_local ptr @stbtt_GetGlyphSDF(ptr noundef %0, float noundef %1, i32 noundef %2, i32 noundef %3, i8 noundef zeroext %4, float noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9) #5 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca float, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i8, align 1
  %17 = alloca float, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca float, align 4
  %23 = alloca float, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca %struct.Allocator, align 8
  %40 = alloca %struct.Allocator, align 8
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca float, align 4
  %49 = alloca float, align 4
  %50 = alloca float, align 4
  %51 = alloca float, align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca float, align 4
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  %57 = alloca float, align 4
  %58 = alloca float, align 4
  %59 = alloca float, align 4
  %60 = alloca float, align 4
  %61 = alloca i32, align 4
  %62 = alloca float, align 4
  %63 = alloca float, align 4
  %64 = alloca float, align 4
  %65 = alloca float, align 4
  %66 = alloca float, align 4
  %67 = alloca float, align 4
  %68 = alloca float, align 4
  %69 = alloca float, align 4
  %70 = alloca float, align 4
  %71 = alloca float, align 4
  %72 = alloca float, align 4
  %73 = alloca float, align 4
  %74 = alloca float, align 4
  %75 = alloca float, align 4
  %76 = alloca float, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca float, align 4
  %80 = alloca float, align 4
  %81 = alloca i32, align 4
  %82 = alloca float, align 4
  %83 = alloca float, align 4
  %84 = alloca float, align 4
  %85 = alloca float, align 4
  %86 = alloca float, align 4
  %87 = alloca float, align 4
  %88 = alloca [3 x float], align 4
  %89 = alloca float, align 4
  %90 = alloca float, align 4
  %91 = alloca float, align 4
  %92 = alloca float, align 4
  %93 = alloca float, align 4
  %94 = alloca float, align 4
  %95 = alloca float, align 4
  %96 = alloca float, align 4
  %97 = alloca float, align 4
  %98 = alloca float, align 4
  %99 = alloca float, align 4
  %100 = alloca float, align 4
  %101 = alloca float, align 4
  %102 = alloca %struct.Allocator, align 8
  %103 = alloca %struct.Allocator, align 8
  store ptr %0, ptr %12, align 8, !tbaa !5
  store float %1, ptr %13, align 4, !tbaa !9
  store i32 %2, ptr %14, align 4, !tbaa !11
  store i32 %3, ptr %15, align 4, !tbaa !11
  store i8 %4, ptr %16, align 1, !tbaa !13
  store float %5, ptr %17, align 4, !tbaa !9
  store ptr %6, ptr %18, align 8, !tbaa !5
  store ptr %7, ptr %19, align 8, !tbaa !5
  store ptr %8, ptr %20, align 8, !tbaa !5
  store ptr %9, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %104 = load float, ptr %13, align 4, !tbaa !9
  store float %104, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  %105 = load float, ptr %13, align 4, !tbaa !9
  store float %105, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %106 = load float, ptr %13, align 4, !tbaa !9
  %107 = fcmp oeq float %106, 0.000000e+00
  br i1 %107, label %108, label %109

108:                                              ; preds = %10
  store ptr null, ptr %11, align 8
  store i32 1, ptr %31, align 4
  br label %1174

109:                                              ; preds = %10
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = load i32, ptr %14, align 4, !tbaa !11
  %112 = load float, ptr %13, align 4, !tbaa !9
  %113 = load float, ptr %13, align 4, !tbaa !9
  call void @stbtt_GetGlyphBitmapBoxSubpixel(ptr noundef %110, i32 noundef %111, float noundef %112, float noundef %113, float noundef 0.000000e+00, float noundef 0.000000e+00, ptr noundef %24, ptr noundef %25, ptr noundef %26, ptr noundef %27)
  %114 = load i32, ptr %24, align 4, !tbaa !11
  %115 = load i32, ptr %26, align 4, !tbaa !11
  %116 = icmp eq i32 %114, %115
  br i1 %116, label %121, label %117

117:                                              ; preds = %109
  %118 = load i32, ptr %25, align 4, !tbaa !11
  %119 = load i32, ptr %27, align 4, !tbaa !11
  %120 = icmp eq i32 %118, %119
  br i1 %120, label %121, label %122

121:                                              ; preds = %117, %109
  store ptr null, ptr %11, align 8
  store i32 1, ptr %31, align 4
  br label %1174

122:                                              ; preds = %117
  %123 = load i32, ptr %15, align 4, !tbaa !11
  %124 = load i32, ptr %24, align 4, !tbaa !11
  %125 = sub nsw i32 %124, %123
  store i32 %125, ptr %24, align 4, !tbaa !11
  %126 = load i32, ptr %15, align 4, !tbaa !11
  %127 = load i32, ptr %25, align 4, !tbaa !11
  %128 = sub nsw i32 %127, %126
  store i32 %128, ptr %25, align 4, !tbaa !11
  %129 = load i32, ptr %15, align 4, !tbaa !11
  %130 = load i32, ptr %26, align 4, !tbaa !11
  %131 = add nsw i32 %130, %129
  store i32 %131, ptr %26, align 4, !tbaa !11
  %132 = load i32, ptr %15, align 4, !tbaa !11
  %133 = load i32, ptr %27, align 4, !tbaa !11
  %134 = add nsw i32 %133, %132
  store i32 %134, ptr %27, align 4, !tbaa !11
  %135 = load i32, ptr %26, align 4, !tbaa !11
  %136 = load i32, ptr %24, align 4, !tbaa !11
  %137 = sub nsw i32 %135, %136
  store i32 %137, ptr %28, align 4, !tbaa !11
  %138 = load i32, ptr %27, align 4, !tbaa !11
  %139 = load i32, ptr %25, align 4, !tbaa !11
  %140 = sub nsw i32 %138, %139
  store i32 %140, ptr %29, align 4, !tbaa !11
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  %142 = icmp ne ptr %141, null
  br i1 %142, label %143, label %146

143:                                              ; preds = %122
  %144 = load i32, ptr %28, align 4, !tbaa !11
  %145 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 %144, ptr %145, align 4, !tbaa !11
  br label %146

146:                                              ; preds = %143, %122
  %147 = load ptr, ptr %19, align 8, !tbaa !5
  %148 = icmp ne ptr %147, null
  br i1 %148, label %149, label %152

149:                                              ; preds = %146
  %150 = load i32, ptr %29, align 4, !tbaa !11
  %151 = load ptr, ptr %19, align 8, !tbaa !5
  store i32 %150, ptr %151, align 4, !tbaa !11
  br label %152

152:                                              ; preds = %149, %146
  %153 = load ptr, ptr %20, align 8, !tbaa !5
  %154 = icmp ne ptr %153, null
  br i1 %154, label %155, label %158

155:                                              ; preds = %152
  %156 = load i32, ptr %24, align 4, !tbaa !11
  %157 = load ptr, ptr %20, align 8, !tbaa !5
  store i32 %156, ptr %157, align 4, !tbaa !11
  br label %158

158:                                              ; preds = %155, %152
  %159 = load ptr, ptr %21, align 8, !tbaa !5
  %160 = icmp ne ptr %159, null
  br i1 %160, label %161, label %164

161:                                              ; preds = %158
  %162 = load i32, ptr %25, align 4, !tbaa !11
  %163 = load ptr, ptr %21, align 8, !tbaa !5
  store i32 %162, ptr %163, align 4, !tbaa !11
  br label %164

164:                                              ; preds = %161, %158
  %165 = load float, ptr %23, align 4, !tbaa !9
  %166 = fneg float %165
  store float %166, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %167 = load ptr, ptr %12, align 8, !tbaa !5
  %168 = load i32, ptr %14, align 4, !tbaa !11
  %169 = call i32 @stbtt_GetGlyphShape(ptr noundef %167, i32 noundef %168, ptr noundef %37)
  store i32 %169, ptr %38, align 4, !tbaa !11
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %170, i32 0, i32 0
  %172 = load i32, ptr %28, align 4, !tbaa !11
  %173 = load i32, ptr %29, align 4, !tbaa !11
  %174 = mul nsw i32 %172, %173
  %175 = sext i32 %174 to i64
  %176 = call ptr @_ZTW7context()
  %177 = getelementptr inbounds %struct.Thread_Context, ptr %176, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %39, ptr align 8 %177, i64 16, i1 false), !tbaa.struct !14
  %178 = getelementptr inbounds { ptr, ptr }, ptr %39, i32 0, i32 0
  %179 = load ptr, ptr %178, align 8
  %180 = getelementptr inbounds { ptr, ptr }, ptr %39, i32 0, i32 1
  %181 = load ptr, ptr %180, align 8
  %182 = call noundef ptr @_Z15memory_allocatem9Allocator(i64 noundef %175, ptr %179, ptr %181)
  store ptr %182, ptr %30, align 8, !tbaa !5
  %183 = load ptr, ptr %12, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %183, i32 0, i32 0
  %185 = load i32, ptr %38, align 4, !tbaa !11
  %186 = sext i32 %185 to i64
  %187 = mul i64 %186, 4
  %188 = call ptr @_ZTW7context()
  %189 = getelementptr inbounds %struct.Thread_Context, ptr %188, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %189, i64 16, i1 false), !tbaa.struct !14
  %190 = getelementptr inbounds { ptr, ptr }, ptr %40, i32 0, i32 0
  %191 = load ptr, ptr %190, align 8
  %192 = getelementptr inbounds { ptr, ptr }, ptr %40, i32 0, i32 1
  %193 = load ptr, ptr %192, align 8
  %194 = call noundef ptr @_Z15memory_allocatem9Allocator(i64 noundef %187, ptr %191, ptr %193)
  store ptr %194, ptr %36, align 8, !tbaa !5
  store i32 0, ptr %34, align 4, !tbaa !11
  %195 = load i32, ptr %38, align 4, !tbaa !11
  %196 = sub nsw i32 %195, 1
  store i32 %196, ptr %35, align 4, !tbaa !11
  br label %197

197:                                              ; preds = %391, %164
  %198 = load i32, ptr %34, align 4, !tbaa !11
  %199 = load i32, ptr %38, align 4, !tbaa !11
  %200 = icmp slt i32 %198, %199
  br i1 %200, label %201, label %394

201:                                              ; preds = %197
  %202 = load ptr, ptr %37, align 8, !tbaa !5
  %203 = load i32, ptr %34, align 4, !tbaa !11
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds %struct.stbtt_vertex, ptr %202, i64 %204
  %206 = getelementptr inbounds %struct.stbtt_vertex, ptr %205, i32 0, i32 6
  %207 = load i8, ptr %206, align 2, !tbaa !15
  %208 = zext i8 %207 to i32
  %209 = icmp eq i32 %208, 2
  br i1 %209, label %210, label %278

210:                                              ; preds = %201
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %211 = load ptr, ptr %37, align 8, !tbaa !5
  %212 = load i32, ptr %34, align 4, !tbaa !11
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds %struct.stbtt_vertex, ptr %211, i64 %213
  %215 = getelementptr inbounds %struct.stbtt_vertex, ptr %214, i32 0, i32 0
  %216 = load i16, ptr %215, align 2, !tbaa !18
  %217 = sext i16 %216 to i32
  %218 = sitofp i32 %217 to float
  %219 = load float, ptr %22, align 4, !tbaa !9
  %220 = fmul float %218, %219
  store float %220, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  %221 = load ptr, ptr %37, align 8, !tbaa !5
  %222 = load i32, ptr %34, align 4, !tbaa !11
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds %struct.stbtt_vertex, ptr %221, i64 %223
  %225 = getelementptr inbounds %struct.stbtt_vertex, ptr %224, i32 0, i32 1
  %226 = load i16, ptr %225, align 2, !tbaa !19
  %227 = sext i16 %226 to i32
  %228 = sitofp i32 %227 to float
  %229 = load float, ptr %23, align 4, !tbaa !9
  %230 = fmul float %228, %229
  store float %230, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  %231 = load ptr, ptr %37, align 8, !tbaa !5
  %232 = load i32, ptr %35, align 4, !tbaa !11
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds %struct.stbtt_vertex, ptr %231, i64 %233
  %235 = getelementptr inbounds %struct.stbtt_vertex, ptr %234, i32 0, i32 0
  %236 = load i16, ptr %235, align 2, !tbaa !18
  %237 = sext i16 %236 to i32
  %238 = sitofp i32 %237 to float
  %239 = load float, ptr %22, align 4, !tbaa !9
  %240 = fmul float %238, %239
  store float %240, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  %241 = load ptr, ptr %37, align 8, !tbaa !5
  %242 = load i32, ptr %35, align 4, !tbaa !11
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds %struct.stbtt_vertex, ptr %241, i64 %243
  %245 = getelementptr inbounds %struct.stbtt_vertex, ptr %244, i32 0, i32 1
  %246 = load i16, ptr %245, align 2, !tbaa !19
  %247 = sext i16 %246 to i32
  %248 = sitofp i32 %247 to float
  %249 = load float, ptr %23, align 4, !tbaa !9
  %250 = fmul float %248, %249
  store float %250, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  %251 = load float, ptr %43, align 4, !tbaa !9
  %252 = load float, ptr %41, align 4, !tbaa !9
  %253 = fsub float %251, %252
  %254 = load float, ptr %43, align 4, !tbaa !9
  %255 = load float, ptr %41, align 4, !tbaa !9
  %256 = fsub float %254, %255
  %257 = load float, ptr %44, align 4, !tbaa !9
  %258 = load float, ptr %42, align 4, !tbaa !9
  %259 = fsub float %257, %258
  %260 = load float, ptr %44, align 4, !tbaa !9
  %261 = load float, ptr %42, align 4, !tbaa !9
  %262 = fsub float %260, %261
  %263 = fmul float %259, %262
  %264 = call float @llvm.fmuladd.f32(float %253, float %256, float %263)
  %265 = call noundef float @_ZSt4sqrtf(float noundef %264)
  store float %265, ptr %45, align 4, !tbaa !9
  %266 = load float, ptr %45, align 4, !tbaa !9
  %267 = fcmp oeq float %266, 0.000000e+00
  br i1 %267, label %268, label %269

268:                                              ; preds = %210
  br label %272

269:                                              ; preds = %210
  %270 = load float, ptr %45, align 4, !tbaa !9
  %271 = fdiv float 1.000000e+00, %270
  br label %272

272:                                              ; preds = %269, %268
  %273 = phi float [ 0.000000e+00, %268 ], [ %271, %269 ]
  %274 = load ptr, ptr %36, align 8, !tbaa !5
  %275 = load i32, ptr %34, align 4, !tbaa !11
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds float, ptr %274, i64 %276
  store float %273, ptr %277, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %390

278:                                              ; preds = %201
  %279 = load ptr, ptr %37, align 8, !tbaa !5
  %280 = load i32, ptr %34, align 4, !tbaa !11
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds %struct.stbtt_vertex, ptr %279, i64 %281
  %283 = getelementptr inbounds %struct.stbtt_vertex, ptr %282, i32 0, i32 6
  %284 = load i8, ptr %283, align 2, !tbaa !15
  %285 = zext i8 %284 to i32
  %286 = icmp eq i32 %285, 3
  br i1 %286, label %287, label %384

287:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  %288 = load ptr, ptr %37, align 8, !tbaa !5
  %289 = load i32, ptr %35, align 4, !tbaa !11
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds %struct.stbtt_vertex, ptr %288, i64 %290
  %292 = getelementptr inbounds %struct.stbtt_vertex, ptr %291, i32 0, i32 0
  %293 = load i16, ptr %292, align 2, !tbaa !18
  %294 = sext i16 %293 to i32
  %295 = sitofp i32 %294 to float
  %296 = load float, ptr %22, align 4, !tbaa !9
  %297 = fmul float %295, %296
  store float %297, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  %298 = load ptr, ptr %37, align 8, !tbaa !5
  %299 = load i32, ptr %35, align 4, !tbaa !11
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds %struct.stbtt_vertex, ptr %298, i64 %300
  %302 = getelementptr inbounds %struct.stbtt_vertex, ptr %301, i32 0, i32 1
  %303 = load i16, ptr %302, align 2, !tbaa !19
  %304 = sext i16 %303 to i32
  %305 = sitofp i32 %304 to float
  %306 = load float, ptr %23, align 4, !tbaa !9
  %307 = fmul float %305, %306
  store float %307, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %308 = load ptr, ptr %37, align 8, !tbaa !5
  %309 = load i32, ptr %34, align 4, !tbaa !11
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds %struct.stbtt_vertex, ptr %308, i64 %310
  %312 = getelementptr inbounds %struct.stbtt_vertex, ptr %311, i32 0, i32 2
  %313 = load i16, ptr %312, align 2, !tbaa !20
  %314 = sext i16 %313 to i32
  %315 = sitofp i32 %314 to float
  %316 = load float, ptr %22, align 4, !tbaa !9
  %317 = fmul float %315, %316
  store float %317, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  %318 = load ptr, ptr %37, align 8, !tbaa !5
  %319 = load i32, ptr %34, align 4, !tbaa !11
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds %struct.stbtt_vertex, ptr %318, i64 %320
  %322 = getelementptr inbounds %struct.stbtt_vertex, ptr %321, i32 0, i32 3
  %323 = load i16, ptr %322, align 2, !tbaa !21
  %324 = sext i16 %323 to i32
  %325 = sitofp i32 %324 to float
  %326 = load float, ptr %23, align 4, !tbaa !9
  %327 = fmul float %325, %326
  store float %327, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  %328 = load ptr, ptr %37, align 8, !tbaa !5
  %329 = load i32, ptr %34, align 4, !tbaa !11
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds %struct.stbtt_vertex, ptr %328, i64 %330
  %332 = getelementptr inbounds %struct.stbtt_vertex, ptr %331, i32 0, i32 0
  %333 = load i16, ptr %332, align 2, !tbaa !18
  %334 = sext i16 %333 to i32
  %335 = sitofp i32 %334 to float
  %336 = load float, ptr %22, align 4, !tbaa !9
  %337 = fmul float %335, %336
  store float %337, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %338 = load ptr, ptr %37, align 8, !tbaa !5
  %339 = load i32, ptr %34, align 4, !tbaa !11
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds %struct.stbtt_vertex, ptr %338, i64 %340
  %342 = getelementptr inbounds %struct.stbtt_vertex, ptr %341, i32 0, i32 1
  %343 = load i16, ptr %342, align 2, !tbaa !19
  %344 = sext i16 %343 to i32
  %345 = sitofp i32 %344 to float
  %346 = load float, ptr %23, align 4, !tbaa !9
  %347 = fmul float %345, %346
  store float %347, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %348 = load float, ptr %50, align 4, !tbaa !9
  %349 = load float, ptr %48, align 4, !tbaa !9
  %350 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %349, float %348)
  %351 = load float, ptr %46, align 4, !tbaa !9
  %352 = fadd float %350, %351
  store float %352, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  %353 = load float, ptr %51, align 4, !tbaa !9
  %354 = load float, ptr %49, align 4, !tbaa !9
  %355 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %354, float %353)
  %356 = load float, ptr %47, align 4, !tbaa !9
  %357 = fadd float %355, %356
  store float %357, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %358 = load float, ptr %52, align 4, !tbaa !9
  %359 = load float, ptr %52, align 4, !tbaa !9
  %360 = load float, ptr %53, align 4, !tbaa !9
  %361 = load float, ptr %53, align 4, !tbaa !9
  %362 = fmul float %360, %361
  %363 = call float @llvm.fmuladd.f32(float %358, float %359, float %362)
  store float %363, ptr %54, align 4, !tbaa !9
  %364 = load float, ptr %54, align 4, !tbaa !9
  %365 = fcmp une float %364, 0.000000e+00
  br i1 %365, label %366, label %378

366:                                              ; preds = %287
  %367 = load float, ptr %52, align 4, !tbaa !9
  %368 = load float, ptr %52, align 4, !tbaa !9
  %369 = load float, ptr %53, align 4, !tbaa !9
  %370 = load float, ptr %53, align 4, !tbaa !9
  %371 = fmul float %369, %370
  %372 = call float @llvm.fmuladd.f32(float %367, float %368, float %371)
  %373 = fdiv float 1.000000e+00, %372
  %374 = load ptr, ptr %36, align 8, !tbaa !5
  %375 = load i32, ptr %34, align 4, !tbaa !11
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds float, ptr %374, i64 %376
  store float %373, ptr %377, align 4, !tbaa !9
  br label %383

378:                                              ; preds = %287
  %379 = load ptr, ptr %36, align 8, !tbaa !5
  %380 = load i32, ptr %34, align 4, !tbaa !11
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds float, ptr %379, i64 %381
  store float 0.000000e+00, ptr %382, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %378, %366
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %389

384:                                              ; preds = %278
  %385 = load ptr, ptr %36, align 8, !tbaa !5
  %386 = load i32, ptr %34, align 4, !tbaa !11
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds float, ptr %385, i64 %387
  store float 0.000000e+00, ptr %388, align 4, !tbaa !9
  br label %389

389:                                              ; preds = %384, %383
  br label %390

390:                                              ; preds = %389, %272
  br label %391

391:                                              ; preds = %390
  %392 = load i32, ptr %34, align 4, !tbaa !11
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %34, align 4, !tbaa !11
  store i32 %392, ptr %35, align 4, !tbaa !11
  br label %197, !llvm.loop !22

394:                                              ; preds = %197
  %395 = load i32, ptr %25, align 4, !tbaa !11
  store i32 %395, ptr %33, align 4, !tbaa !11
  br label %396

396:                                              ; preds = %1151, %394
  %397 = load i32, ptr %33, align 4, !tbaa !11
  %398 = load i32, ptr %27, align 4, !tbaa !11
  %399 = icmp slt i32 %397, %398
  br i1 %399, label %400, label %1154

400:                                              ; preds = %396
  %401 = load i32, ptr %24, align 4, !tbaa !11
  store i32 %401, ptr %32, align 4, !tbaa !11
  br label %402

402:                                              ; preds = %1147, %400
  %403 = load i32, ptr %32, align 4, !tbaa !11
  %404 = load i32, ptr %26, align 4, !tbaa !11
  %405 = icmp slt i32 %403, %404
  br i1 %405, label %406, label %1150

406:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  store float 9.999990e+05, ptr %56, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  %407 = load i32, ptr %32, align 4, !tbaa !11
  %408 = sitofp i32 %407 to float
  %409 = fadd float %408, 5.000000e-01
  store float %409, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %410 = load i32, ptr %33, align 4, !tbaa !11
  %411 = sitofp i32 %410 to float
  %412 = fadd float %411, 5.000000e-01
  store float %412, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #8
  %413 = load float, ptr %57, align 4, !tbaa !9
  %414 = load float, ptr %22, align 4, !tbaa !9
  %415 = fdiv float %413, %414
  store float %415, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #8
  %416 = load float, ptr %58, align 4, !tbaa !9
  %417 = load float, ptr %23, align 4, !tbaa !9
  %418 = fdiv float %416, %417
  store float %418, ptr %60, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  %419 = load float, ptr %59, align 4, !tbaa !9
  %420 = load float, ptr %60, align 4, !tbaa !9
  %421 = load i32, ptr %38, align 4, !tbaa !11
  %422 = load ptr, ptr %37, align 8, !tbaa !5
  %423 = call noundef i32 @_ZL26stbtt__compute_crossings_xffiP12stbtt_vertex(float noundef %419, float noundef %420, i32 noundef %421, ptr noundef %422)
  store i32 %423, ptr %61, align 4, !tbaa !11
  store i32 0, ptr %34, align 4, !tbaa !11
  br label %424

424:                                              ; preds = %1108, %406
  %425 = load i32, ptr %34, align 4, !tbaa !11
  %426 = load i32, ptr %38, align 4, !tbaa !11
  %427 = icmp slt i32 %425, %426
  br i1 %427, label %428, label %1111

428:                                              ; preds = %424
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  %429 = load ptr, ptr %37, align 8, !tbaa !5
  %430 = load i32, ptr %34, align 4, !tbaa !11
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds %struct.stbtt_vertex, ptr %429, i64 %431
  %433 = getelementptr inbounds %struct.stbtt_vertex, ptr %432, i32 0, i32 0
  %434 = load i16, ptr %433, align 2, !tbaa !18
  %435 = sext i16 %434 to i32
  %436 = sitofp i32 %435 to float
  %437 = load float, ptr %22, align 4, !tbaa !9
  %438 = fmul float %436, %437
  store float %438, ptr %62, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %439 = load ptr, ptr %37, align 8, !tbaa !5
  %440 = load i32, ptr %34, align 4, !tbaa !11
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds %struct.stbtt_vertex, ptr %439, i64 %441
  %443 = getelementptr inbounds %struct.stbtt_vertex, ptr %442, i32 0, i32 1
  %444 = load i16, ptr %443, align 2, !tbaa !19
  %445 = sext i16 %444 to i32
  %446 = sitofp i32 %445 to float
  %447 = load float, ptr %23, align 4, !tbaa !9
  %448 = fmul float %446, %447
  store float %448, ptr %63, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  %449 = load float, ptr %62, align 4, !tbaa !9
  %450 = load float, ptr %57, align 4, !tbaa !9
  %451 = fsub float %449, %450
  %452 = load float, ptr %62, align 4, !tbaa !9
  %453 = load float, ptr %57, align 4, !tbaa !9
  %454 = fsub float %452, %453
  %455 = load float, ptr %63, align 4, !tbaa !9
  %456 = load float, ptr %58, align 4, !tbaa !9
  %457 = fsub float %455, %456
  %458 = load float, ptr %63, align 4, !tbaa !9
  %459 = load float, ptr %58, align 4, !tbaa !9
  %460 = fsub float %458, %459
  %461 = fmul float %457, %460
  %462 = call float @llvm.fmuladd.f32(float %451, float %454, float %461)
  store float %462, ptr %64, align 4, !tbaa !9
  %463 = load float, ptr %64, align 4, !tbaa !9
  %464 = load float, ptr %56, align 4, !tbaa !9
  %465 = load float, ptr %56, align 4, !tbaa !9
  %466 = fmul float %464, %465
  %467 = fcmp olt float %463, %466
  br i1 %467, label %468, label %471

468:                                              ; preds = %428
  %469 = load float, ptr %64, align 4, !tbaa !9
  %470 = call noundef float @_ZSt4sqrtf(float noundef %469)
  store float %470, ptr %56, align 4, !tbaa !9
  br label %471

471:                                              ; preds = %468, %428
  %472 = load ptr, ptr %37, align 8, !tbaa !5
  %473 = load i32, ptr %34, align 4, !tbaa !11
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds %struct.stbtt_vertex, ptr %472, i64 %474
  %476 = getelementptr inbounds %struct.stbtt_vertex, ptr %475, i32 0, i32 6
  %477 = load i8, ptr %476, align 2, !tbaa !15
  %478 = zext i8 %477 to i32
  %479 = icmp eq i32 %478, 2
  br i1 %479, label %480, label %570

480:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  %481 = load ptr, ptr %37, align 8, !tbaa !5
  %482 = load i32, ptr %34, align 4, !tbaa !11
  %483 = sub nsw i32 %482, 1
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds %struct.stbtt_vertex, ptr %481, i64 %484
  %486 = getelementptr inbounds %struct.stbtt_vertex, ptr %485, i32 0, i32 0
  %487 = load i16, ptr %486, align 2, !tbaa !18
  %488 = sext i16 %487 to i32
  %489 = sitofp i32 %488 to float
  %490 = load float, ptr %22, align 4, !tbaa !9
  %491 = fmul float %489, %490
  store float %491, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  %492 = load ptr, ptr %37, align 8, !tbaa !5
  %493 = load i32, ptr %34, align 4, !tbaa !11
  %494 = sub nsw i32 %493, 1
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds %struct.stbtt_vertex, ptr %492, i64 %495
  %497 = getelementptr inbounds %struct.stbtt_vertex, ptr %496, i32 0, i32 1
  %498 = load i16, ptr %497, align 2, !tbaa !19
  %499 = sext i16 %498 to i32
  %500 = sitofp i32 %499 to float
  %501 = load float, ptr %23, align 4, !tbaa !9
  %502 = fmul float %500, %501
  store float %502, ptr %66, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %503 = load float, ptr %65, align 4, !tbaa !9
  %504 = load float, ptr %62, align 4, !tbaa !9
  %505 = fsub float %503, %504
  %506 = load float, ptr %63, align 4, !tbaa !9
  %507 = load float, ptr %58, align 4, !tbaa !9
  %508 = fsub float %506, %507
  %509 = load float, ptr %66, align 4, !tbaa !9
  %510 = load float, ptr %63, align 4, !tbaa !9
  %511 = fsub float %509, %510
  %512 = load float, ptr %62, align 4, !tbaa !9
  %513 = load float, ptr %57, align 4, !tbaa !9
  %514 = fsub float %512, %513
  %515 = fmul float %511, %514
  %516 = fneg float %515
  %517 = call float @llvm.fmuladd.f32(float %505, float %508, float %516)
  %518 = call noundef float @_ZSt4fabsf(float noundef %517)
  %519 = load ptr, ptr %36, align 8, !tbaa !5
  %520 = load i32, ptr %34, align 4, !tbaa !11
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds float, ptr %519, i64 %521
  %523 = load float, ptr %522, align 4, !tbaa !9
  %524 = fmul float %518, %523
  store float %524, ptr %67, align 4, !tbaa !9
  %525 = load i32, ptr %34, align 4, !tbaa !11
  %526 = icmp ne i32 %525, 0
  br i1 %526, label %527, label %528

527:                                              ; preds = %480
  br label %530

528:                                              ; preds = %480
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.10, i32 noundef 4636, ptr noundef @__PRETTY_FUNCTION__.stbtt_GetGlyphSDF) #9
  unreachable

529:                                              ; No predecessors!
  br label %530

530:                                              ; preds = %529, %527
  %531 = load float, ptr %67, align 4, !tbaa !9
  %532 = load float, ptr %56, align 4, !tbaa !9
  %533 = fcmp olt float %531, %532
  br i1 %533, label %534, label %569

534:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %535 = load float, ptr %65, align 4, !tbaa !9
  %536 = load float, ptr %62, align 4, !tbaa !9
  %537 = fsub float %535, %536
  store float %537, ptr %68, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  %538 = load float, ptr %66, align 4, !tbaa !9
  %539 = load float, ptr %63, align 4, !tbaa !9
  %540 = fsub float %538, %539
  store float %540, ptr %69, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  %541 = load float, ptr %62, align 4, !tbaa !9
  %542 = load float, ptr %57, align 4, !tbaa !9
  %543 = fsub float %541, %542
  store float %543, ptr %70, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #8
  %544 = load float, ptr %63, align 4, !tbaa !9
  %545 = load float, ptr %58, align 4, !tbaa !9
  %546 = fsub float %544, %545
  store float %546, ptr %71, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #8
  %547 = load float, ptr %70, align 4, !tbaa !9
  %548 = load float, ptr %68, align 4, !tbaa !9
  %549 = load float, ptr %71, align 4, !tbaa !9
  %550 = load float, ptr %69, align 4, !tbaa !9
  %551 = fmul float %549, %550
  %552 = call float @llvm.fmuladd.f32(float %547, float %548, float %551)
  %553 = fneg float %552
  %554 = load float, ptr %68, align 4, !tbaa !9
  %555 = load float, ptr %68, align 4, !tbaa !9
  %556 = load float, ptr %69, align 4, !tbaa !9
  %557 = load float, ptr %69, align 4, !tbaa !9
  %558 = fmul float %556, %557
  %559 = call float @llvm.fmuladd.f32(float %554, float %555, float %558)
  %560 = fdiv float %553, %559
  store float %560, ptr %72, align 4, !tbaa !9
  %561 = load float, ptr %72, align 4, !tbaa !9
  %562 = fcmp oge float %561, 0.000000e+00
  br i1 %562, label %563, label %568

563:                                              ; preds = %534
  %564 = load float, ptr %72, align 4, !tbaa !9
  %565 = fcmp ole float %564, 1.000000e+00
  br i1 %565, label %566, label %568

566:                                              ; preds = %563
  %567 = load float, ptr %67, align 4, !tbaa !9
  store float %567, ptr %56, align 4, !tbaa !9
  br label %568

568:                                              ; preds = %566, %563, %534
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %569

569:                                              ; preds = %568, %530
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  br label %1107

570:                                              ; preds = %471
  %571 = load ptr, ptr %37, align 8, !tbaa !5
  %572 = load i32, ptr %34, align 4, !tbaa !11
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds %struct.stbtt_vertex, ptr %571, i64 %573
  %575 = getelementptr inbounds %struct.stbtt_vertex, ptr %574, i32 0, i32 6
  %576 = load i8, ptr %575, align 2, !tbaa !15
  %577 = zext i8 %576 to i32
  %578 = icmp eq i32 %577, 3
  br i1 %578, label %579, label %1106

579:                                              ; preds = %570
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #8
  %580 = load ptr, ptr %37, align 8, !tbaa !5
  %581 = load i32, ptr %34, align 4, !tbaa !11
  %582 = sub nsw i32 %581, 1
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds %struct.stbtt_vertex, ptr %580, i64 %583
  %585 = getelementptr inbounds %struct.stbtt_vertex, ptr %584, i32 0, i32 0
  %586 = load i16, ptr %585, align 2, !tbaa !18
  %587 = sext i16 %586 to i32
  %588 = sitofp i32 %587 to float
  %589 = load float, ptr %22, align 4, !tbaa !9
  %590 = fmul float %588, %589
  store float %590, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #8
  %591 = load ptr, ptr %37, align 8, !tbaa !5
  %592 = load i32, ptr %34, align 4, !tbaa !11
  %593 = sub nsw i32 %592, 1
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds %struct.stbtt_vertex, ptr %591, i64 %594
  %596 = getelementptr inbounds %struct.stbtt_vertex, ptr %595, i32 0, i32 1
  %597 = load i16, ptr %596, align 2, !tbaa !19
  %598 = sext i16 %597 to i32
  %599 = sitofp i32 %598 to float
  %600 = load float, ptr %23, align 4, !tbaa !9
  %601 = fmul float %599, %600
  store float %601, ptr %74, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  %602 = load ptr, ptr %37, align 8, !tbaa !5
  %603 = load i32, ptr %34, align 4, !tbaa !11
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds %struct.stbtt_vertex, ptr %602, i64 %604
  %606 = getelementptr inbounds %struct.stbtt_vertex, ptr %605, i32 0, i32 2
  %607 = load i16, ptr %606, align 2, !tbaa !20
  %608 = sext i16 %607 to i32
  %609 = sitofp i32 %608 to float
  %610 = load float, ptr %22, align 4, !tbaa !9
  %611 = fmul float %609, %610
  store float %611, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %612 = load ptr, ptr %37, align 8, !tbaa !5
  %613 = load i32, ptr %34, align 4, !tbaa !11
  %614 = sext i32 %613 to i64
  %615 = getelementptr inbounds %struct.stbtt_vertex, ptr %612, i64 %614
  %616 = getelementptr inbounds %struct.stbtt_vertex, ptr %615, i32 0, i32 3
  %617 = load i16, ptr %616, align 2, !tbaa !21
  %618 = sext i16 %617 to i32
  %619 = sitofp i32 %618 to float
  %620 = load float, ptr %23, align 4, !tbaa !9
  %621 = fmul float %619, %620
  store float %621, ptr %76, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  %622 = load float, ptr %62, align 4, !tbaa !9
  %623 = load float, ptr %75, align 4, !tbaa !9
  %624 = fcmp olt float %622, %623
  br i1 %624, label %625, label %627

625:                                              ; preds = %579
  %626 = load float, ptr %62, align 4, !tbaa !9
  br label %629

627:                                              ; preds = %579
  %628 = load float, ptr %75, align 4, !tbaa !9
  br label %629

629:                                              ; preds = %627, %625
  %630 = phi float [ %626, %625 ], [ %628, %627 ]
  %631 = load float, ptr %73, align 4, !tbaa !9
  %632 = fcmp olt float %630, %631
  br i1 %632, label %633, label %643

633:                                              ; preds = %629
  %634 = load float, ptr %62, align 4, !tbaa !9
  %635 = load float, ptr %75, align 4, !tbaa !9
  %636 = fcmp olt float %634, %635
  br i1 %636, label %637, label %639

637:                                              ; preds = %633
  %638 = load float, ptr %62, align 4, !tbaa !9
  br label %641

639:                                              ; preds = %633
  %640 = load float, ptr %75, align 4, !tbaa !9
  br label %641

641:                                              ; preds = %639, %637
  %642 = phi float [ %638, %637 ], [ %640, %639 ]
  br label %645

643:                                              ; preds = %629
  %644 = load float, ptr %73, align 4, !tbaa !9
  br label %645

645:                                              ; preds = %643, %641
  %646 = phi float [ %642, %641 ], [ %644, %643 ]
  store float %646, ptr %77, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #8
  %647 = load float, ptr %63, align 4, !tbaa !9
  %648 = load float, ptr %76, align 4, !tbaa !9
  %649 = fcmp olt float %647, %648
  br i1 %649, label %650, label %652

650:                                              ; preds = %645
  %651 = load float, ptr %63, align 4, !tbaa !9
  br label %654

652:                                              ; preds = %645
  %653 = load float, ptr %76, align 4, !tbaa !9
  br label %654

654:                                              ; preds = %652, %650
  %655 = phi float [ %651, %650 ], [ %653, %652 ]
  %656 = load float, ptr %74, align 4, !tbaa !9
  %657 = fcmp olt float %655, %656
  br i1 %657, label %658, label %668

658:                                              ; preds = %654
  %659 = load float, ptr %63, align 4, !tbaa !9
  %660 = load float, ptr %76, align 4, !tbaa !9
  %661 = fcmp olt float %659, %660
  br i1 %661, label %662, label %664

662:                                              ; preds = %658
  %663 = load float, ptr %63, align 4, !tbaa !9
  br label %666

664:                                              ; preds = %658
  %665 = load float, ptr %76, align 4, !tbaa !9
  br label %666

666:                                              ; preds = %664, %662
  %667 = phi float [ %663, %662 ], [ %665, %664 ]
  br label %670

668:                                              ; preds = %654
  %669 = load float, ptr %74, align 4, !tbaa !9
  br label %670

670:                                              ; preds = %668, %666
  %671 = phi float [ %667, %666 ], [ %669, %668 ]
  store float %671, ptr %78, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  %672 = load float, ptr %62, align 4, !tbaa !9
  %673 = load float, ptr %75, align 4, !tbaa !9
  %674 = fcmp olt float %672, %673
  br i1 %674, label %675, label %677

675:                                              ; preds = %670
  %676 = load float, ptr %75, align 4, !tbaa !9
  br label %679

677:                                              ; preds = %670
  %678 = load float, ptr %62, align 4, !tbaa !9
  br label %679

679:                                              ; preds = %677, %675
  %680 = phi float [ %676, %675 ], [ %678, %677 ]
  %681 = load float, ptr %73, align 4, !tbaa !9
  %682 = fcmp olt float %680, %681
  br i1 %682, label %683, label %685

683:                                              ; preds = %679
  %684 = load float, ptr %73, align 4, !tbaa !9
  br label %695

685:                                              ; preds = %679
  %686 = load float, ptr %62, align 4, !tbaa !9
  %687 = load float, ptr %75, align 4, !tbaa !9
  %688 = fcmp olt float %686, %687
  br i1 %688, label %689, label %691

689:                                              ; preds = %685
  %690 = load float, ptr %75, align 4, !tbaa !9
  br label %693

691:                                              ; preds = %685
  %692 = load float, ptr %62, align 4, !tbaa !9
  br label %693

693:                                              ; preds = %691, %689
  %694 = phi float [ %690, %689 ], [ %692, %691 ]
  br label %695

695:                                              ; preds = %693, %683
  %696 = phi float [ %684, %683 ], [ %694, %693 ]
  store float %696, ptr %79, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #8
  %697 = load float, ptr %63, align 4, !tbaa !9
  %698 = load float, ptr %76, align 4, !tbaa !9
  %699 = fcmp olt float %697, %698
  br i1 %699, label %700, label %702

700:                                              ; preds = %695
  %701 = load float, ptr %76, align 4, !tbaa !9
  br label %704

702:                                              ; preds = %695
  %703 = load float, ptr %63, align 4, !tbaa !9
  br label %704

704:                                              ; preds = %702, %700
  %705 = phi float [ %701, %700 ], [ %703, %702 ]
  %706 = load float, ptr %74, align 4, !tbaa !9
  %707 = fcmp olt float %705, %706
  br i1 %707, label %708, label %710

708:                                              ; preds = %704
  %709 = load float, ptr %74, align 4, !tbaa !9
  br label %720

710:                                              ; preds = %704
  %711 = load float, ptr %63, align 4, !tbaa !9
  %712 = load float, ptr %76, align 4, !tbaa !9
  %713 = fcmp olt float %711, %712
  br i1 %713, label %714, label %716

714:                                              ; preds = %710
  %715 = load float, ptr %76, align 4, !tbaa !9
  br label %718

716:                                              ; preds = %710
  %717 = load float, ptr %63, align 4, !tbaa !9
  br label %718

718:                                              ; preds = %716, %714
  %719 = phi float [ %715, %714 ], [ %717, %716 ]
  br label %720

720:                                              ; preds = %718, %708
  %721 = phi float [ %709, %708 ], [ %719, %718 ]
  store float %721, ptr %80, align 4, !tbaa !9
  %722 = load float, ptr %57, align 4, !tbaa !9
  %723 = load float, ptr %77, align 4, !tbaa !9
  %724 = load float, ptr %56, align 4, !tbaa !9
  %725 = fsub float %723, %724
  %726 = fcmp ogt float %722, %725
  br i1 %726, label %727, label %1105

727:                                              ; preds = %720
  %728 = load float, ptr %57, align 4, !tbaa !9
  %729 = load float, ptr %79, align 4, !tbaa !9
  %730 = load float, ptr %56, align 4, !tbaa !9
  %731 = fadd float %729, %730
  %732 = fcmp olt float %728, %731
  br i1 %732, label %733, label %1105

733:                                              ; preds = %727
  %734 = load float, ptr %58, align 4, !tbaa !9
  %735 = load float, ptr %78, align 4, !tbaa !9
  %736 = load float, ptr %56, align 4, !tbaa !9
  %737 = fsub float %735, %736
  %738 = fcmp ogt float %734, %737
  br i1 %738, label %739, label %1105

739:                                              ; preds = %733
  %740 = load float, ptr %58, align 4, !tbaa !9
  %741 = load float, ptr %80, align 4, !tbaa !9
  %742 = load float, ptr %56, align 4, !tbaa !9
  %743 = fadd float %741, %742
  %744 = fcmp olt float %740, %743
  br i1 %744, label %745, label %1105

745:                                              ; preds = %739
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #8
  store i32 0, ptr %81, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  %746 = load float, ptr %75, align 4, !tbaa !9
  %747 = load float, ptr %62, align 4, !tbaa !9
  %748 = fsub float %746, %747
  store float %748, ptr %82, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  %749 = load float, ptr %76, align 4, !tbaa !9
  %750 = load float, ptr %63, align 4, !tbaa !9
  %751 = fsub float %749, %750
  store float %751, ptr %83, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  %752 = load float, ptr %62, align 4, !tbaa !9
  %753 = load float, ptr %75, align 4, !tbaa !9
  %754 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %753, float %752)
  %755 = load float, ptr %73, align 4, !tbaa !9
  %756 = fadd float %754, %755
  store float %756, ptr %84, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  %757 = load float, ptr %63, align 4, !tbaa !9
  %758 = load float, ptr %76, align 4, !tbaa !9
  %759 = call float @llvm.fmuladd.f32(float -2.000000e+00, float %758, float %757)
  %760 = load float, ptr %74, align 4, !tbaa !9
  %761 = fadd float %759, %760
  store float %761, ptr %85, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #8
  %762 = load float, ptr %62, align 4, !tbaa !9
  %763 = load float, ptr %57, align 4, !tbaa !9
  %764 = fsub float %762, %763
  store float %764, ptr %86, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #8
  %765 = load float, ptr %63, align 4, !tbaa !9
  %766 = load float, ptr %58, align 4, !tbaa !9
  %767 = fsub float %765, %766
  store float %767, ptr %87, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %88) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #8
  %768 = load ptr, ptr %36, align 8, !tbaa !5
  %769 = load i32, ptr %34, align 4, !tbaa !11
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds float, ptr %768, i64 %770
  %772 = load float, ptr %771, align 4, !tbaa !9
  store float %772, ptr %93, align 4, !tbaa !9
  %773 = load float, ptr %93, align 4, !tbaa !9
  %774 = fpext float %773 to double
  %775 = fcmp oeq double %774, 0.000000e+00
  br i1 %775, label %776, label %853

776:                                              ; preds = %745
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #8
  %777 = load float, ptr %82, align 4, !tbaa !9
  %778 = load float, ptr %84, align 4, !tbaa !9
  %779 = load float, ptr %83, align 4, !tbaa !9
  %780 = load float, ptr %85, align 4, !tbaa !9
  %781 = fmul float %779, %780
  %782 = call float @llvm.fmuladd.f32(float %777, float %778, float %781)
  %783 = fmul float 3.000000e+00, %782
  store float %783, ptr %94, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #8
  %784 = load float, ptr %82, align 4, !tbaa !9
  %785 = load float, ptr %82, align 4, !tbaa !9
  %786 = load float, ptr %83, align 4, !tbaa !9
  %787 = load float, ptr %83, align 4, !tbaa !9
  %788 = fmul float %786, %787
  %789 = call float @llvm.fmuladd.f32(float %784, float %785, float %788)
  %790 = load float, ptr %86, align 4, !tbaa !9
  %791 = load float, ptr %84, align 4, !tbaa !9
  %792 = load float, ptr %87, align 4, !tbaa !9
  %793 = load float, ptr %85, align 4, !tbaa !9
  %794 = fmul float %792, %793
  %795 = call float @llvm.fmuladd.f32(float %790, float %791, float %794)
  %796 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %789, float %795)
  store float %796, ptr %95, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #8
  %797 = load float, ptr %86, align 4, !tbaa !9
  %798 = load float, ptr %82, align 4, !tbaa !9
  %799 = load float, ptr %87, align 4, !tbaa !9
  %800 = load float, ptr %83, align 4, !tbaa !9
  %801 = fmul float %799, %800
  %802 = call float @llvm.fmuladd.f32(float %797, float %798, float %801)
  store float %802, ptr %96, align 4, !tbaa !9
  %803 = load float, ptr %94, align 4, !tbaa !9
  %804 = fpext float %803 to double
  %805 = fcmp oeq double %804, 0.000000e+00
  br i1 %805, label %806, label %820

806:                                              ; preds = %776
  %807 = load float, ptr %95, align 4, !tbaa !9
  %808 = fpext float %807 to double
  %809 = fcmp une double %808, 0.000000e+00
  br i1 %809, label %810, label %819

810:                                              ; preds = %806
  %811 = load float, ptr %96, align 4, !tbaa !9
  %812 = fneg float %811
  %813 = load float, ptr %95, align 4, !tbaa !9
  %814 = fdiv float %812, %813
  %815 = load i32, ptr %81, align 4, !tbaa !11
  %816 = add nsw i32 %815, 1
  store i32 %816, ptr %81, align 4, !tbaa !11
  %817 = sext i32 %815 to i64
  %818 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 %817
  store float %814, ptr %818, align 4, !tbaa !9
  br label %819

819:                                              ; preds = %810, %806
  br label %852

820:                                              ; preds = %776
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #8
  %821 = load float, ptr %95, align 4, !tbaa !9
  %822 = load float, ptr %95, align 4, !tbaa !9
  %823 = load float, ptr %94, align 4, !tbaa !9
  %824 = fmul float 4.000000e+00, %823
  %825 = load float, ptr %96, align 4, !tbaa !9
  %826 = fmul float %824, %825
  %827 = fneg float %826
  %828 = call float @llvm.fmuladd.f32(float %821, float %822, float %827)
  store float %828, ptr %97, align 4, !tbaa !9
  %829 = load float, ptr %97, align 4, !tbaa !9
  %830 = fcmp olt float %829, 0.000000e+00
  br i1 %830, label %831, label %832

831:                                              ; preds = %820
  store i32 0, ptr %81, align 4, !tbaa !11
  br label %851

832:                                              ; preds = %820
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #8
  %833 = load float, ptr %97, align 4, !tbaa !9
  %834 = call noundef float @_ZSt4sqrtf(float noundef %833)
  store float %834, ptr %98, align 4, !tbaa !9
  %835 = load float, ptr %95, align 4, !tbaa !9
  %836 = fneg float %835
  %837 = load float, ptr %98, align 4, !tbaa !9
  %838 = fsub float %836, %837
  %839 = load float, ptr %94, align 4, !tbaa !9
  %840 = fmul float 2.000000e+00, %839
  %841 = fdiv float %838, %840
  %842 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 0
  store float %841, ptr %842, align 4, !tbaa !9
  %843 = load float, ptr %95, align 4, !tbaa !9
  %844 = fneg float %843
  %845 = load float, ptr %98, align 4, !tbaa !9
  %846 = fadd float %844, %845
  %847 = load float, ptr %94, align 4, !tbaa !9
  %848 = fmul float 2.000000e+00, %847
  %849 = fdiv float %846, %848
  %850 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 1
  store float %849, ptr %850, align 4, !tbaa !9
  store i32 2, ptr %81, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #8
  br label %851

851:                                              ; preds = %832, %831
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #8
  br label %852

852:                                              ; preds = %851, %819
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  br label %891

853:                                              ; preds = %745
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #8
  %854 = load float, ptr %82, align 4, !tbaa !9
  %855 = load float, ptr %84, align 4, !tbaa !9
  %856 = load float, ptr %83, align 4, !tbaa !9
  %857 = load float, ptr %85, align 4, !tbaa !9
  %858 = fmul float %856, %857
  %859 = call float @llvm.fmuladd.f32(float %854, float %855, float %858)
  %860 = fmul float 3.000000e+00, %859
  %861 = load float, ptr %93, align 4, !tbaa !9
  %862 = fmul float %860, %861
  store float %862, ptr %99, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #8
  %863 = load float, ptr %82, align 4, !tbaa !9
  %864 = load float, ptr %82, align 4, !tbaa !9
  %865 = load float, ptr %83, align 4, !tbaa !9
  %866 = load float, ptr %83, align 4, !tbaa !9
  %867 = fmul float %865, %866
  %868 = call float @llvm.fmuladd.f32(float %863, float %864, float %867)
  %869 = load float, ptr %86, align 4, !tbaa !9
  %870 = load float, ptr %84, align 4, !tbaa !9
  %871 = load float, ptr %87, align 4, !tbaa !9
  %872 = load float, ptr %85, align 4, !tbaa !9
  %873 = fmul float %871, %872
  %874 = call float @llvm.fmuladd.f32(float %869, float %870, float %873)
  %875 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %868, float %874)
  %876 = load float, ptr %93, align 4, !tbaa !9
  %877 = fmul float %875, %876
  store float %877, ptr %100, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #8
  %878 = load float, ptr %86, align 4, !tbaa !9
  %879 = load float, ptr %82, align 4, !tbaa !9
  %880 = load float, ptr %87, align 4, !tbaa !9
  %881 = load float, ptr %83, align 4, !tbaa !9
  %882 = fmul float %880, %881
  %883 = call float @llvm.fmuladd.f32(float %878, float %879, float %882)
  %884 = load float, ptr %93, align 4, !tbaa !9
  %885 = fmul float %883, %884
  store float %885, ptr %101, align 4, !tbaa !9
  %886 = load float, ptr %99, align 4, !tbaa !9
  %887 = load float, ptr %100, align 4, !tbaa !9
  %888 = load float, ptr %101, align 4, !tbaa !9
  %889 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 0
  %890 = call noundef i32 @_ZL18stbtt__solve_cubicfffPf(float noundef %886, float noundef %887, float noundef %888, ptr noundef %889)
  store i32 %890, ptr %81, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #8
  br label %891

891:                                              ; preds = %853, %852
  %892 = load i32, ptr %81, align 4, !tbaa !11
  %893 = icmp sge i32 %892, 1
  br i1 %893, label %894, label %962

894:                                              ; preds = %891
  %895 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 0
  %896 = load float, ptr %895, align 4, !tbaa !9
  %897 = fcmp oge float %896, 0.000000e+00
  br i1 %897, label %898, label %962

898:                                              ; preds = %894
  %899 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 0
  %900 = load float, ptr %899, align 4, !tbaa !9
  %901 = fcmp ole float %900, 1.000000e+00
  br i1 %901, label %902, label %962

902:                                              ; preds = %898
  %903 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 0
  %904 = load float, ptr %903, align 4, !tbaa !9
  store float %904, ptr %91, align 4, !tbaa !9
  %905 = load float, ptr %91, align 4, !tbaa !9
  %906 = fsub float 1.000000e+00, %905
  store float %906, ptr %92, align 4, !tbaa !9
  %907 = load float, ptr %92, align 4, !tbaa !9
  %908 = load float, ptr %92, align 4, !tbaa !9
  %909 = fmul float %907, %908
  %910 = load float, ptr %62, align 4, !tbaa !9
  %911 = load float, ptr %91, align 4, !tbaa !9
  %912 = fmul float 2.000000e+00, %911
  %913 = load float, ptr %92, align 4, !tbaa !9
  %914 = fmul float %912, %913
  %915 = load float, ptr %75, align 4, !tbaa !9
  %916 = fmul float %914, %915
  %917 = call float @llvm.fmuladd.f32(float %909, float %910, float %916)
  %918 = load float, ptr %91, align 4, !tbaa !9
  %919 = load float, ptr %91, align 4, !tbaa !9
  %920 = fmul float %918, %919
  %921 = load float, ptr %73, align 4, !tbaa !9
  %922 = call float @llvm.fmuladd.f32(float %920, float %921, float %917)
  store float %922, ptr %89, align 4, !tbaa !9
  %923 = load float, ptr %92, align 4, !tbaa !9
  %924 = load float, ptr %92, align 4, !tbaa !9
  %925 = fmul float %923, %924
  %926 = load float, ptr %63, align 4, !tbaa !9
  %927 = load float, ptr %91, align 4, !tbaa !9
  %928 = fmul float 2.000000e+00, %927
  %929 = load float, ptr %92, align 4, !tbaa !9
  %930 = fmul float %928, %929
  %931 = load float, ptr %76, align 4, !tbaa !9
  %932 = fmul float %930, %931
  %933 = call float @llvm.fmuladd.f32(float %925, float %926, float %932)
  %934 = load float, ptr %91, align 4, !tbaa !9
  %935 = load float, ptr %91, align 4, !tbaa !9
  %936 = fmul float %934, %935
  %937 = load float, ptr %74, align 4, !tbaa !9
  %938 = call float @llvm.fmuladd.f32(float %936, float %937, float %933)
  store float %938, ptr %90, align 4, !tbaa !9
  %939 = load float, ptr %89, align 4, !tbaa !9
  %940 = load float, ptr %57, align 4, !tbaa !9
  %941 = fsub float %939, %940
  %942 = load float, ptr %89, align 4, !tbaa !9
  %943 = load float, ptr %57, align 4, !tbaa !9
  %944 = fsub float %942, %943
  %945 = load float, ptr %90, align 4, !tbaa !9
  %946 = load float, ptr %58, align 4, !tbaa !9
  %947 = fsub float %945, %946
  %948 = load float, ptr %90, align 4, !tbaa !9
  %949 = load float, ptr %58, align 4, !tbaa !9
  %950 = fsub float %948, %949
  %951 = fmul float %947, %950
  %952 = call float @llvm.fmuladd.f32(float %941, float %944, float %951)
  store float %952, ptr %64, align 4, !tbaa !9
  %953 = load float, ptr %64, align 4, !tbaa !9
  %954 = load float, ptr %56, align 4, !tbaa !9
  %955 = load float, ptr %56, align 4, !tbaa !9
  %956 = fmul float %954, %955
  %957 = fcmp olt float %953, %956
  br i1 %957, label %958, label %961

958:                                              ; preds = %902
  %959 = load float, ptr %64, align 4, !tbaa !9
  %960 = call noundef float @_ZSt4sqrtf(float noundef %959)
  store float %960, ptr %56, align 4, !tbaa !9
  br label %961

961:                                              ; preds = %958, %902
  br label %962

962:                                              ; preds = %961, %898, %894, %891
  %963 = load i32, ptr %81, align 4, !tbaa !11
  %964 = icmp sge i32 %963, 2
  br i1 %964, label %965, label %1033

965:                                              ; preds = %962
  %966 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 1
  %967 = load float, ptr %966, align 4, !tbaa !9
  %968 = fcmp oge float %967, 0.000000e+00
  br i1 %968, label %969, label %1033

969:                                              ; preds = %965
  %970 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 1
  %971 = load float, ptr %970, align 4, !tbaa !9
  %972 = fcmp ole float %971, 1.000000e+00
  br i1 %972, label %973, label %1033

973:                                              ; preds = %969
  %974 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 1
  %975 = load float, ptr %974, align 4, !tbaa !9
  store float %975, ptr %91, align 4, !tbaa !9
  %976 = load float, ptr %91, align 4, !tbaa !9
  %977 = fsub float 1.000000e+00, %976
  store float %977, ptr %92, align 4, !tbaa !9
  %978 = load float, ptr %92, align 4, !tbaa !9
  %979 = load float, ptr %92, align 4, !tbaa !9
  %980 = fmul float %978, %979
  %981 = load float, ptr %62, align 4, !tbaa !9
  %982 = load float, ptr %91, align 4, !tbaa !9
  %983 = fmul float 2.000000e+00, %982
  %984 = load float, ptr %92, align 4, !tbaa !9
  %985 = fmul float %983, %984
  %986 = load float, ptr %75, align 4, !tbaa !9
  %987 = fmul float %985, %986
  %988 = call float @llvm.fmuladd.f32(float %980, float %981, float %987)
  %989 = load float, ptr %91, align 4, !tbaa !9
  %990 = load float, ptr %91, align 4, !tbaa !9
  %991 = fmul float %989, %990
  %992 = load float, ptr %73, align 4, !tbaa !9
  %993 = call float @llvm.fmuladd.f32(float %991, float %992, float %988)
  store float %993, ptr %89, align 4, !tbaa !9
  %994 = load float, ptr %92, align 4, !tbaa !9
  %995 = load float, ptr %92, align 4, !tbaa !9
  %996 = fmul float %994, %995
  %997 = load float, ptr %63, align 4, !tbaa !9
  %998 = load float, ptr %91, align 4, !tbaa !9
  %999 = fmul float 2.000000e+00, %998
  %1000 = load float, ptr %92, align 4, !tbaa !9
  %1001 = fmul float %999, %1000
  %1002 = load float, ptr %76, align 4, !tbaa !9
  %1003 = fmul float %1001, %1002
  %1004 = call float @llvm.fmuladd.f32(float %996, float %997, float %1003)
  %1005 = load float, ptr %91, align 4, !tbaa !9
  %1006 = load float, ptr %91, align 4, !tbaa !9
  %1007 = fmul float %1005, %1006
  %1008 = load float, ptr %74, align 4, !tbaa !9
  %1009 = call float @llvm.fmuladd.f32(float %1007, float %1008, float %1004)
  store float %1009, ptr %90, align 4, !tbaa !9
  %1010 = load float, ptr %89, align 4, !tbaa !9
  %1011 = load float, ptr %57, align 4, !tbaa !9
  %1012 = fsub float %1010, %1011
  %1013 = load float, ptr %89, align 4, !tbaa !9
  %1014 = load float, ptr %57, align 4, !tbaa !9
  %1015 = fsub float %1013, %1014
  %1016 = load float, ptr %90, align 4, !tbaa !9
  %1017 = load float, ptr %58, align 4, !tbaa !9
  %1018 = fsub float %1016, %1017
  %1019 = load float, ptr %90, align 4, !tbaa !9
  %1020 = load float, ptr %58, align 4, !tbaa !9
  %1021 = fsub float %1019, %1020
  %1022 = fmul float %1018, %1021
  %1023 = call float @llvm.fmuladd.f32(float %1012, float %1015, float %1022)
  store float %1023, ptr %64, align 4, !tbaa !9
  %1024 = load float, ptr %64, align 4, !tbaa !9
  %1025 = load float, ptr %56, align 4, !tbaa !9
  %1026 = load float, ptr %56, align 4, !tbaa !9
  %1027 = fmul float %1025, %1026
  %1028 = fcmp olt float %1024, %1027
  br i1 %1028, label %1029, label %1032

1029:                                             ; preds = %973
  %1030 = load float, ptr %64, align 4, !tbaa !9
  %1031 = call noundef float @_ZSt4sqrtf(float noundef %1030)
  store float %1031, ptr %56, align 4, !tbaa !9
  br label %1032

1032:                                             ; preds = %1029, %973
  br label %1033

1033:                                             ; preds = %1032, %969, %965, %962
  %1034 = load i32, ptr %81, align 4, !tbaa !11
  %1035 = icmp sge i32 %1034, 3
  br i1 %1035, label %1036, label %1104

1036:                                             ; preds = %1033
  %1037 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 2
  %1038 = load float, ptr %1037, align 4, !tbaa !9
  %1039 = fcmp oge float %1038, 0.000000e+00
  br i1 %1039, label %1040, label %1104

1040:                                             ; preds = %1036
  %1041 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 2
  %1042 = load float, ptr %1041, align 4, !tbaa !9
  %1043 = fcmp ole float %1042, 1.000000e+00
  br i1 %1043, label %1044, label %1104

1044:                                             ; preds = %1040
  %1045 = getelementptr inbounds [3 x float], ptr %88, i64 0, i64 2
  %1046 = load float, ptr %1045, align 4, !tbaa !9
  store float %1046, ptr %91, align 4, !tbaa !9
  %1047 = load float, ptr %91, align 4, !tbaa !9
  %1048 = fsub float 1.000000e+00, %1047
  store float %1048, ptr %92, align 4, !tbaa !9
  %1049 = load float, ptr %92, align 4, !tbaa !9
  %1050 = load float, ptr %92, align 4, !tbaa !9
  %1051 = fmul float %1049, %1050
  %1052 = load float, ptr %62, align 4, !tbaa !9
  %1053 = load float, ptr %91, align 4, !tbaa !9
  %1054 = fmul float 2.000000e+00, %1053
  %1055 = load float, ptr %92, align 4, !tbaa !9
  %1056 = fmul float %1054, %1055
  %1057 = load float, ptr %75, align 4, !tbaa !9
  %1058 = fmul float %1056, %1057
  %1059 = call float @llvm.fmuladd.f32(float %1051, float %1052, float %1058)
  %1060 = load float, ptr %91, align 4, !tbaa !9
  %1061 = load float, ptr %91, align 4, !tbaa !9
  %1062 = fmul float %1060, %1061
  %1063 = load float, ptr %73, align 4, !tbaa !9
  %1064 = call float @llvm.fmuladd.f32(float %1062, float %1063, float %1059)
  store float %1064, ptr %89, align 4, !tbaa !9
  %1065 = load float, ptr %92, align 4, !tbaa !9
  %1066 = load float, ptr %92, align 4, !tbaa !9
  %1067 = fmul float %1065, %1066
  %1068 = load float, ptr %63, align 4, !tbaa !9
  %1069 = load float, ptr %91, align 4, !tbaa !9
  %1070 = fmul float 2.000000e+00, %1069
  %1071 = load float, ptr %92, align 4, !tbaa !9
  %1072 = fmul float %1070, %1071
  %1073 = load float, ptr %76, align 4, !tbaa !9
  %1074 = fmul float %1072, %1073
  %1075 = call float @llvm.fmuladd.f32(float %1067, float %1068, float %1074)
  %1076 = load float, ptr %91, align 4, !tbaa !9
  %1077 = load float, ptr %91, align 4, !tbaa !9
  %1078 = fmul float %1076, %1077
  %1079 = load float, ptr %74, align 4, !tbaa !9
  %1080 = call float @llvm.fmuladd.f32(float %1078, float %1079, float %1075)
  store float %1080, ptr %90, align 4, !tbaa !9
  %1081 = load float, ptr %89, align 4, !tbaa !9
  %1082 = load float, ptr %57, align 4, !tbaa !9
  %1083 = fsub float %1081, %1082
  %1084 = load float, ptr %89, align 4, !tbaa !9
  %1085 = load float, ptr %57, align 4, !tbaa !9
  %1086 = fsub float %1084, %1085
  %1087 = load float, ptr %90, align 4, !tbaa !9
  %1088 = load float, ptr %58, align 4, !tbaa !9
  %1089 = fsub float %1087, %1088
  %1090 = load float, ptr %90, align 4, !tbaa !9
  %1091 = load float, ptr %58, align 4, !tbaa !9
  %1092 = fsub float %1090, %1091
  %1093 = fmul float %1089, %1092
  %1094 = call float @llvm.fmuladd.f32(float %1083, float %1086, float %1093)
  store float %1094, ptr %64, align 4, !tbaa !9
  %1095 = load float, ptr %64, align 4, !tbaa !9
  %1096 = load float, ptr %56, align 4, !tbaa !9
  %1097 = load float, ptr %56, align 4, !tbaa !9
  %1098 = fmul float %1096, %1097
  %1099 = fcmp olt float %1095, %1098
  br i1 %1099, label %1100, label %1103

1100:                                             ; preds = %1044
  %1101 = load float, ptr %64, align 4, !tbaa !9
  %1102 = call noundef float @_ZSt4sqrtf(float noundef %1101)
  store float %1102, ptr %56, align 4, !tbaa !9
  br label %1103

1103:                                             ; preds = %1100, %1044
  br label %1104

1104:                                             ; preds = %1103, %1040, %1036, %1033
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #8
  br label %1105

1105:                                             ; preds = %1104, %739, %733, %727, %720
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  br label %1106

1106:                                             ; preds = %1105, %570
  br label %1107

1107:                                             ; preds = %1106, %569
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  br label %1108

1108:                                             ; preds = %1107
  %1109 = load i32, ptr %34, align 4, !tbaa !11
  %1110 = add nsw i32 %1109, 1
  store i32 %1110, ptr %34, align 4, !tbaa !11
  br label %424, !llvm.loop !24

1111:                                             ; preds = %424
  %1112 = load i32, ptr %61, align 4, !tbaa !11
  %1113 = icmp eq i32 %1112, 0
  br i1 %1113, label %1114, label %1117

1114:                                             ; preds = %1111
  %1115 = load float, ptr %56, align 4, !tbaa !9
  %1116 = fneg float %1115
  store float %1116, ptr %56, align 4, !tbaa !9
  br label %1117

1117:                                             ; preds = %1114, %1111
  %1118 = load i8, ptr %16, align 1, !tbaa !13
  %1119 = zext i8 %1118 to i32
  %1120 = sitofp i32 %1119 to float
  %1121 = load float, ptr %17, align 4, !tbaa !9
  %1122 = load float, ptr %56, align 4, !tbaa !9
  %1123 = call float @llvm.fmuladd.f32(float %1121, float %1122, float %1120)
  store float %1123, ptr %55, align 4, !tbaa !9
  %1124 = load float, ptr %55, align 4, !tbaa !9
  %1125 = fcmp olt float %1124, 0.000000e+00
  br i1 %1125, label %1126, label %1127

1126:                                             ; preds = %1117
  store float 0.000000e+00, ptr %55, align 4, !tbaa !9
  br label %1132

1127:                                             ; preds = %1117
  %1128 = load float, ptr %55, align 4, !tbaa !9
  %1129 = fcmp ogt float %1128, 2.550000e+02
  br i1 %1129, label %1130, label %1131

1130:                                             ; preds = %1127
  store float 2.550000e+02, ptr %55, align 4, !tbaa !9
  br label %1131

1131:                                             ; preds = %1130, %1127
  br label %1132

1132:                                             ; preds = %1131, %1126
  %1133 = load float, ptr %55, align 4, !tbaa !9
  %1134 = fptoui float %1133 to i8
  %1135 = load ptr, ptr %30, align 8, !tbaa !5
  %1136 = load i32, ptr %33, align 4, !tbaa !11
  %1137 = load i32, ptr %25, align 4, !tbaa !11
  %1138 = sub nsw i32 %1136, %1137
  %1139 = load i32, ptr %28, align 4, !tbaa !11
  %1140 = mul nsw i32 %1138, %1139
  %1141 = load i32, ptr %32, align 4, !tbaa !11
  %1142 = load i32, ptr %24, align 4, !tbaa !11
  %1143 = sub nsw i32 %1141, %1142
  %1144 = add nsw i32 %1140, %1143
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds i8, ptr %1135, i64 %1145
  store i8 %1134, ptr %1146, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  br label %1147

1147:                                             ; preds = %1132
  %1148 = load i32, ptr %32, align 4, !tbaa !11
  %1149 = add nsw i32 %1148, 1
  store i32 %1149, ptr %32, align 4, !tbaa !11
  br label %402, !llvm.loop !25

1150:                                             ; preds = %402
  br label %1151

1151:                                             ; preds = %1150
  %1152 = load i32, ptr %33, align 4, !tbaa !11
  %1153 = add nsw i32 %1152, 1
  store i32 %1153, ptr %33, align 4, !tbaa !11
  br label %396, !llvm.loop !26

1154:                                             ; preds = %396
  %1155 = load ptr, ptr %12, align 8, !tbaa !5
  %1156 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %1155, i32 0, i32 0
  %1157 = load ptr, ptr %36, align 8, !tbaa !5
  %1158 = call ptr @_ZTW7context()
  %1159 = getelementptr inbounds %struct.Thread_Context, ptr %1158, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %102, ptr align 8 %1159, i64 16, i1 false), !tbaa.struct !14
  %1160 = getelementptr inbounds { ptr, ptr }, ptr %102, i32 0, i32 0
  %1161 = load ptr, ptr %1160, align 8
  %1162 = getelementptr inbounds { ptr, ptr }, ptr %102, i32 0, i32 1
  %1163 = load ptr, ptr %1162, align 8
  call void @_Z11memory_freePKv9Allocator(ptr noundef %1157, ptr %1161, ptr %1163)
  %1164 = load ptr, ptr %12, align 8, !tbaa !5
  %1165 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %1164, i32 0, i32 0
  %1166 = load ptr, ptr %37, align 8, !tbaa !5
  %1167 = call ptr @_ZTW7context()
  %1168 = getelementptr inbounds %struct.Thread_Context, ptr %1167, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %103, ptr align 8 %1168, i64 16, i1 false), !tbaa.struct !14
  %1169 = getelementptr inbounds { ptr, ptr }, ptr %103, i32 0, i32 0
  %1170 = load ptr, ptr %1169, align 8
  %1171 = getelementptr inbounds { ptr, ptr }, ptr %103, i32 0, i32 1
  %1172 = load ptr, ptr %1171, align 8
  call void @_Z11memory_freePKv9Allocator(ptr noundef %1166, ptr %1170, ptr %1172)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  %1173 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %1173, ptr %11, align 8
  store i32 1, ptr %31, align 4
  br label %1174

1174:                                             ; preds = %1154, %121, %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  %1175 = load ptr, ptr %11, align 8
  ret ptr %1175
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #7

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL26stbtt__compute_crossings_xffiP12stbtt_vertex(float noundef, float noundef, i32 noundef, ptr noundef) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) #7

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL18stbtt__solve_cubicfffPf(float noundef, float noundef, float noundef, ptr noundef) #5

attributes #0 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { uwtable "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { noreturn 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 #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { noreturn 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, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{i64 0, i64 8, !5, i64 8, i64 8, !5}
!15 = !{!16, !7, i64 12}
!16 = !{!"_ZTS12stbtt_vertex", !17, i64 0, !17, i64 2, !17, i64 4, !17, i64 6, !17, i64 8, !17, i64 10, !7, i64 12, !7, i64 13}
!17 = !{!"short", !7, i64 0}
!18 = !{!16, !17, i64 0}
!19 = !{!16, !17, i64 2}
!20 = !{!16, !17, i64 4}
!21 = !{!16, !17, i64 6}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !23}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.stbtt_vertex = type { i16, i16, i16, i16, i16, i16, i8, i8 }

@.str.10 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@__PRETTY_FUNCTION__.stbtt_GetGlyphSDF = external hidden unnamed_addr constant [124 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z11memory_freePKv9Allocator(ptr noundef, ptr, ptr) local_unnamed_addr #0

; Function Attrs: uwtable
declare hidden noundef ptr @_ZTW7context() local_unnamed_addr #1

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local i32 @stbtt_GetGlyphShape(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @stbtt_GetGlyphBitmapBoxSubpixel(ptr noundef, i32 noundef, float noundef, float noundef, float noundef, float noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_Z15memory_allocatem9Allocator(i64 noundef, ptr, ptr) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local noundef ptr @stbtt_GetGlyphSDF(ptr noundef %0, float noundef %1, i32 noundef %2, i32 noundef %3, i8 noundef zeroext %4, float noundef %5, ptr noundef writeonly %6, ptr noundef writeonly %7, ptr noundef writeonly %8, ptr noundef writeonly %9) local_unnamed_addr #4 {
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca [3 x float], align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #7
  %17 = fcmp oeq float %1, 0.000000e+00
  br i1 %17, label %426, label %18

18:                                               ; preds = %10
  call void @stbtt_GetGlyphBitmapBoxSubpixel(ptr noundef %0, i32 noundef %2, float noundef %1, float noundef %1, float noundef 0.000000e+00, float noundef 0.000000e+00, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14)
  %19 = load i32, ptr %11, align 4, !tbaa !5
  %20 = load i32, ptr %13, align 4, !tbaa !5
  %21 = icmp eq i32 %19, %20
  br i1 %21, label %426, label %22

22:                                               ; preds = %18
  %23 = load i32, ptr %12, align 4, !tbaa !5
  %24 = load i32, ptr %14, align 4, !tbaa !5
  %25 = icmp eq i32 %23, %24
  br i1 %25, label %426, label %26

26:                                               ; preds = %22
  %27 = sub nsw i32 %19, %3
  store i32 %27, ptr %11, align 4, !tbaa !5
  %28 = sub nsw i32 %23, %3
  store i32 %28, ptr %12, align 4, !tbaa !5
  %29 = add nsw i32 %20, %3
  store i32 %29, ptr %13, align 4, !tbaa !5
  %30 = add nsw i32 %24, %3
  store i32 %30, ptr %14, align 4, !tbaa !5
  %31 = sub nsw i32 %29, %27
  %32 = sub nsw i32 %30, %28
  %.not = icmp eq ptr %6, null
  br i1 %.not, label %34, label %33

33:                                               ; preds = %26
  store i32 %31, ptr %6, align 4, !tbaa !5
  br label %34

34:                                               ; preds = %33, %26
  %.not467 = icmp eq ptr %7, null
  br i1 %.not467, label %36, label %35

35:                                               ; preds = %34
  store i32 %32, ptr %7, align 4, !tbaa !5
  br label %36

36:                                               ; preds = %35, %34
  %.not468 = icmp eq ptr %8, null
  br i1 %.not468, label %38, label %37

37:                                               ; preds = %36
  store i32 %27, ptr %8, align 4, !tbaa !5
  br label %38

38:                                               ; preds = %37, %36
  %.not469 = icmp eq ptr %9, null
  br i1 %.not469, label %40, label %39

39:                                               ; preds = %38
  store i32 %28, ptr %9, align 4, !tbaa !5
  br label %40

40:                                               ; preds = %39, %38
  %41 = fneg float %1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %42 = call i32 @stbtt_GetGlyphShape(ptr noundef %0, i32 noundef %2, ptr noundef nonnull %15)
  %.fr506 = freeze i32 %42
  %43 = mul nsw i32 %32, %31
  %44 = sext i32 %43 to i64
  %45 = call ptr @_ZTW7context()
  %46 = getelementptr inbounds i8, ptr %45, i64 16
  %.sroa.0316.0.copyload = load ptr, ptr %46, align 8, !tbaa !9
  %.sroa.2317.0..sroa_idx = getelementptr inbounds i8, ptr %45, i64 24
  %.sroa.2317.0.copyload = load ptr, ptr %.sroa.2317.0..sroa_idx, align 8, !tbaa !9
  %47 = call noundef ptr @_Z15memory_allocatem9Allocator(i64 noundef %44, ptr %.sroa.0316.0.copyload, ptr %.sroa.2317.0.copyload)
  %48 = sext i32 %.fr506 to i64
  %49 = shl nsw i64 %48, 2
  %50 = call ptr @_ZTW7context()
  %51 = getelementptr inbounds i8, ptr %50, i64 16
  %.sroa.0314.0.copyload = load ptr, ptr %51, align 8, !tbaa !9
  %.sroa.2315.0..sroa_idx = getelementptr inbounds i8, ptr %50, i64 24
  %.sroa.2315.0.copyload = load ptr, ptr %.sroa.2315.0..sroa_idx, align 8, !tbaa !9
  %52 = call noundef ptr @_Z15memory_allocatem9Allocator(i64 noundef %49, ptr %.sroa.0314.0.copyload, ptr %.sroa.2315.0.copyload)
  %53 = icmp sgt i32 %.fr506, 0
  br i1 %53, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %40
  %54 = add nsw i32 %.fr506, -1
  %wide.trip.count = zext nneg i32 %.fr506 to i64
  %55 = insertelement <2 x float> poison, float %1, i64 0
  %56 = shufflevector <2 x float> %55, <2 x float> poison, <2 x i32> zeroinitializer
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %122
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %122 ]
  %.0430490 = phi i32 [ %54, %.lr.ph.preheader ], [ %124, %122 ]
  %57 = load ptr, ptr %15, align 8, !tbaa !9
  %58 = getelementptr inbounds %struct.stbtt_vertex, ptr %57, i64 %indvars.iv
  %59 = getelementptr inbounds i8, ptr %58, i64 12
  %60 = load i8, ptr %59, align 2, !tbaa !11
  switch i8 %60, label %122 [
    i8 2, label %61
    i8 3, label %88
  ]

61:                                               ; preds = %.lr.ph
  %62 = load i16, ptr %58, align 2, !tbaa !14
  %63 = getelementptr inbounds i8, ptr %58, i64 2
  %64 = load i16, ptr %63, align 2, !tbaa !15
  %65 = sext i32 %.0430490 to i64
  %66 = getelementptr inbounds %struct.stbtt_vertex, ptr %57, i64 %65
  %67 = load i16, ptr %66, align 2, !tbaa !14
  %68 = insertelement <2 x i16> poison, i16 %67, i64 0
  %69 = insertelement <2 x i16> %68, i16 %62, i64 1
  %70 = sitofp <2 x i16> %69 to <2 x float>
  %71 = fmul <2 x float> %56, %70
  %72 = getelementptr inbounds i8, ptr %66, i64 2
  %73 = load i16, ptr %72, align 2, !tbaa !15
  %shift = shufflevector <2 x float> %71, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %74 = fsub <2 x float> %71, %shift
  %75 = extractelement <2 x float> %74, i64 0
  %76 = insertelement <2 x i16> poison, i16 %64, i64 0
  %77 = insertelement <2 x i16> %76, i16 %73, i64 1
  %78 = sitofp <2 x i16> %77 to <2 x float>
  %79 = fmul <2 x float> %56, %78
  %shift521 = shufflevector <2 x float> %79, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %80 = fsub <2 x float> %79, %shift521
  %81 = fmul <2 x float> %80, %80
  %82 = extractelement <2 x float> %81, i64 0
  %83 = call float @llvm.fmuladd.f32(float %75, float %75, float %82)
  %84 = call noundef float @_ZSt4sqrtf(float noundef %83)
  %85 = fcmp oeq float %84, 0.000000e+00
  %86 = fdiv float 1.000000e+00, %84
  %87 = select i1 %85, float 0.000000e+00, float %86
  br label %122

88:                                               ; preds = %.lr.ph
  %89 = sext i32 %.0430490 to i64
  %90 = getelementptr inbounds %struct.stbtt_vertex, ptr %57, i64 %89
  %91 = load i16, ptr %90, align 2, !tbaa !14
  %92 = sitofp i16 %91 to float
  %93 = fmul float %92, %1
  %94 = getelementptr inbounds i8, ptr %90, i64 2
  %95 = load i16, ptr %94, align 2, !tbaa !15
  %96 = sitofp i16 %95 to float
  %97 = getelementptr inbounds i8, ptr %58, i64 4
  %98 = load i16, ptr %97, align 2, !tbaa !16
  %99 = sitofp i16 %98 to float
  %100 = fmul float %99, %1
  %101 = getelementptr inbounds i8, ptr %58, i64 6
  %102 = load i16, ptr %101, align 2, !tbaa !17
  %103 = sitofp i16 %102 to float
  %104 = fmul float %41, %103
  %105 = load i16, ptr %58, align 2, !tbaa !14
  %106 = sitofp i16 %105 to float
  %107 = fmul float %106, %1
  %108 = getelementptr inbounds i8, ptr %58, i64 2
  %109 = load i16, ptr %108, align 2, !tbaa !15
  %110 = sitofp i16 %109 to float
  %111 = fmul float %41, %110
  %112 = call float @llvm.fmuladd.f32(float %100, float -2.000000e+00, float %107)
  %113 = fadd float %93, %112
  %114 = call float @llvm.fmuladd.f32(float %104, float -2.000000e+00, float %111)
  %115 = fmul float %96, %1
  %116 = fsub float %114, %115
  %117 = fmul float %116, %116
  %118 = call float @llvm.fmuladd.f32(float %113, float %113, float %117)
  %119 = fcmp une float %118, 0.000000e+00
  br i1 %119, label %120, label %122

120:                                              ; preds = %88
  %121 = fdiv float 1.000000e+00, %118
  br label %122

122:                                              ; preds = %.lr.ph, %88, %120, %61
  %.sink = phi float [ %121, %120 ], [ %87, %61 ], [ 0.000000e+00, %88 ], [ 0.000000e+00, %.lr.ph ]
  %123 = getelementptr inbounds float, ptr %52, i64 %indvars.iv
  store float %.sink, ptr %123, align 4, !tbaa !18
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %124 = trunc nuw nsw i64 %indvars.iv to i32
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !20

._crit_edge:                                      ; preds = %122, %40
  %125 = load i32, ptr %12, align 4, !tbaa !5
  %126 = load i32, ptr %14, align 4, !tbaa !5
  %127 = icmp slt i32 %125, %126
  br i1 %127, label %.lr.ph504, label %._crit_edge505

.lr.ph504:                                        ; preds = %._crit_edge
  %128 = getelementptr inbounds i8, ptr %16, i64 4
  %129 = getelementptr inbounds i8, ptr %16, i64 8
  %130 = uitofp i8 %4 to float
  %131 = load i32, ptr %11, align 4, !tbaa !5
  %132 = load i32, ptr %13, align 4, !tbaa !5
  %133 = icmp slt i32 %131, %132
  br i1 %133, label %.lr.ph504.split.preheader, label %._crit_edge505

.lr.ph504.split.preheader:                        ; preds = %.lr.ph504
  %wide.trip.count513 = zext nneg i32 %.fr506 to i64
  %134 = insertelement <2 x float> poison, float %1, i64 0
  %135 = insertelement <2 x float> %134, float %41, i64 1
  br label %.lr.ph504.split

.lr.ph504.split:                                  ; preds = %.lr.ph504.split.preheader, %._crit_edge500
  %136 = phi i32 [ %417, %._crit_edge500 ], [ %132, %.lr.ph504.split.preheader ]
  %.0428501 = phi i32 [ %418, %._crit_edge500 ], [ %125, %.lr.ph504.split.preheader ]
  %137 = load i32, ptr %11, align 4, !tbaa !5
  %138 = icmp slt i32 %137, %136
  br i1 %138, label %.lr.ph499, label %._crit_edge500

.lr.ph499:                                        ; preds = %.lr.ph504.split
  %139 = sitofp i32 %.0428501 to float
  %140 = fadd float %139, 5.000000e-01
  %141 = fdiv float %140, %41
  br i1 %53, label %.lr.ph495.us, label %.lr.ph499.split

.lr.ph495.us:                                     ; preds = %.lr.ph499, %150
  %.0427497.us = phi i32 [ %160, %150 ], [ %137, %.lr.ph499 ]
  %142 = sitofp i32 %.0427497.us to float
  %143 = fadd float %142, 5.000000e-01
  %144 = fdiv float %143, %1
  %145 = load ptr, ptr %15, align 8, !tbaa !9
  %146 = call noundef i32 @_ZL26stbtt__compute_crossings_xffiP12stbtt_vertex(float noundef %144, float noundef %141, i32 noundef %.fr506, ptr noundef %145)
  br label %163

147:                                              ; preds = %._crit_edge496.us
  %148 = fcmp ogt float %391, 2.550000e+02
  br i1 %148, label %149, label %150

149:                                              ; preds = %147
  br label %150

150:                                              ; preds = %149, %147, %._crit_edge496.us
  %.0431.us = phi float [ 2.550000e+02, %149 ], [ %391, %147 ], [ 0.000000e+00, %._crit_edge496.us ]
  %151 = fptoui float %.0431.us to i8
  %152 = load i32, ptr %12, align 4, !tbaa !5
  %153 = sub nsw i32 %.0428501, %152
  %154 = mul nsw i32 %153, %31
  %155 = load i32, ptr %11, align 4, !tbaa !5
  %156 = sub i32 %.0427497.us, %155
  %157 = add nsw i32 %156, %154
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds i8, ptr %47, i64 %158
  store i8 %151, ptr %159, align 1, !tbaa !22
  %160 = add nsw i32 %.0427497.us, 1
  %161 = load i32, ptr %13, align 4, !tbaa !5
  %162 = icmp slt i32 %160, %161
  br i1 %162, label %.lr.ph495.us, label %._crit_edge500, !llvm.loop !23

163:                                              ; preds = %.lr.ph495.us, %388
  %indvars.iv510 = phi i64 [ 0, %.lr.ph495.us ], [ %indvars.iv.next511, %388 ]
  %.0432492.us = phi float [ 9.999990e+05, %.lr.ph495.us ], [ %.8.us, %388 ]
  %164 = load ptr, ptr %15, align 8, !tbaa !9
  %165 = getelementptr inbounds %struct.stbtt_vertex, ptr %164, i64 %indvars.iv510
  %166 = load <2 x i16>, ptr %165, align 2, !tbaa !24
  %167 = sitofp <2 x i16> %166 to <2 x float>
  %168 = fmul <2 x float> %135, %167
  %169 = extractelement <2 x float> %168, i64 0
  %170 = fsub float %169, %143
  %171 = extractelement <2 x float> %168, i64 1
  %172 = fsub float %171, %140
  %173 = fmul float %172, %172
  %174 = call float @llvm.fmuladd.f32(float %170, float %170, float %173)
  %175 = fmul float %.0432492.us, %.0432492.us
  %176 = fcmp olt float %174, %175
  br i1 %176, label %177, label %179

177:                                              ; preds = %163
  %178 = call noundef float @_ZSt4sqrtf(float noundef %174)
  %.pre = load ptr, ptr %15, align 8, !tbaa !9
  br label %179

179:                                              ; preds = %177, %163
  %180 = phi ptr [ %.pre, %177 ], [ %164, %163 ]
  %.1433.us = phi float [ %178, %177 ], [ %.0432492.us, %163 ]
  %181 = getelementptr inbounds %struct.stbtt_vertex, ptr %180, i64 %indvars.iv510
  %182 = getelementptr inbounds i8, ptr %181, i64 12
  %183 = load i8, ptr %182, align 2, !tbaa !11
  switch i8 %183, label %388 [
    i8 2, label %359
    i8 3, label %184
  ]

184:                                              ; preds = %179
  %185 = getelementptr i8, ptr %181, i64 -14
  %186 = getelementptr inbounds i8, ptr %181, i64 4
  %187 = load <2 x i16>, ptr %185, align 2, !tbaa !24
  %188 = sitofp <2 x i16> %187 to <2 x float>
  %189 = fmul <2 x float> %135, %188
  %190 = shufflevector <2 x float> %189, <2 x float> poison, <4 x i32> <i32 1, i32 0, i32 1, i32 0>
  %191 = load <2 x i16>, ptr %186, align 2, !tbaa !24
  %192 = sitofp <2 x i16> %191 to <2 x float>
  %193 = fmul <2 x float> %135, %192
  %194 = fcmp olt <2 x float> %168, %193
  %195 = shufflevector <2 x i1> %194, <2 x i1> poison, <4 x i32> <i32 1, i32 0, i32 1, i32 0>
  %196 = shufflevector <2 x float> %193, <2 x float> %168, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
  %197 = shufflevector <4 x float> %196, <4 x float> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
  %198 = select <4 x i1> %195, <4 x float> %196, <4 x float> %197
  %199 = fcmp olt <4 x float> %198, %190
  %200 = extractelement <4 x i1> %199, i64 3
  %201 = extractelement <4 x float> %198, i64 3
  %202 = extractelement <2 x float> %189, i64 0
  %..us = select i1 %200, float %201, float %202
  %203 = extractelement <4 x i1> %199, i64 2
  %204 = extractelement <4 x float> %198, i64 2
  %205 = extractelement <2 x float> %189, i64 1
  %206 = select i1 %203, float %204, float %205
  %207 = extractelement <4 x i1> %199, i64 1
  %208 = extractelement <4 x float> %198, i64 1
  %209 = select i1 %207, float %202, float %208
  %210 = extractelement <4 x i1> %199, i64 0
  %211 = extractelement <4 x float> %198, i64 0
  %212 = select i1 %210, float %205, float %211
  %213 = fsub float %..us, %.1433.us
  %214 = fcmp ogt float %143, %213
  %215 = fadd float %.1433.us, %209
  %216 = fcmp olt float %143, %215
  %or.cond472.us = select i1 %214, i1 %216, i1 false
  %217 = fsub float %206, %.1433.us
  %218 = fcmp ogt float %140, %217
  %or.cond474.us = select i1 %or.cond472.us, i1 %218, i1 false
  %219 = fadd float %.1433.us, %212
  %220 = fcmp olt float %140, %219
  %or.cond476.us = select i1 %or.cond474.us, i1 %220, i1 false
  br i1 %or.cond476.us, label %221, label %388

221:                                              ; preds = %184
  %222 = extractelement <2 x float> %193, i64 0
  %223 = fsub <2 x float> %193, %168
  %224 = extractelement <2 x float> %223, i64 0
  %225 = extractelement <2 x float> %193, i64 1
  %226 = fsub float %225, %171
  %227 = call float @llvm.fmuladd.f32(float %222, float -2.000000e+00, float %169)
  %228 = fadd float %202, %227
  %229 = call float @llvm.fmuladd.f32(float %225, float -2.000000e+00, float %171)
  %230 = fadd float %205, %229
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %16) #7
  %231 = getelementptr inbounds float, ptr %52, i64 %indvars.iv510
  %232 = load float, ptr %231, align 4, !tbaa !18
  %233 = fcmp oeq float %232, 0.000000e+00
  %234 = fmul float %226, %230
  %235 = call float @llvm.fmuladd.f32(float %224, float %228, float %234)
  %236 = fmul float %235, 3.000000e+00
  br i1 %233, label %249, label %237

237:                                              ; preds = %221
  %238 = fmul float %236, %232
  %239 = fmul float %226, %226
  %240 = call float @llvm.fmuladd.f32(float %224, float %224, float %239)
  %241 = fmul float %172, %230
  %242 = call float @llvm.fmuladd.f32(float %170, float %228, float %241)
  %243 = call float @llvm.fmuladd.f32(float %240, float 2.000000e+00, float %242)
  %244 = fmul float %243, %232
  %245 = fmul float %172, %226
  %246 = call float @llvm.fmuladd.f32(float %170, float %224, float %245)
  %247 = fmul float %246, %232
  %248 = call noundef i32 @_ZL18stbtt__solve_cubicfffPf(float noundef %238, float noundef %244, float noundef %247, ptr noundef nonnull %16)
  %.pre515 = load float, ptr %16, align 8
  br label %281

249:                                              ; preds = %221
  %250 = fmul float %226, %226
  %251 = call float @llvm.fmuladd.f32(float %224, float %224, float %250)
  %252 = fmul float %172, %230
  %253 = call float @llvm.fmuladd.f32(float %170, float %228, float %252)
  %254 = call float @llvm.fmuladd.f32(float %251, float 2.000000e+00, float %253)
  %255 = fmul float %172, %226
  %256 = call float @llvm.fmuladd.f32(float %170, float %224, float %255)
  %257 = fcmp oeq float %236, 0.000000e+00
  br i1 %257, label %276, label %258

258:                                              ; preds = %249
  %259 = fmul float %236, -4.000000e+00
  %260 = fmul float %256, %259
  %261 = call float @llvm.fmuladd.f32(float %254, float %254, float %260)
  %262 = fcmp olt float %261, 0.000000e+00
  br i1 %262, label %.thread485.us, label %263

263:                                              ; preds = %258
  %264 = call noundef float @_ZSt4sqrtf(float noundef %261)
  %265 = fneg float %254
  %266 = fmul float %236, 2.000000e+00
  %267 = insertelement <2 x float> poison, float %265, i64 0
  %268 = insertelement <2 x float> %267, float %264, i64 1
  %269 = insertelement <2 x float> poison, float %264, i64 0
  %270 = insertelement <2 x float> %269, float %254, i64 1
  %271 = fsub <2 x float> %268, %270
  %272 = insertelement <2 x float> poison, float %266, i64 0
  %273 = shufflevector <2 x float> %272, <2 x float> poison, <2 x i32> zeroinitializer
  %274 = fdiv <2 x float> %271, %273
  store <2 x float> %274, ptr %16, align 8, !tbaa !18
  %275 = extractelement <2 x float> %274, i64 0
  br label %281

276:                                              ; preds = %249
  %277 = fcmp une float %254, 0.000000e+00
  br i1 %277, label %278, label %.thread485.us

278:                                              ; preds = %276
  %279 = fneg float %256
  %280 = fdiv float %279, %254
  store float %280, ptr %16, align 8, !tbaa !18
  br label %281

281:                                              ; preds = %278, %263, %237
  %282 = phi float [ %.pre515, %237 ], [ %280, %278 ], [ %275, %263 ]
  %.2436.us = phi i32 [ %248, %237 ], [ 1, %278 ], [ 2, %263 ]
  %283 = icmp sgt i32 %.2436.us, 0
  %284 = fcmp oge float %282, 0.000000e+00
  %285 = fcmp ole float %282, 1.000000e+00
  %286 = and i1 %284, %285
  %or.cond7.us = select i1 %283, i1 %286, i1 false
  br i1 %or.cond7.us, label %287, label %307

287:                                              ; preds = %281
  %288 = fsub float 1.000000e+00, %282
  %289 = fmul float %288, %288
  %290 = fmul float %282, 2.000000e+00
  %291 = fmul float %290, %288
  %292 = fmul float %222, %291
  %293 = call float @llvm.fmuladd.f32(float %289, float %169, float %292)
  %294 = fmul float %282, %282
  %295 = call float @llvm.fmuladd.f32(float %294, float %202, float %293)
  %296 = fmul float %225, %291
  %297 = call float @llvm.fmuladd.f32(float %289, float %171, float %296)
  %298 = call float @llvm.fmuladd.f32(float %294, float %205, float %297)
  %299 = fsub float %295, %143
  %300 = fsub float %298, %140
  %301 = fmul float %300, %300
  %302 = call float @llvm.fmuladd.f32(float %299, float %299, float %301)
  %303 = fmul float %.1433.us, %.1433.us
  %304 = fcmp olt float %302, %303
  br i1 %304, label %305, label %307

305:                                              ; preds = %287
  %306 = call noundef float @_ZSt4sqrtf(float noundef %302)
  br label %307

307:                                              ; preds = %305, %287, %281
  %.4.us = phi float [ %306, %305 ], [ %.1433.us, %287 ], [ %.1433.us, %281 ]
  %308 = icmp sgt i32 %.2436.us, 1
  %309 = load float, ptr %128, align 4
  %310 = fcmp oge float %309, 0.000000e+00
  %311 = fcmp ole float %309, 1.000000e+00
  %312 = and i1 %310, %311
  %or.cond13.us = select i1 %308, i1 %312, i1 false
  br i1 %or.cond13.us, label %313, label %333

313:                                              ; preds = %307
  %314 = fsub float 1.000000e+00, %309
  %315 = fmul float %314, %314
  %316 = fmul float %309, 2.000000e+00
  %317 = fmul float %316, %314
  %318 = fmul float %222, %317
  %319 = call float @llvm.fmuladd.f32(float %315, float %169, float %318)
  %320 = fmul float %309, %309
  %321 = call float @llvm.fmuladd.f32(float %320, float %202, float %319)
  %322 = fmul float %225, %317
  %323 = call float @llvm.fmuladd.f32(float %315, float %171, float %322)
  %324 = call float @llvm.fmuladd.f32(float %320, float %205, float %323)
  %325 = fsub float %321, %143
  %326 = fsub float %324, %140
  %327 = fmul float %326, %326
  %328 = call float @llvm.fmuladd.f32(float %325, float %325, float %327)
  %329 = fmul float %.4.us, %.4.us
  %330 = fcmp olt float %328, %329
  br i1 %330, label %331, label %333

331:                                              ; preds = %313
  %332 = call noundef float @_ZSt4sqrtf(float noundef %328)
  br label %333

333:                                              ; preds = %331, %313, %307
  %.5.us = phi float [ %332, %331 ], [ %.4.us, %313 ], [ %.4.us, %307 ]
  %334 = icmp sgt i32 %.2436.us, 2
  %335 = load float, ptr %129, align 8
  %336 = fcmp oge float %335, 0.000000e+00
  %337 = fcmp ole float %335, 1.000000e+00
  %338 = and i1 %336, %337
  %or.cond19.us = select i1 %334, i1 %338, i1 false
  br i1 %or.cond19.us, label %339, label %.thread485.us

339:                                              ; preds = %333
  %340 = fsub float 1.000000e+00, %335
  %341 = fmul float %340, %340
  %342 = fmul float %335, 2.000000e+00
  %343 = fmul float %342, %340
  %344 = fmul float %222, %343
  %345 = call float @llvm.fmuladd.f32(float %341, float %169, float %344)
  %346 = fmul float %335, %335
  %347 = call float @llvm.fmuladd.f32(float %346, float %202, float %345)
  %348 = fmul float %225, %343
  %349 = call float @llvm.fmuladd.f32(float %341, float %171, float %348)
  %350 = call float @llvm.fmuladd.f32(float %346, float %205, float %349)
  %351 = fsub float %347, %143
  %352 = fsub float %350, %140
  %353 = fmul float %352, %352
  %354 = call float @llvm.fmuladd.f32(float %351, float %351, float %353)
  %355 = fmul float %.5.us, %.5.us
  %356 = fcmp olt float %354, %355
  br i1 %356, label %357, label %.thread485.us

357:                                              ; preds = %339
  %358 = call noundef float @_ZSt4sqrtf(float noundef %354)
  br label %.thread485.us

.thread485.us:                                    ; preds = %357, %339, %333, %276, %258
  %.6.us = phi float [ %358, %357 ], [ %.5.us, %339 ], [ %.5.us, %333 ], [ %.1433.us, %276 ], [ %.1433.us, %258 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %16) #7
  br label %388

359:                                              ; preds = %179
  %360 = getelementptr i8, ptr %181, i64 -14
  %361 = load i16, ptr %360, align 2, !tbaa !14
  %362 = sitofp i16 %361 to float
  %363 = fmul float %362, %1
  %364 = getelementptr i8, ptr %181, i64 -12
  %365 = load i16, ptr %364, align 2, !tbaa !15
  %366 = sitofp i16 %365 to float
  %367 = fmul float %41, %366
  %368 = fsub float %363, %169
  %369 = fsub float %367, %171
  %370 = fneg float %369
  %371 = fmul float %170, %370
  %372 = call float @llvm.fmuladd.f32(float %368, float %172, float %371)
  %373 = call noundef float @_ZSt4fabsf(float noundef %372)
  %374 = getelementptr inbounds float, ptr %52, i64 %indvars.iv510
  %375 = load float, ptr %374, align 4, !tbaa !18
  %376 = fmul float %373, %375
  %.not470.us = icmp eq i64 %indvars.iv510, 0
  br i1 %.not470.us, label %.split.us, label %377

377:                                              ; preds = %359
  %378 = fcmp olt float %376, %.1433.us
  br i1 %378, label %379, label %388

379:                                              ; preds = %377
  %380 = fmul float %172, %369
  %381 = call float @llvm.fmuladd.f32(float %170, float %368, float %380)
  %382 = fneg float %381
  %383 = fmul float %369, %369
  %384 = call float @llvm.fmuladd.f32(float %368, float %368, float %383)
  %385 = fdiv float %382, %384
  %386 = fcmp oge float %385, 0.000000e+00
  %387 = fcmp ole float %385, 1.000000e+00
  %or.cond.us = and i1 %386, %387
  %.2.us = select i1 %or.cond.us, float %376, float %.1433.us
  br label %388

388:                                              ; preds = %379, %377, %.thread485.us, %184, %179
  %.8.us = phi float [ %.2.us, %379 ], [ %.1433.us, %377 ], [ %.1433.us, %179 ], [ %.6.us, %.thread485.us ], [ %.1433.us, %184 ]
  %indvars.iv.next511 = add nuw nsw i64 %indvars.iv510, 1
  %exitcond514.not = icmp eq i64 %indvars.iv.next511, %wide.trip.count513
  br i1 %exitcond514.not, label %._crit_edge496.us, label %163, !llvm.loop !25

._crit_edge496.us:                                ; preds = %388
  %389 = icmp eq i32 %146, 0
  %390 = fneg float %.8.us
  %.9.us = select i1 %389, float %390, float %.8.us
  %391 = call float @llvm.fmuladd.f32(float %5, float %.9.us, float %130)
  %392 = fcmp olt float %391, 0.000000e+00
  br i1 %392, label %150, label %147

.lr.ph499.split:                                  ; preds = %.lr.ph499, %404
  %.0427497 = phi i32 [ %414, %404 ], [ %137, %.lr.ph499 ]
  %393 = sitofp i32 %.0427497 to float
  %394 = fadd float %393, 5.000000e-01
  %395 = fdiv float %394, %1
  %396 = load ptr, ptr %15, align 8, !tbaa !9
  %397 = call noundef i32 @_ZL26stbtt__compute_crossings_xffiP12stbtt_vertex(float noundef %395, float noundef %141, i32 noundef %.fr506, ptr noundef %396)
  %398 = icmp eq i32 %397, 0
  %.9 = select i1 %398, float -9.999990e+05, float 9.999990e+05
  %399 = call float @llvm.fmuladd.f32(float %5, float %.9, float %130)
  %400 = fcmp olt float %399, 0.000000e+00
  br i1 %400, label %404, label %401

.split.us:                                        ; preds = %359
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.10, i32 noundef 4636, ptr noundef nonnull @__PRETTY_FUNCTION__.stbtt_GetGlyphSDF) #8
  unreachable

401:                                              ; preds = %.lr.ph499.split
  %402 = fcmp ogt float %399, 2.550000e+02
  br i1 %402, label %403, label %404

403:                                              ; preds = %401
  br label %404

404:                                              ; preds = %.lr.ph499.split, %401, %403
  %.0431 = phi float [ 2.550000e+02, %403 ], [ %399, %401 ], [ 0.000000e+00, %.lr.ph499.split ]
  %405 = fptoui float %.0431 to i8
  %406 = load i32, ptr %12, align 4, !tbaa !5
  %407 = sub nsw i32 %.0428501, %406
  %408 = mul nsw i32 %407, %31
  %409 = load i32, ptr %11, align 4, !tbaa !5
  %410 = sub i32 %.0427497, %409
  %411 = add nsw i32 %410, %408
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds i8, ptr %47, i64 %412
  store i8 %405, ptr %413, align 1, !tbaa !22
  %414 = add nsw i32 %.0427497, 1
  %415 = load i32, ptr %13, align 4, !tbaa !5
  %416 = icmp slt i32 %414, %415
  br i1 %416, label %.lr.ph499.split, label %._crit_edge500, !llvm.loop !23

._crit_edge500:                                   ; preds = %404, %150, %.lr.ph504.split
  %417 = phi i32 [ %136, %.lr.ph504.split ], [ %161, %150 ], [ %415, %404 ]
  %418 = add nsw i32 %.0428501, 1
  %419 = load i32, ptr %14, align 4, !tbaa !5
  %420 = icmp slt i32 %418, %419
  br i1 %420, label %.lr.ph504.split, label %._crit_edge505, !llvm.loop !26

._crit_edge505:                                   ; preds = %._crit_edge500, %.lr.ph504, %._crit_edge
  %421 = call ptr @_ZTW7context()
  %422 = getelementptr inbounds i8, ptr %421, i64 16
  %.sroa.020.0.copyload = load ptr, ptr %422, align 8, !tbaa !9
  %.sroa.221.0..sroa_idx = getelementptr inbounds i8, ptr %421, i64 24
  %.sroa.221.0.copyload = load ptr, ptr %.sroa.221.0..sroa_idx, align 8, !tbaa !9
  call void @_Z11memory_freePKv9Allocator(ptr noundef %52, ptr %.sroa.020.0.copyload, ptr %.sroa.221.0.copyload)
  %423 = load ptr, ptr %15, align 8, !tbaa !9
  %424 = call ptr @_ZTW7context()
  %425 = getelementptr inbounds i8, ptr %424, i64 16
  %.sroa.0.0.copyload = load ptr, ptr %425, align 8, !tbaa !9
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %424, i64 24
  %.sroa.2.0.copyload = load ptr, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !9
  call void @_Z11memory_freePKv9Allocator(ptr noundef %423, ptr %.sroa.0.0.copyload, ptr %.sroa.2.0.copyload)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  br label %426

426:                                              ; preds = %18, %22, %10, %._crit_edge505
  %.0 = phi ptr [ %47, %._crit_edge505 ], [ null, %10 ], [ null, %22 ], [ null, %18 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  ret ptr %.0
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL26stbtt__compute_crossings_xffiP12stbtt_vertex(float noundef, float noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4fabsf(float noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL18stbtt__solve_cubicfffPf(float noundef, float noundef, float noundef, ptr noundef) local_unnamed_addr #4

attributes #0 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { uwtable "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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn 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, !7, i64 12}
!12 = !{!"_ZTS12stbtt_vertex", !13, i64 0, !13, i64 2, !13, i64 4, !13, i64 6, !13, i64 8, !13, i64 10, !7, i64 12, !7, i64 13}
!13 = !{!"short", !7, i64 0}
!14 = !{!12, !13, i64 0}
!15 = !{!12, !13, i64 2}
!16 = !{!12, !13, i64 4}
!17 = !{!12, !13, i64 6}
!18 = !{!19, !19, i64 0}
!19 = !{!"float", !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !21}
!24 = !{!13, !13, i64 0}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21, !27}
!27 = !{!"llvm.loop.unswitch.partial.disable"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,VectorCombinePass