; LLVM IR from mackorone/mms :: old/v2/src/lib/stb (stb_truetype)

; 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.stbtt_fontinfo = type { ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.stbtt_vertex = type { i16, i16, i16, i16, i8, i8 }

@__const.stbtt_GetGlyphShape.mtx = external hidden unnamed_addr constant [6 x float], align 16

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef signext i16 @_Z7ttSHORTPKh(ptr noundef) #0

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

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

; Function Attrs: mustprogress uwtable
define dso_local i32 @stbtt_GetGlyphShape(ptr noundef %0, i32 noundef %1, ptr noundef %2) #2 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i16, align 2
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, 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 i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i16, align 2
  %36 = alloca i16, align 2
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca i16, align 2
  %40 = alloca i16, align 2
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca [6 x float], align 16
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca ptr, align 8
  %49 = alloca i16, align 2
  %50 = alloca i16, align 2
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %51, i32 0, i32 1
  %53 = load ptr, ptr %52, align 8, !tbaa !11
  store ptr %53, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = load i32, ptr %6, align 4, !tbaa !9
  %56 = call noundef i32 @_ZL20stbtt__GetGlyfOffsetPK14stbtt_fontinfoi(ptr noundef %54, i32 noundef %55)
  store i32 %56, ptr %13, align 4, !tbaa !9
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr null, ptr %57, align 8, !tbaa !5
  %58 = load i32, ptr %13, align 4, !tbaa !9
  %59 = icmp slt i32 %58, 0
  br i1 %59, label %60, label %61

60:                                               ; preds = %3
  store i32 0, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %878

61:                                               ; preds = %3
  %62 = load ptr, ptr %10, align 8, !tbaa !5
  %63 = load i32, ptr %13, align 4, !tbaa !9
  %64 = sext i32 %63 to i64
  %65 = getelementptr inbounds i8, ptr %62, i64 %64
  %66 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %65)
  store i16 %66, ptr %8, align 2, !tbaa !13
  %67 = load i16, ptr %8, align 2, !tbaa !13
  %68 = sext i16 %67 to i32
  %69 = icmp sgt i32 %68, 0
  br i1 %69, label %70, label %527

70:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #8
  store i8 0, ptr %15, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store i32 0, 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
  store i32 0, ptr %25, align 4, !tbaa !9
  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 4, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  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 8, ptr %34) #8
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = load i32, ptr %13, align 4, !tbaa !9
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds i8, ptr %71, i64 %73
  %75 = getelementptr inbounds i8, ptr %74, i64 10
  store ptr %75, ptr %9, align 8, !tbaa !5
  %76 = load ptr, ptr %10, align 8, !tbaa !5
  %77 = load i32, ptr %13, align 4, !tbaa !9
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds i8, ptr %76, i64 %78
  %80 = getelementptr inbounds i8, ptr %79, i64 10
  %81 = load i16, ptr %8, align 2, !tbaa !13
  %82 = sext i16 %81 to i32
  %83 = mul nsw i32 %82, 2
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds i8, ptr %80, i64 %84
  %86 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %85)
  %87 = zext i16 %86 to i32
  store i32 %87, ptr %17, align 4, !tbaa !9
  %88 = load ptr, ptr %10, align 8, !tbaa !5
  %89 = load i32, ptr %13, align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i8, ptr %88, i64 %90
  %92 = getelementptr inbounds i8, ptr %91, i64 10
  %93 = load i16, ptr %8, align 2, !tbaa !13
  %94 = sext i16 %93 to i32
  %95 = mul nsw i32 %94, 2
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds i8, ptr %92, i64 %96
  %98 = getelementptr inbounds i8, ptr %97, i64 2
  %99 = load i32, ptr %17, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i8, ptr %98, i64 %100
  store ptr %101, ptr %34, align 8, !tbaa !5
  %102 = load ptr, ptr %9, align 8, !tbaa !5
  %103 = load i16, ptr %8, align 2, !tbaa !13
  %104 = sext i16 %103 to i32
  %105 = mul nsw i32 %104, 2
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds i8, ptr %102, i64 %106
  %108 = getelementptr inbounds i8, ptr %107, i64 -2
  %109 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %108)
  %110 = zext i16 %109 to i32
  %111 = add nsw i32 1, %110
  store i32 %111, ptr %21, align 4, !tbaa !9
  %112 = load i32, ptr %21, align 4, !tbaa !9
  %113 = load i16, ptr %8, align 2, !tbaa !13
  %114 = sext i16 %113 to i32
  %115 = mul nsw i32 2, %114
  %116 = add nsw i32 %112, %115
  store i32 %116, ptr %20, align 4, !tbaa !9
  %117 = load i32, ptr %20, align 4, !tbaa !9
  %118 = sext i32 %117 to i64
  %119 = mul i64 %118, 10
  %120 = call noalias ptr @malloc(i64 noundef %119) #9
  store ptr %120, ptr %11, align 8, !tbaa !5
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = icmp eq ptr %121, null
  br i1 %122, label %123, label %124

123:                                              ; preds = %70
  store i32 0, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %524

124:                                              ; preds = %70
  store i32 0, ptr %22, align 4, !tbaa !9
  store i8 0, ptr %16, align 1, !tbaa !15
  %125 = load i32, ptr %20, align 4, !tbaa !9
  %126 = load i32, ptr %21, align 4, !tbaa !9
  %127 = sub nsw i32 %125, %126
  store i32 %127, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %128

128:                                              ; preds = %161, %124
  %129 = load i32, ptr %18, align 4, !tbaa !9
  %130 = load i32, ptr %21, align 4, !tbaa !9
  %131 = icmp slt i32 %129, %130
  br i1 %131, label %132, label %164

132:                                              ; preds = %128
  %133 = load i8, ptr %16, align 1, !tbaa !15
  %134 = zext i8 %133 to i32
  %135 = icmp eq i32 %134, 0
  br i1 %135, label %136, label %149

136:                                              ; preds = %132
  %137 = load ptr, ptr %34, align 8, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %137, i32 1
  store ptr %138, ptr %34, align 8, !tbaa !5
  %139 = load i8, ptr %137, align 1, !tbaa !15
  store i8 %139, ptr %15, align 1, !tbaa !15
  %140 = load i8, ptr %15, align 1, !tbaa !15
  %141 = zext i8 %140 to i32
  %142 = and i32 %141, 8
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %144, label %148

144:                                              ; preds = %136
  %145 = load ptr, ptr %34, align 8, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %145, i32 1
  store ptr %146, ptr %34, align 8, !tbaa !5
  %147 = load i8, ptr %145, align 1, !tbaa !15
  store i8 %147, ptr %16, align 1, !tbaa !15
  br label %148

148:                                              ; preds = %144, %136
  br label %152

149:                                              ; preds = %132
  %150 = load i8, ptr %16, align 1, !tbaa !15
  %151 = add i8 %150, -1
  store i8 %151, ptr %16, align 1, !tbaa !15
  br label %152

152:                                              ; preds = %149, %148
  %153 = load i8, ptr %15, align 1, !tbaa !15
  %154 = load ptr, ptr %11, align 8, !tbaa !5
  %155 = load i32, ptr %24, align 4, !tbaa !9
  %156 = load i32, ptr %18, align 4, !tbaa !9
  %157 = add nsw i32 %155, %156
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds %struct.stbtt_vertex, ptr %154, i64 %158
  %160 = getelementptr inbounds %struct.stbtt_vertex, ptr %159, i32 0, i32 4
  store i8 %153, ptr %160, align 2, !tbaa !16
  br label %161

161:                                              ; preds = %152
  %162 = load i32, ptr %18, align 4, !tbaa !9
  %163 = add nsw i32 %162, 1
  store i32 %163, ptr %18, align 4, !tbaa !9
  br label %128, !llvm.loop !18

164:                                              ; preds = %128
  store i32 0, ptr %26, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %165

165:                                              ; preds = %235, %164
  %166 = load i32, ptr %18, align 4, !tbaa !9
  %167 = load i32, ptr %21, align 4, !tbaa !9
  %168 = icmp slt i32 %166, %167
  br i1 %168, label %169, label %238

169:                                              ; preds = %165
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = load i32, ptr %24, align 4, !tbaa !9
  %172 = load i32, ptr %18, align 4, !tbaa !9
  %173 = add nsw i32 %171, %172
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds %struct.stbtt_vertex, ptr %170, i64 %174
  %176 = getelementptr inbounds %struct.stbtt_vertex, ptr %175, i32 0, i32 4
  %177 = load i8, ptr %176, align 2, !tbaa !16
  store i8 %177, ptr %15, align 1, !tbaa !15
  %178 = load i8, ptr %15, align 1, !tbaa !15
  %179 = zext i8 %178 to i32
  %180 = and i32 %179, 2
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %202

182:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 2, ptr %35) #8
  %183 = load ptr, ptr %34, align 8, !tbaa !5
  %184 = getelementptr inbounds i8, ptr %183, i32 1
  store ptr %184, ptr %34, align 8, !tbaa !5
  %185 = load i8, ptr %183, align 1, !tbaa !15
  %186 = zext i8 %185 to i16
  store i16 %186, ptr %35, align 2, !tbaa !13
  %187 = load i8, ptr %15, align 1, !tbaa !15
  %188 = zext i8 %187 to i32
  %189 = and i32 %188, 16
  %190 = icmp ne i32 %189, 0
  br i1 %190, label %191, label %194

191:                                              ; preds = %182
  %192 = load i16, ptr %35, align 2, !tbaa !13
  %193 = sext i16 %192 to i32
  br label %198

194:                                              ; preds = %182
  %195 = load i16, ptr %35, align 2, !tbaa !13
  %196 = sext i16 %195 to i32
  %197 = sub nsw i32 0, %196
  br label %198

198:                                              ; preds = %194, %191
  %199 = phi i32 [ %193, %191 ], [ %197, %194 ]
  %200 = load i32, ptr %26, align 4, !tbaa !9
  %201 = add nsw i32 %200, %199
  store i32 %201, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %35) #8
  br label %225

202:                                              ; preds = %169
  %203 = load i8, ptr %15, align 1, !tbaa !15
  %204 = zext i8 %203 to i32
  %205 = and i32 %204, 16
  %206 = icmp ne i32 %205, 0
  br i1 %206, label %224, label %207

207:                                              ; preds = %202
  %208 = load i32, ptr %26, align 4, !tbaa !9
  %209 = load ptr, ptr %34, align 8, !tbaa !5
  %210 = getelementptr inbounds i8, ptr %209, i64 0
  %211 = load i8, ptr %210, align 1, !tbaa !15
  %212 = zext i8 %211 to i32
  %213 = mul nsw i32 %212, 256
  %214 = load ptr, ptr %34, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %214, i64 1
  %216 = load i8, ptr %215, align 1, !tbaa !15
  %217 = zext i8 %216 to i32
  %218 = add nsw i32 %213, %217
  %219 = trunc i32 %218 to i16
  %220 = sext i16 %219 to i32
  %221 = add nsw i32 %208, %220
  store i32 %221, ptr %26, align 4, !tbaa !9
  %222 = load ptr, ptr %34, align 8, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %222, i64 2
  store ptr %223, ptr %34, align 8, !tbaa !5
  br label %224

224:                                              ; preds = %207, %202
  br label %225

225:                                              ; preds = %224, %198
  %226 = load i32, ptr %26, align 4, !tbaa !9
  %227 = trunc i32 %226 to i16
  %228 = load ptr, ptr %11, align 8, !tbaa !5
  %229 = load i32, ptr %24, align 4, !tbaa !9
  %230 = load i32, ptr %18, align 4, !tbaa !9
  %231 = add nsw i32 %229, %230
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds %struct.stbtt_vertex, ptr %228, i64 %232
  %234 = getelementptr inbounds %struct.stbtt_vertex, ptr %233, i32 0, i32 0
  store i16 %227, ptr %234, align 2, !tbaa !20
  br label %235

235:                                              ; preds = %225
  %236 = load i32, ptr %18, align 4, !tbaa !9
  %237 = add nsw i32 %236, 1
  store i32 %237, ptr %18, align 4, !tbaa !9
  br label %165, !llvm.loop !21

238:                                              ; preds = %165
  store i32 0, ptr %27, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %239

239:                                              ; preds = %309, %238
  %240 = load i32, ptr %18, align 4, !tbaa !9
  %241 = load i32, ptr %21, align 4, !tbaa !9
  %242 = icmp slt i32 %240, %241
  br i1 %242, label %243, label %312

243:                                              ; preds = %239
  %244 = load ptr, ptr %11, align 8, !tbaa !5
  %245 = load i32, ptr %24, align 4, !tbaa !9
  %246 = load i32, ptr %18, align 4, !tbaa !9
  %247 = add nsw i32 %245, %246
  %248 = sext i32 %247 to i64
  %249 = getelementptr inbounds %struct.stbtt_vertex, ptr %244, i64 %248
  %250 = getelementptr inbounds %struct.stbtt_vertex, ptr %249, i32 0, i32 4
  %251 = load i8, ptr %250, align 2, !tbaa !16
  store i8 %251, ptr %15, align 1, !tbaa !15
  %252 = load i8, ptr %15, align 1, !tbaa !15
  %253 = zext i8 %252 to i32
  %254 = and i32 %253, 4
  %255 = icmp ne i32 %254, 0
  br i1 %255, label %256, label %276

256:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 2, ptr %36) #8
  %257 = load ptr, ptr %34, align 8, !tbaa !5
  %258 = getelementptr inbounds i8, ptr %257, i32 1
  store ptr %258, ptr %34, align 8, !tbaa !5
  %259 = load i8, ptr %257, align 1, !tbaa !15
  %260 = zext i8 %259 to i16
  store i16 %260, ptr %36, align 2, !tbaa !13
  %261 = load i8, ptr %15, align 1, !tbaa !15
  %262 = zext i8 %261 to i32
  %263 = and i32 %262, 32
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %268

265:                                              ; preds = %256
  %266 = load i16, ptr %36, align 2, !tbaa !13
  %267 = sext i16 %266 to i32
  br label %272

268:                                              ; preds = %256
  %269 = load i16, ptr %36, align 2, !tbaa !13
  %270 = sext i16 %269 to i32
  %271 = sub nsw i32 0, %270
  br label %272

272:                                              ; preds = %268, %265
  %273 = phi i32 [ %267, %265 ], [ %271, %268 ]
  %274 = load i32, ptr %27, align 4, !tbaa !9
  %275 = add nsw i32 %274, %273
  store i32 %275, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %36) #8
  br label %299

276:                                              ; preds = %243
  %277 = load i8, ptr %15, align 1, !tbaa !15
  %278 = zext i8 %277 to i32
  %279 = and i32 %278, 32
  %280 = icmp ne i32 %279, 0
  br i1 %280, label %298, label %281

281:                                              ; preds = %276
  %282 = load i32, ptr %27, align 4, !tbaa !9
  %283 = load ptr, ptr %34, align 8, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %283, i64 0
  %285 = load i8, ptr %284, align 1, !tbaa !15
  %286 = zext i8 %285 to i32
  %287 = mul nsw i32 %286, 256
  %288 = load ptr, ptr %34, align 8, !tbaa !5
  %289 = getelementptr inbounds i8, ptr %288, i64 1
  %290 = load i8, ptr %289, align 1, !tbaa !15
  %291 = zext i8 %290 to i32
  %292 = add nsw i32 %287, %291
  %293 = trunc i32 %292 to i16
  %294 = sext i16 %293 to i32
  %295 = add nsw i32 %282, %294
  store i32 %295, ptr %27, align 4, !tbaa !9
  %296 = load ptr, ptr %34, align 8, !tbaa !5
  %297 = getelementptr inbounds i8, ptr %296, i64 2
  store ptr %297, ptr %34, align 8, !tbaa !5
  br label %298

298:                                              ; preds = %281, %276
  br label %299

299:                                              ; preds = %298, %272
  %300 = load i32, ptr %27, align 4, !tbaa !9
  %301 = trunc i32 %300 to i16
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = load i32, ptr %24, align 4, !tbaa !9
  %304 = load i32, ptr %18, align 4, !tbaa !9
  %305 = add nsw i32 %303, %304
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds %struct.stbtt_vertex, ptr %302, i64 %306
  %308 = getelementptr inbounds %struct.stbtt_vertex, ptr %307, i32 0, i32 1
  store i16 %301, ptr %308, align 2, !tbaa !22
  br label %309

309:                                              ; preds = %299
  %310 = load i32, ptr %18, align 4, !tbaa !9
  %311 = add nsw i32 %310, 1
  store i32 %311, ptr %18, align 4, !tbaa !9
  br label %239, !llvm.loop !23

312:                                              ; preds = %239
  store i32 0, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %32, align 4, !tbaa !9
  store i32 0, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %28, align 4, !tbaa !9
  store i32 0, ptr %31, align 4, !tbaa !9
  store i32 0, ptr %30, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %313

313:                                              ; preds = %509, %312
  %314 = load i32, ptr %18, align 4, !tbaa !9
  %315 = load i32, ptr %21, align 4, !tbaa !9
  %316 = icmp slt i32 %314, %315
  br i1 %316, label %317, label %512

317:                                              ; preds = %313
  %318 = load ptr, ptr %11, align 8, !tbaa !5
  %319 = load i32, ptr %24, align 4, !tbaa !9
  %320 = load i32, ptr %18, align 4, !tbaa !9
  %321 = add nsw i32 %319, %320
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds %struct.stbtt_vertex, ptr %318, i64 %322
  %324 = getelementptr inbounds %struct.stbtt_vertex, ptr %323, i32 0, i32 4
  %325 = load i8, ptr %324, align 2, !tbaa !16
  store i8 %325, ptr %15, align 1, !tbaa !15
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = load i32, ptr %24, align 4, !tbaa !9
  %328 = load i32, ptr %18, align 4, !tbaa !9
  %329 = add nsw i32 %327, %328
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds %struct.stbtt_vertex, ptr %326, i64 %330
  %332 = getelementptr inbounds %struct.stbtt_vertex, ptr %331, i32 0, i32 0
  %333 = load i16, ptr %332, align 2, !tbaa !20
  %334 = sext i16 %333 to i32
  store i32 %334, ptr %26, align 4, !tbaa !9
  %335 = load ptr, ptr %11, align 8, !tbaa !5
  %336 = load i32, ptr %24, align 4, !tbaa !9
  %337 = load i32, ptr %18, align 4, !tbaa !9
  %338 = add nsw i32 %336, %337
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds %struct.stbtt_vertex, ptr %335, i64 %339
  %341 = getelementptr inbounds %struct.stbtt_vertex, ptr %340, i32 0, i32 1
  %342 = load i16, ptr %341, align 2, !tbaa !22
  %343 = sext i16 %342 to i32
  store i32 %343, ptr %27, align 4, !tbaa !9
  %344 = load i32, ptr %22, align 4, !tbaa !9
  %345 = load i32, ptr %18, align 4, !tbaa !9
  %346 = icmp eq i32 %344, %345
  br i1 %346, label %347, label %458

347:                                              ; preds = %317
  %348 = load i32, ptr %18, align 4, !tbaa !9
  %349 = icmp ne i32 %348, 0
  br i1 %349, label %350, label %362

350:                                              ; preds = %347
  %351 = load ptr, ptr %11, align 8, !tbaa !5
  %352 = load i32, ptr %12, align 4, !tbaa !9
  %353 = load i32, ptr %23, align 4, !tbaa !9
  %354 = load i32, ptr %25, align 4, !tbaa !9
  %355 = load i32, ptr %30, align 4, !tbaa !9
  %356 = load i32, ptr %31, align 4, !tbaa !9
  %357 = load i32, ptr %32, align 4, !tbaa !9
  %358 = load i32, ptr %33, align 4, !tbaa !9
  %359 = load i32, ptr %28, align 4, !tbaa !9
  %360 = load i32, ptr %29, align 4, !tbaa !9
  %361 = call noundef i32 @_ZL18stbtt__close_shapeP12stbtt_vertexiiiiiiiii(ptr noundef %351, i32 noundef %352, i32 noundef %353, i32 noundef %354, i32 noundef %355, i32 noundef %356, i32 noundef %357, i32 noundef %358, i32 noundef %359, i32 noundef %360)
  store i32 %361, ptr %12, align 4, !tbaa !9
  br label %362

362:                                              ; preds = %350, %347
  %363 = load i8, ptr %15, align 1, !tbaa !15
  %364 = zext i8 %363 to i32
  %365 = and i32 %364, 1
  %366 = icmp ne i32 %365, 0
  %367 = xor i1 %366, true
  %368 = zext i1 %367 to i32
  store i32 %368, ptr %25, align 4, !tbaa !9
  %369 = load i32, ptr %25, align 4, !tbaa !9
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %437

371:                                              ; preds = %362
  %372 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %372, ptr %32, align 4, !tbaa !9
  %373 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %373, ptr %33, align 4, !tbaa !9
  %374 = load ptr, ptr %11, align 8, !tbaa !5
  %375 = load i32, ptr %24, align 4, !tbaa !9
  %376 = load i32, ptr %18, align 4, !tbaa !9
  %377 = add nsw i32 %375, %376
  %378 = add nsw i32 %377, 1
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds %struct.stbtt_vertex, ptr %374, i64 %379
  %381 = getelementptr inbounds %struct.stbtt_vertex, ptr %380, i32 0, i32 4
  %382 = load i8, ptr %381, align 2, !tbaa !16
  %383 = zext i8 %382 to i32
  %384 = and i32 %383, 1
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %413, label %386

386:                                              ; preds = %371
  %387 = load i32, ptr %26, align 4, !tbaa !9
  %388 = load ptr, ptr %11, align 8, !tbaa !5
  %389 = load i32, ptr %24, align 4, !tbaa !9
  %390 = load i32, ptr %18, align 4, !tbaa !9
  %391 = add nsw i32 %389, %390
  %392 = add nsw i32 %391, 1
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds %struct.stbtt_vertex, ptr %388, i64 %393
  %395 = getelementptr inbounds %struct.stbtt_vertex, ptr %394, i32 0, i32 0
  %396 = load i16, ptr %395, align 2, !tbaa !20
  %397 = sext i16 %396 to i32
  %398 = add nsw i32 %387, %397
  %399 = ashr i32 %398, 1
  store i32 %399, ptr %30, align 4, !tbaa !9
  %400 = load i32, ptr %27, align 4, !tbaa !9
  %401 = load ptr, ptr %11, align 8, !tbaa !5
  %402 = load i32, ptr %24, align 4, !tbaa !9
  %403 = load i32, ptr %18, align 4, !tbaa !9
  %404 = add nsw i32 %402, %403
  %405 = add nsw i32 %404, 1
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds %struct.stbtt_vertex, ptr %401, i64 %406
  %408 = getelementptr inbounds %struct.stbtt_vertex, ptr %407, i32 0, i32 1
  %409 = load i16, ptr %408, align 2, !tbaa !22
  %410 = sext i16 %409 to i32
  %411 = add nsw i32 %400, %410
  %412 = ashr i32 %411, 1
  store i32 %412, ptr %31, align 4, !tbaa !9
  br label %436

413:                                              ; preds = %371
  %414 = load ptr, ptr %11, align 8, !tbaa !5
  %415 = load i32, ptr %24, align 4, !tbaa !9
  %416 = load i32, ptr %18, align 4, !tbaa !9
  %417 = add nsw i32 %415, %416
  %418 = add nsw i32 %417, 1
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds %struct.stbtt_vertex, ptr %414, i64 %419
  %421 = getelementptr inbounds %struct.stbtt_vertex, ptr %420, i32 0, i32 0
  %422 = load i16, ptr %421, align 2, !tbaa !20
  %423 = sext i16 %422 to i32
  store i32 %423, ptr %30, align 4, !tbaa !9
  %424 = load ptr, ptr %11, align 8, !tbaa !5
  %425 = load i32, ptr %24, align 4, !tbaa !9
  %426 = load i32, ptr %18, align 4, !tbaa !9
  %427 = add nsw i32 %425, %426
  %428 = add nsw i32 %427, 1
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds %struct.stbtt_vertex, ptr %424, i64 %429
  %431 = getelementptr inbounds %struct.stbtt_vertex, ptr %430, i32 0, i32 1
  %432 = load i16, ptr %431, align 2, !tbaa !22
  %433 = sext i16 %432 to i32
  store i32 %433, ptr %31, align 4, !tbaa !9
  %434 = load i32, ptr %18, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %18, align 4, !tbaa !9
  br label %436

436:                                              ; preds = %413, %386
  br label %440

437:                                              ; preds = %362
  %438 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %438, ptr %30, align 4, !tbaa !9
  %439 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %439, ptr %31, align 4, !tbaa !9
  br label %440

440:                                              ; preds = %437, %436
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = load i32, ptr %12, align 4, !tbaa !9
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %12, align 4, !tbaa !9
  %444 = sext i32 %442 to i64
  %445 = getelementptr inbounds %struct.stbtt_vertex, ptr %441, i64 %444
  %446 = load i32, ptr %30, align 4, !tbaa !9
  %447 = load i32, ptr %31, align 4, !tbaa !9
  call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef %445, i8 noundef zeroext 1, i32 noundef %446, i32 noundef %447, i32 noundef 0, i32 noundef 0)
  store i32 0, ptr %23, align 4, !tbaa !9
  %448 = load ptr, ptr %9, align 8, !tbaa !5
  %449 = load i32, ptr %19, align 4, !tbaa !9
  %450 = mul nsw i32 %449, 2
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i8, ptr %448, i64 %451
  %453 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %452)
  %454 = zext i16 %453 to i32
  %455 = add nsw i32 1, %454
  store i32 %455, ptr %22, align 4, !tbaa !9
  %456 = load i32, ptr %19, align 4, !tbaa !9
  %457 = add nsw i32 %456, 1
  store i32 %457, ptr %19, align 4, !tbaa !9
  br label %508

458:                                              ; preds = %317
  %459 = load i8, ptr %15, align 1, !tbaa !15
  %460 = zext i8 %459 to i32
  %461 = and i32 %460, 1
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %485, label %463

463:                                              ; preds = %458
  %464 = load i32, ptr %23, align 4, !tbaa !9
  %465 = icmp ne i32 %464, 0
  br i1 %465, label %466, label %482

466:                                              ; preds = %463
  %467 = load ptr, ptr %11, align 8, !tbaa !5
  %468 = load i32, ptr %12, align 4, !tbaa !9
  %469 = add nsw i32 %468, 1
  store i32 %469, ptr %12, align 4, !tbaa !9
  %470 = sext i32 %468 to i64
  %471 = getelementptr inbounds %struct.stbtt_vertex, ptr %467, i64 %470
  %472 = load i32, ptr %28, align 4, !tbaa !9
  %473 = load i32, ptr %26, align 4, !tbaa !9
  %474 = add nsw i32 %472, %473
  %475 = ashr i32 %474, 1
  %476 = load i32, ptr %29, align 4, !tbaa !9
  %477 = load i32, ptr %27, align 4, !tbaa !9
  %478 = add nsw i32 %476, %477
  %479 = ashr i32 %478, 1
  %480 = load i32, ptr %28, align 4, !tbaa !9
  %481 = load i32, ptr %29, align 4, !tbaa !9
  call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef %471, i8 noundef zeroext 3, i32 noundef %475, i32 noundef %479, i32 noundef %480, i32 noundef %481)
  br label %482

482:                                              ; preds = %466, %463
  %483 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %483, ptr %28, align 4, !tbaa !9
  %484 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %484, ptr %29, align 4, !tbaa !9
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %507

485:                                              ; preds = %458
  %486 = load i32, ptr %23, align 4, !tbaa !9
  %487 = icmp ne i32 %486, 0
  br i1 %487, label %488, label %498

488:                                              ; preds = %485
  %489 = load ptr, ptr %11, align 8, !tbaa !5
  %490 = load i32, ptr %12, align 4, !tbaa !9
  %491 = add nsw i32 %490, 1
  store i32 %491, ptr %12, align 4, !tbaa !9
  %492 = sext i32 %490 to i64
  %493 = getelementptr inbounds %struct.stbtt_vertex, ptr %489, i64 %492
  %494 = load i32, ptr %26, align 4, !tbaa !9
  %495 = load i32, ptr %27, align 4, !tbaa !9
  %496 = load i32, ptr %28, align 4, !tbaa !9
  %497 = load i32, ptr %29, align 4, !tbaa !9
  call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef %493, i8 noundef zeroext 3, i32 noundef %494, i32 noundef %495, i32 noundef %496, i32 noundef %497)
  br label %506

498:                                              ; preds = %485
  %499 = load ptr, ptr %11, align 8, !tbaa !5
  %500 = load i32, ptr %12, align 4, !tbaa !9
  %501 = add nsw i32 %500, 1
  store i32 %501, ptr %12, align 4, !tbaa !9
  %502 = sext i32 %500 to i64
  %503 = getelementptr inbounds %struct.stbtt_vertex, ptr %499, i64 %502
  %504 = load i32, ptr %26, align 4, !tbaa !9
  %505 = load i32, ptr %27, align 4, !tbaa !9
  call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef %503, i8 noundef zeroext 2, i32 noundef %504, i32 noundef %505, i32 noundef 0, i32 noundef 0)
  br label %506

506:                                              ; preds = %498, %488
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %507

507:                                              ; preds = %506, %482
  br label %508

508:                                              ; preds = %507, %440
  br label %509

509:                                              ; preds = %508
  %510 = load i32, ptr %18, align 4, !tbaa !9
  %511 = add nsw i32 %510, 1
  store i32 %511, ptr %18, align 4, !tbaa !9
  br label %313, !llvm.loop !24

512:                                              ; preds = %313
  %513 = load ptr, ptr %11, align 8, !tbaa !5
  %514 = load i32, ptr %12, align 4, !tbaa !9
  %515 = load i32, ptr %23, align 4, !tbaa !9
  %516 = load i32, ptr %25, align 4, !tbaa !9
  %517 = load i32, ptr %30, align 4, !tbaa !9
  %518 = load i32, ptr %31, align 4, !tbaa !9
  %519 = load i32, ptr %32, align 4, !tbaa !9
  %520 = load i32, ptr %33, align 4, !tbaa !9
  %521 = load i32, ptr %28, align 4, !tbaa !9
  %522 = load i32, ptr %29, align 4, !tbaa !9
  %523 = call noundef i32 @_ZL18stbtt__close_shapeP12stbtt_vertexiiiiiiiii(ptr noundef %513, i32 noundef %514, i32 noundef %515, i32 noundef %516, i32 noundef %517, i32 noundef %518, i32 noundef %519, i32 noundef %520, i32 noundef %521, i32 noundef %522)
  store i32 %523, ptr %12, align 4, !tbaa !9
  store i32 0, ptr %14, align 4
  br label %524

524:                                              ; preds = %512, %123
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #8
  %525 = load i32, ptr %14, align 4
  switch i32 %525, label %878 [
    i32 0, label %526
  ]

526:                                              ; preds = %524
  br label %874

527:                                              ; preds = %61
  %528 = load i16, ptr %8, align 2, !tbaa !13
  %529 = sext i16 %528 to i32
  %530 = icmp eq i32 %529, -1
  br i1 %530, label %531, label %863

531:                                              ; preds = %527
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 1, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %532 = load ptr, ptr %10, align 8, !tbaa !5
  %533 = load i32, ptr %13, align 4, !tbaa !9
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds i8, ptr %532, i64 %534
  %536 = getelementptr inbounds i8, ptr %535, i64 10
  store ptr %536, ptr %38, align 8, !tbaa !5
  store i32 0, ptr %12, align 4, !tbaa !9
  store ptr null, ptr %11, align 8, !tbaa !5
  br label %537

537:                                              ; preds = %858, %531
  %538 = load i32, ptr %37, align 4, !tbaa !9
  %539 = icmp ne i32 %538, 0
  br i1 %539, label %540, label %859

540:                                              ; preds = %537
  call void @llvm.lifetime.start.p0(i64 2, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 2, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  store i32 0, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  store ptr null, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  store ptr null, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %45, ptr align 16 @__const.stbtt_GetGlyphShape.mtx, i64 24, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  %541 = load ptr, ptr %38, align 8, !tbaa !5
  %542 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %541)
  store i16 %542, ptr %39, align 2, !tbaa !13
  %543 = load ptr, ptr %38, align 8, !tbaa !5
  %544 = getelementptr inbounds i8, ptr %543, i64 2
  store ptr %544, ptr %38, align 8, !tbaa !5
  %545 = load ptr, ptr %38, align 8, !tbaa !5
  %546 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %545)
  store i16 %546, ptr %40, align 2, !tbaa !13
  %547 = load ptr, ptr %38, align 8, !tbaa !5
  %548 = getelementptr inbounds i8, ptr %547, i64 2
  store ptr %548, ptr %38, align 8, !tbaa !5
  %549 = load i16, ptr %39, align 2, !tbaa !13
  %550 = zext i16 %549 to i32
  %551 = and i32 %550, 2
  %552 = icmp ne i32 %551, 0
  br i1 %552, label %553, label %585

553:                                              ; preds = %540
  %554 = load i16, ptr %39, align 2, !tbaa !13
  %555 = zext i16 %554 to i32
  %556 = and i32 %555, 1
  %557 = icmp ne i32 %556, 0
  br i1 %557, label %558, label %571

558:                                              ; preds = %553
  %559 = load ptr, ptr %38, align 8, !tbaa !5
  %560 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %559)
  %561 = sitofp i16 %560 to float
  %562 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 4
  store float %561, ptr %562, align 16, !tbaa !25
  %563 = load ptr, ptr %38, align 8, !tbaa !5
  %564 = getelementptr inbounds i8, ptr %563, i64 2
  store ptr %564, ptr %38, align 8, !tbaa !5
  %565 = load ptr, ptr %38, align 8, !tbaa !5
  %566 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %565)
  %567 = sitofp i16 %566 to float
  %568 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 5
  store float %567, ptr %568, align 4, !tbaa !25
  %569 = load ptr, ptr %38, align 8, !tbaa !5
  %570 = getelementptr inbounds i8, ptr %569, i64 2
  store ptr %570, ptr %38, align 8, !tbaa !5
  br label %584

571:                                              ; preds = %553
  %572 = load ptr, ptr %38, align 8, !tbaa !5
  %573 = load i8, ptr %572, align 1, !tbaa !15
  %574 = sitofp i8 %573 to float
  %575 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 4
  store float %574, ptr %575, align 16, !tbaa !25
  %576 = load ptr, ptr %38, align 8, !tbaa !5
  %577 = getelementptr inbounds i8, ptr %576, i64 1
  store ptr %577, ptr %38, align 8, !tbaa !5
  %578 = load ptr, ptr %38, align 8, !tbaa !5
  %579 = load i8, ptr %578, align 1, !tbaa !15
  %580 = sitofp i8 %579 to float
  %581 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 5
  store float %580, ptr %581, align 4, !tbaa !25
  %582 = load ptr, ptr %38, align 8, !tbaa !5
  %583 = getelementptr inbounds i8, ptr %582, i64 1
  store ptr %583, ptr %38, align 8, !tbaa !5
  br label %584

584:                                              ; preds = %571, %558
  br label %589

585:                                              ; preds = %540
  br label %586

586:                                              ; preds = %585
  br label %587

587:                                              ; preds = %586
  br label %588

588:                                              ; preds = %587
  br label %589

589:                                              ; preds = %588, %584
  %590 = load i16, ptr %39, align 2, !tbaa !13
  %591 = zext i16 %590 to i32
  %592 = and i32 %591, 8
  %593 = icmp ne i32 %592, 0
  br i1 %593, label %594, label %606

594:                                              ; preds = %589
  %595 = load ptr, ptr %38, align 8, !tbaa !5
  %596 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %595)
  %597 = sext i16 %596 to i32
  %598 = sitofp i32 %597 to float
  %599 = fdiv float %598, 1.638400e+04
  %600 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 3
  store float %599, ptr %600, align 4, !tbaa !25
  %601 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 0
  store float %599, ptr %601, align 16, !tbaa !25
  %602 = load ptr, ptr %38, align 8, !tbaa !5
  %603 = getelementptr inbounds i8, ptr %602, i64 2
  store ptr %603, ptr %38, align 8, !tbaa !5
  %604 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 2
  store float 0.000000e+00, ptr %604, align 8, !tbaa !25
  %605 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 1
  store float 0.000000e+00, ptr %605, align 4, !tbaa !25
  br label %670

606:                                              ; preds = %589
  %607 = load i16, ptr %39, align 2, !tbaa !13
  %608 = zext i16 %607 to i32
  %609 = and i32 %608, 64
  %610 = icmp ne i32 %609, 0
  br i1 %610, label %611, label %630

611:                                              ; preds = %606
  %612 = load ptr, ptr %38, align 8, !tbaa !5
  %613 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %612)
  %614 = sext i16 %613 to i32
  %615 = sitofp i32 %614 to float
  %616 = fdiv float %615, 1.638400e+04
  %617 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 0
  store float %616, ptr %617, align 16, !tbaa !25
  %618 = load ptr, ptr %38, align 8, !tbaa !5
  %619 = getelementptr inbounds i8, ptr %618, i64 2
  store ptr %619, ptr %38, align 8, !tbaa !5
  %620 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 2
  store float 0.000000e+00, ptr %620, align 8, !tbaa !25
  %621 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 1
  store float 0.000000e+00, ptr %621, align 4, !tbaa !25
  %622 = load ptr, ptr %38, align 8, !tbaa !5
  %623 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %622)
  %624 = sext i16 %623 to i32
  %625 = sitofp i32 %624 to float
  %626 = fdiv float %625, 1.638400e+04
  %627 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 3
  store float %626, ptr %627, align 4, !tbaa !25
  %628 = load ptr, ptr %38, align 8, !tbaa !5
  %629 = getelementptr inbounds i8, ptr %628, i64 2
  store ptr %629, ptr %38, align 8, !tbaa !5
  br label %669

630:                                              ; preds = %606
  %631 = load i16, ptr %39, align 2, !tbaa !13
  %632 = zext i16 %631 to i32
  %633 = and i32 %632, 128
  %634 = icmp ne i32 %633, 0
  br i1 %634, label %635, label %668

635:                                              ; preds = %630
  %636 = load ptr, ptr %38, align 8, !tbaa !5
  %637 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %636)
  %638 = sext i16 %637 to i32
  %639 = sitofp i32 %638 to float
  %640 = fdiv float %639, 1.638400e+04
  %641 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 0
  store float %640, ptr %641, align 16, !tbaa !25
  %642 = load ptr, ptr %38, align 8, !tbaa !5
  %643 = getelementptr inbounds i8, ptr %642, i64 2
  store ptr %643, ptr %38, align 8, !tbaa !5
  %644 = load ptr, ptr %38, align 8, !tbaa !5
  %645 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %644)
  %646 = sext i16 %645 to i32
  %647 = sitofp i32 %646 to float
  %648 = fdiv float %647, 1.638400e+04
  %649 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 1
  store float %648, ptr %649, align 4, !tbaa !25
  %650 = load ptr, ptr %38, align 8, !tbaa !5
  %651 = getelementptr inbounds i8, ptr %650, i64 2
  store ptr %651, ptr %38, align 8, !tbaa !5
  %652 = load ptr, ptr %38, align 8, !tbaa !5
  %653 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %652)
  %654 = sext i16 %653 to i32
  %655 = sitofp i32 %654 to float
  %656 = fdiv float %655, 1.638400e+04
  %657 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 2
  store float %656, ptr %657, align 8, !tbaa !25
  %658 = load ptr, ptr %38, align 8, !tbaa !5
  %659 = getelementptr inbounds i8, ptr %658, i64 2
  store ptr %659, ptr %38, align 8, !tbaa !5
  %660 = load ptr, ptr %38, align 8, !tbaa !5
  %661 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %660)
  %662 = sext i16 %661 to i32
  %663 = sitofp i32 %662 to float
  %664 = fdiv float %663, 1.638400e+04
  %665 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 3
  store float %664, ptr %665, align 4, !tbaa !25
  %666 = load ptr, ptr %38, align 8, !tbaa !5
  %667 = getelementptr inbounds i8, ptr %666, i64 2
  store ptr %667, ptr %38, align 8, !tbaa !5
  br label %668

668:                                              ; preds = %635, %630
  br label %669

669:                                              ; preds = %668, %611
  br label %670

670:                                              ; preds = %669, %594
  %671 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 0
  %672 = load float, ptr %671, align 16, !tbaa !25
  %673 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 0
  %674 = load float, ptr %673, align 16, !tbaa !25
  %675 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 1
  %676 = load float, ptr %675, align 4, !tbaa !25
  %677 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 1
  %678 = load float, ptr %677, align 4, !tbaa !25
  %679 = fmul float %676, %678
  %680 = call float @llvm.fmuladd.f32(float %672, float %674, float %679)
  %681 = call noundef float @_ZSt4sqrtf(float noundef %680)
  store float %681, ptr %46, align 4, !tbaa !25
  %682 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 2
  %683 = load float, ptr %682, align 8, !tbaa !25
  %684 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 2
  %685 = load float, ptr %684, align 8, !tbaa !25
  %686 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 3
  %687 = load float, ptr %686, align 4, !tbaa !25
  %688 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 3
  %689 = load float, ptr %688, align 4, !tbaa !25
  %690 = fmul float %687, %689
  %691 = call float @llvm.fmuladd.f32(float %683, float %685, float %690)
  %692 = call noundef float @_ZSt4sqrtf(float noundef %691)
  store float %692, ptr %47, align 4, !tbaa !25
  %693 = load ptr, ptr %5, align 8, !tbaa !5
  %694 = load i16, ptr %40, align 2, !tbaa !13
  %695 = zext i16 %694 to i32
  %696 = call i32 @stbtt_GetGlyphShape(ptr noundef %693, i32 noundef %695, ptr noundef %43)
  store i32 %696, ptr %41, align 4, !tbaa !9
  %697 = load i32, ptr %41, align 4, !tbaa !9
  %698 = icmp sgt i32 %697, 0
  br i1 %698, label %699, label %852

699:                                              ; preds = %670
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %700

700:                                              ; preds = %801, %699
  %701 = load i32, ptr %42, align 4, !tbaa !9
  %702 = load i32, ptr %41, align 4, !tbaa !9
  %703 = icmp slt i32 %701, %702
  br i1 %703, label %704, label %804

704:                                              ; preds = %700
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %705 = load ptr, ptr %43, align 8, !tbaa !5
  %706 = load i32, ptr %42, align 4, !tbaa !9
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds %struct.stbtt_vertex, ptr %705, i64 %707
  store ptr %708, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %49) #8
  call void @llvm.lifetime.start.p0(i64 2, ptr %50) #8
  %709 = load ptr, ptr %48, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.stbtt_vertex, ptr %709, i32 0, i32 0
  %711 = load i16, ptr %710, align 2, !tbaa !20
  store i16 %711, ptr %49, align 2, !tbaa !13
  %712 = load ptr, ptr %48, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.stbtt_vertex, ptr %712, i32 0, i32 1
  %714 = load i16, ptr %713, align 2, !tbaa !22
  store i16 %714, ptr %50, align 2, !tbaa !13
  %715 = load float, ptr %46, align 4, !tbaa !25
  %716 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 0
  %717 = load float, ptr %716, align 16, !tbaa !25
  %718 = load i16, ptr %49, align 2, !tbaa !13
  %719 = sext i16 %718 to i32
  %720 = sitofp i32 %719 to float
  %721 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 2
  %722 = load float, ptr %721, align 8, !tbaa !25
  %723 = load i16, ptr %50, align 2, !tbaa !13
  %724 = sext i16 %723 to i32
  %725 = sitofp i32 %724 to float
  %726 = fmul float %722, %725
  %727 = call float @llvm.fmuladd.f32(float %717, float %720, float %726)
  %728 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 4
  %729 = load float, ptr %728, align 16, !tbaa !25
  %730 = fadd float %727, %729
  %731 = fmul float %715, %730
  %732 = fptosi float %731 to i16
  %733 = load ptr, ptr %48, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.stbtt_vertex, ptr %733, i32 0, i32 0
  store i16 %732, ptr %734, align 2, !tbaa !20
  %735 = load float, ptr %47, align 4, !tbaa !25
  %736 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 1
  %737 = load float, ptr %736, align 4, !tbaa !25
  %738 = load i16, ptr %49, align 2, !tbaa !13
  %739 = sext i16 %738 to i32
  %740 = sitofp i32 %739 to float
  %741 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 3
  %742 = load float, ptr %741, align 4, !tbaa !25
  %743 = load i16, ptr %50, align 2, !tbaa !13
  %744 = sext i16 %743 to i32
  %745 = sitofp i32 %744 to float
  %746 = fmul float %742, %745
  %747 = call float @llvm.fmuladd.f32(float %737, float %740, float %746)
  %748 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 5
  %749 = load float, ptr %748, align 4, !tbaa !25
  %750 = fadd float %747, %749
  %751 = fmul float %735, %750
  %752 = fptosi float %751 to i16
  %753 = load ptr, ptr %48, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.stbtt_vertex, ptr %753, i32 0, i32 1
  store i16 %752, ptr %754, align 2, !tbaa !22
  %755 = load ptr, ptr %48, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.stbtt_vertex, ptr %755, i32 0, i32 2
  %757 = load i16, ptr %756, align 2, !tbaa !27
  store i16 %757, ptr %49, align 2, !tbaa !13
  %758 = load ptr, ptr %48, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.stbtt_vertex, ptr %758, i32 0, i32 3
  %760 = load i16, ptr %759, align 2, !tbaa !28
  store i16 %760, ptr %50, align 2, !tbaa !13
  %761 = load float, ptr %46, align 4, !tbaa !25
  %762 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 0
  %763 = load float, ptr %762, align 16, !tbaa !25
  %764 = load i16, ptr %49, align 2, !tbaa !13
  %765 = sext i16 %764 to i32
  %766 = sitofp i32 %765 to float
  %767 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 2
  %768 = load float, ptr %767, align 8, !tbaa !25
  %769 = load i16, ptr %50, align 2, !tbaa !13
  %770 = sext i16 %769 to i32
  %771 = sitofp i32 %770 to float
  %772 = fmul float %768, %771
  %773 = call float @llvm.fmuladd.f32(float %763, float %766, float %772)
  %774 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 4
  %775 = load float, ptr %774, align 16, !tbaa !25
  %776 = fadd float %773, %775
  %777 = fmul float %761, %776
  %778 = fptosi float %777 to i16
  %779 = load ptr, ptr %48, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.stbtt_vertex, ptr %779, i32 0, i32 2
  store i16 %778, ptr %780, align 2, !tbaa !27
  %781 = load float, ptr %47, align 4, !tbaa !25
  %782 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 1
  %783 = load float, ptr %782, align 4, !tbaa !25
  %784 = load i16, ptr %49, align 2, !tbaa !13
  %785 = sext i16 %784 to i32
  %786 = sitofp i32 %785 to float
  %787 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 3
  %788 = load float, ptr %787, align 4, !tbaa !25
  %789 = load i16, ptr %50, align 2, !tbaa !13
  %790 = sext i16 %789 to i32
  %791 = sitofp i32 %790 to float
  %792 = fmul float %788, %791
  %793 = call float @llvm.fmuladd.f32(float %783, float %786, float %792)
  %794 = getelementptr inbounds [6 x float], ptr %45, i64 0, i64 5
  %795 = load float, ptr %794, align 4, !tbaa !25
  %796 = fadd float %793, %795
  %797 = fmul float %781, %796
  %798 = fptosi float %797 to i16
  %799 = load ptr, ptr %48, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct.stbtt_vertex, ptr %799, i32 0, i32 3
  store i16 %798, ptr %800, align 2, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 2, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  br label %801

801:                                              ; preds = %704
  %802 = load i32, ptr %42, align 4, !tbaa !9
  %803 = add nsw i32 %802, 1
  store i32 %803, ptr %42, align 4, !tbaa !9
  br label %700, !llvm.loop !29

804:                                              ; preds = %700
  %805 = load i32, ptr %12, align 4, !tbaa !9
  %806 = load i32, ptr %41, align 4, !tbaa !9
  %807 = add nsw i32 %805, %806
  %808 = sext i32 %807 to i64
  %809 = mul i64 %808, 10
  %810 = call noalias ptr @malloc(i64 noundef %809) #9
  store ptr %810, ptr %44, align 8, !tbaa !5
  %811 = load ptr, ptr %44, align 8, !tbaa !5
  %812 = icmp ne ptr %811, null
  br i1 %812, label %824, label %813

813:                                              ; preds = %804
  %814 = load ptr, ptr %11, align 8, !tbaa !5
  %815 = icmp ne ptr %814, null
  br i1 %815, label %816, label %818

816:                                              ; preds = %813
  %817 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %817) #8
  br label %818

818:                                              ; preds = %816, %813
  %819 = load ptr, ptr %43, align 8, !tbaa !5
  %820 = icmp ne ptr %819, null
  br i1 %820, label %821, label %823

821:                                              ; preds = %818
  %822 = load ptr, ptr %43, align 8, !tbaa !5
  call void @free(ptr noundef %822) #8
  br label %823

823:                                              ; preds = %821, %818
  store i32 0, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %856

824:                                              ; preds = %804
  %825 = load i32, ptr %12, align 4, !tbaa !9
  %826 = icmp sgt i32 %825, 0
  br i1 %826, label %827, label %833

827:                                              ; preds = %824
  %828 = load ptr, ptr %44, align 8, !tbaa !5
  %829 = load ptr, ptr %11, align 8, !tbaa !5
  %830 = load i32, ptr %12, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = mul i64 %831, 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %828, ptr align 2 %829, i64 %832, i1 false)
  br label %833

833:                                              ; preds = %827, %824
  %834 = load ptr, ptr %44, align 8, !tbaa !5
  %835 = load i32, ptr %12, align 4, !tbaa !9
  %836 = sext i32 %835 to i64
  %837 = getelementptr inbounds %struct.stbtt_vertex, ptr %834, i64 %836
  %838 = load ptr, ptr %43, align 8, !tbaa !5
  %839 = load i32, ptr %41, align 4, !tbaa !9
  %840 = sext i32 %839 to i64
  %841 = mul i64 %840, 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %837, ptr align 2 %838, i64 %841, i1 false)
  %842 = load ptr, ptr %11, align 8, !tbaa !5
  %843 = icmp ne ptr %842, null
  br i1 %843, label %844, label %846

844:                                              ; preds = %833
  %845 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %845) #8
  br label %846

846:                                              ; preds = %844, %833
  %847 = load ptr, ptr %44, align 8, !tbaa !5
  store ptr %847, ptr %11, align 8, !tbaa !5
  %848 = load ptr, ptr %43, align 8, !tbaa !5
  call void @free(ptr noundef %848) #8
  %849 = load i32, ptr %41, align 4, !tbaa !9
  %850 = load i32, ptr %12, align 4, !tbaa !9
  %851 = add nsw i32 %850, %849
  store i32 %851, ptr %12, align 4, !tbaa !9
  br label %852

852:                                              ; preds = %846, %670
  %853 = load i16, ptr %39, align 2, !tbaa !13
  %854 = zext i16 %853 to i32
  %855 = and i32 %854, 32
  store i32 %855, ptr %37, align 4, !tbaa !9
  store i32 0, ptr %14, align 4
  br label %856

856:                                              ; preds = %852, %823
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 2, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %39) #8
  %857 = load i32, ptr %14, align 4
  switch i32 %857, label %860 [
    i32 0, label %858
  ]

858:                                              ; preds = %856
  br label %537, !llvm.loop !30

859:                                              ; preds = %537
  store i32 0, ptr %14, align 4
  br label %860

860:                                              ; preds = %859, %856
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  %861 = load i32, ptr %14, align 4
  switch i32 %861, label %878 [
    i32 0, label %862
  ]

862:                                              ; preds = %860
  br label %873

863:                                              ; preds = %527
  %864 = load i16, ptr %8, align 2, !tbaa !13
  %865 = sext i16 %864 to i32
  %866 = icmp slt i32 %865, 0
  br i1 %866, label %867, label %871

867:                                              ; preds = %863
  br label %868

868:                                              ; preds = %867
  br label %869

869:                                              ; preds = %868
  br label %870

870:                                              ; preds = %869
  br label %872

871:                                              ; preds = %863
  br label %872

872:                                              ; preds = %871, %870
  br label %873

873:                                              ; preds = %872, %862
  br label %874

874:                                              ; preds = %873, %526
  %875 = load ptr, ptr %11, align 8, !tbaa !5
  %876 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %875, ptr %876, align 8, !tbaa !5
  %877 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %877, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %878

878:                                              ; preds = %874, %860, %524, %60
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #8
  %879 = load i32, ptr %4, align 4
  ret i32 %879
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL20stbtt__GetGlyfOffsetPK14stbtt_fontinfoi(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL18stbtt__close_shapeP12stbtt_vertexiiiiiiiii(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #0

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

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

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

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { nounwind allocsize(0) }

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

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


; 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, i8, i8 }

@__const.stbtt_GetGlyphShape.mtx = external hidden unnamed_addr constant [6 x float], align 16

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef signext i16 @_Z7ttSHORTPKh(ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress uwtable
define dso_local i32 @stbtt_GetGlyphShape(ptr noundef %0, i32 noundef %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #2 {
  %4 = alloca ptr, align 8
  %5 = getelementptr inbounds i8, ptr %0, i64 8
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %7 = tail call noundef i32 @_ZL20stbtt__GetGlyfOffsetPK14stbtt_fontinfoi(ptr noundef %0, i32 noundef %1)
  store ptr null, ptr %2, align 8, !tbaa !11
  %8 = icmp slt i32 %7, 0
  br i1 %8, label %.thread, label %9

9:                                                ; preds = %3
  %10 = zext nneg i32 %7 to i64
  %11 = getelementptr inbounds i8, ptr %6, i64 %10
  %12 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %11)
  %13 = icmp sgt i16 %12, 0
  br i1 %13, label %14, label %169

14:                                               ; preds = %9
  %15 = getelementptr inbounds i8, ptr %11, i64 10
  %16 = shl nuw i16 %12, 1
  %17 = zext i16 %16 to i32
  %18 = zext i16 %16 to i64
  %19 = getelementptr inbounds i8, ptr %15, i64 %18
  %20 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %19)
  %21 = getelementptr inbounds i8, ptr %19, i64 -2
  %22 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %21)
  %23 = zext i16 %22 to i32
  %24 = or disjoint i32 %17, 1
  %25 = add nuw nsw i32 %24, %23
  %narrow = mul nuw nsw i32 %25, 10
  %26 = zext nneg i32 %narrow to i64
  %27 = tail call noalias ptr @malloc(i64 noundef %26) #9
  %.not367 = icmp eq ptr %27, null
  br i1 %.not367, label %.thread, label %28

28:                                               ; preds = %14
  %29 = getelementptr inbounds i8, ptr %19, i64 2
  %30 = zext i16 %20 to i64
  %31 = getelementptr inbounds i8, ptr %29, i64 %30
  %32 = zext i16 %16 to i64
  %33 = add nuw nsw i32 %23, 1
  %wide.trip.count410 = zext nneg i32 %33 to i64
  br label %34

34:                                               ; preds = %28, %45
  %indvars.iv408 = phi i64 [ 0, %28 ], [ %indvars.iv.next409, %45 ]
  %.0284387 = phi i8 [ 0, %28 ], [ %.1285, %45 ]
  %.0287386 = phi i8 [ 0, %28 ], [ %.1288, %45 ]
  %.0304384 = phi ptr [ %31, %28 ], [ %.1305, %45 ]
  %35 = icmp eq i8 %.0287386, 0
  br i1 %35, label %36, label %43

36:                                               ; preds = %34
  %37 = getelementptr inbounds i8, ptr %.0304384, i64 1
  %38 = load i8, ptr %.0304384, align 1, !tbaa !12
  %39 = and i8 %38, 8
  %.not366 = icmp eq i8 %39, 0
  br i1 %.not366, label %45, label %40

40:                                               ; preds = %36
  %41 = getelementptr inbounds i8, ptr %.0304384, i64 2
  %42 = load i8, ptr %37, align 1, !tbaa !12
  br label %45

43:                                               ; preds = %34
  %44 = add i8 %.0287386, -1
  br label %45

45:                                               ; preds = %36, %40, %43
  %.1305 = phi ptr [ %41, %40 ], [ %37, %36 ], [ %.0304384, %43 ]
  %.1288 = phi i8 [ %42, %40 ], [ 0, %36 ], [ %44, %43 ]
  %.1285 = phi i8 [ %38, %40 ], [ %38, %36 ], [ %.0284387, %43 ]
  %46 = add nuw nsw i64 %indvars.iv408, %32
  %47 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %46, i32 4
  store i8 %.1285, ptr %47, align 2, !tbaa !13
  %indvars.iv.next409 = add nuw nsw i64 %indvars.iv408, 1
  %exitcond411.not = icmp eq i64 %indvars.iv.next409, %wide.trip.count410
  br i1 %exitcond411.not, label %.preheader376.preheader, label %34, !llvm.loop !16

.preheader376.preheader:                          ; preds = %45
  %invariant.gep = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %32
  br label %.preheader376

.preheader376:                                    ; preds = %.preheader376.preheader, %72
  %indvars.iv412 = phi i64 [ 0, %.preheader376.preheader ], [ %indvars.iv.next413, %72 ]
  %.2306389 = phi ptr [ %.1305, %.preheader376.preheader ], [ %.3307, %72 ]
  %.0328388 = phi i16 [ 0, %.preheader376.preheader ], [ %.1329, %72 ]
  %gep = getelementptr inbounds %struct.stbtt_vertex, ptr %invariant.gep, i64 %indvars.iv412
  %48 = getelementptr inbounds i8, ptr %gep, i64 8
  %49 = load i8, ptr %48, align 2, !tbaa !13
  %50 = zext i8 %49 to i32
  %51 = and i32 %50, 2
  %.not363 = icmp eq i32 %51, 0
  br i1 %.not363, label %60, label %52

52:                                               ; preds = %.preheader376
  %53 = getelementptr inbounds i8, ptr %.2306389, i64 1
  %54 = load i8, ptr %.2306389, align 1, !tbaa !12
  %55 = and i32 %50, 16
  %.not365 = icmp eq i32 %55, 0
  %56 = zext i8 %54 to i16
  %57 = sub nsw i16 0, %56
  %58 = select i1 %.not365, i16 %57, i16 %56
  %59 = add i16 %58, %.0328388
  br label %72

60:                                               ; preds = %.preheader376
  %61 = and i32 %50, 16
  %.not364 = icmp eq i32 %61, 0
  br i1 %.not364, label %62, label %72

62:                                               ; preds = %60
  %63 = load i8, ptr %.2306389, align 1, !tbaa !12
  %64 = zext i8 %63 to i16
  %65 = shl nuw i16 %64, 8
  %66 = getelementptr inbounds i8, ptr %.2306389, i64 1
  %67 = load i8, ptr %66, align 1, !tbaa !12
  %68 = zext i8 %67 to i16
  %69 = or disjoint i16 %65, %68
  %70 = add i16 %69, %.0328388
  %71 = getelementptr inbounds i8, ptr %.2306389, i64 2
  br label %72

72:                                               ; preds = %60, %62, %52
  %.1329 = phi i16 [ %59, %52 ], [ %.0328388, %60 ], [ %70, %62 ]
  %.3307 = phi ptr [ %53, %52 ], [ %.2306389, %60 ], [ %71, %62 ]
  store i16 %.1329, ptr %gep, align 2, !tbaa !18
  %indvars.iv.next413 = add nuw nsw i64 %indvars.iv412, 1
  %exitcond415.not = icmp eq i64 %indvars.iv.next413, %wide.trip.count410
  br i1 %exitcond415.not, label %.preheader375.preheader, label %.preheader376, !llvm.loop !19

.preheader375.preheader:                          ; preds = %72
  %invariant.gep421 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %32
  br label %.preheader375

.preheader375:                                    ; preds = %.preheader375.preheader, %97
  %indvars.iv416 = phi i64 [ 0, %.preheader375.preheader ], [ %indvars.iv.next417, %97 ]
  %.4308392 = phi ptr [ %.3307, %.preheader375.preheader ], [ %.5309, %97 ]
  %.0326391 = phi i16 [ 0, %.preheader375.preheader ], [ %.1327, %97 ]
  %gep422 = getelementptr inbounds %struct.stbtt_vertex, ptr %invariant.gep421, i64 %indvars.iv416
  %73 = getelementptr inbounds i8, ptr %gep422, i64 8
  %74 = load i8, ptr %73, align 2, !tbaa !13
  %75 = zext i8 %74 to i32
  %76 = and i32 %75, 4
  %.not360 = icmp eq i32 %76, 0
  br i1 %.not360, label %85, label %77

77:                                               ; preds = %.preheader375
  %78 = getelementptr inbounds i8, ptr %.4308392, i64 1
  %79 = load i8, ptr %.4308392, align 1, !tbaa !12
  %80 = and i32 %75, 32
  %.not362 = icmp eq i32 %80, 0
  %81 = zext i8 %79 to i16
  %82 = sub nsw i16 0, %81
  %83 = select i1 %.not362, i16 %82, i16 %81
  %84 = add i16 %83, %.0326391
  br label %97

85:                                               ; preds = %.preheader375
  %86 = and i32 %75, 32
  %.not361 = icmp eq i32 %86, 0
  br i1 %.not361, label %87, label %97

87:                                               ; preds = %85
  %88 = load i8, ptr %.4308392, align 1, !tbaa !12
  %89 = zext i8 %88 to i16
  %90 = shl nuw i16 %89, 8
  %91 = getelementptr inbounds i8, ptr %.4308392, i64 1
  %92 = load i8, ptr %91, align 1, !tbaa !12
  %93 = zext i8 %92 to i16
  %94 = or disjoint i16 %90, %93
  %95 = add i16 %94, %.0326391
  %96 = getelementptr inbounds i8, ptr %.4308392, i64 2
  br label %97

97:                                               ; preds = %85, %87, %77
  %.1327 = phi i16 [ %84, %77 ], [ %.0326391, %85 ], [ %95, %87 ]
  %.5309 = phi ptr [ %78, %77 ], [ %.4308392, %85 ], [ %96, %87 ]
  %98 = getelementptr inbounds i8, ptr %gep422, i64 2
  store i16 %.1327, ptr %98, align 2, !tbaa !20
  %indvars.iv.next417 = add nuw nsw i64 %indvars.iv416, 1
  %exitcond419.not = icmp eq i64 %indvars.iv.next417, %wide.trip.count410
  br i1 %exitcond419.not, label %.preheader, label %.preheader375, !llvm.loop !21

.preheader:                                       ; preds = %97, %165
  %.0276405 = phi i32 [ %.4280, %165 ], [ 0, %97 ]
  %.3292404 = phi i32 [ %166, %165 ], [ 0, %97 ]
  %.0300403 = phi i32 [ %.1301, %165 ], [ 0, %97 ]
  %.0302402 = phi i32 [ %.1303, %165 ], [ 0, %97 ]
  %.0310401 = phi i32 [ %.2312, %165 ], [ 0, %97 ]
  %.0313400 = phi i32 [ %.2315, %165 ], [ 0, %97 ]
  %.0316399 = phi i32 [ %.2318, %165 ], [ 0, %97 ]
  %.0319398 = phi i32 [ %.2321, %165 ], [ 0, %97 ]
  %.0322397 = phi i32 [ %.1323, %165 ], [ 0, %97 ]
  %.0324396 = phi i32 [ %.1325, %165 ], [ 0, %97 ]
  %.0330395 = phi i32 [ %.1331, %165 ], [ 0, %97 ]
  %.0332394 = phi i32 [ %.1333, %165 ], [ 0, %97 ]
  %99 = add nsw i32 %.3292404, %17
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %100
  %102 = getelementptr inbounds i8, ptr %101, i64 8
  %103 = load i8, ptr %102, align 2, !tbaa !13
  %104 = load i16, ptr %101, align 2, !tbaa !18
  %105 = sext i16 %104 to i32
  %106 = getelementptr inbounds i8, ptr %101, i64 2
  %107 = load i16, ptr %106, align 2, !tbaa !20
  %108 = sext i16 %107 to i32
  %109 = icmp eq i32 %.0302402, %.3292404
  br i1 %109, label %110, label %148

110:                                              ; preds = %.preheader
  %.not357 = icmp eq i32 %.3292404, 0
  br i1 %.not357, label %113, label %111

111:                                              ; preds = %110
  %112 = tail call noundef i32 @_ZL18stbtt__close_shapeP12stbtt_vertexiiiiiiiii(ptr noundef nonnull %27, i32 noundef %.0276405, i32 noundef %.0332394, i32 noundef %.0330395, i32 noundef %.0319398, i32 noundef %.0316399, i32 noundef %.0313400, i32 noundef %.0310401, i32 noundef %.0324396, i32 noundef %.0322397)
  br label %113

113:                                              ; preds = %111, %110
  %.1277 = phi i32 [ %112, %111 ], [ %.0276405, %110 ]
  %114 = and i8 %103, 1
  %.not358 = icmp eq i8 %114, 0
  %115 = xor i8 %114, 1
  %116 = zext nneg i8 %115 to i32
  br i1 %.not358, label %117, label %137

117:                                              ; preds = %113
  %118 = getelementptr i8, ptr %101, i64 10
  %119 = getelementptr i8, ptr %101, i64 18
  %120 = load i8, ptr %119, align 2, !tbaa !13
  %121 = and i8 %120, 1
  %.not359 = icmp eq i8 %121, 0
  %122 = load i16, ptr %118, align 2, !tbaa !18
  %123 = sext i16 %122 to i32
  br i1 %.not359, label %124, label %132

124:                                              ; preds = %117
  %125 = add nsw i32 %123, %105
  %126 = ashr i32 %125, 1
  %127 = getelementptr i8, ptr %101, i64 12
  %128 = load i16, ptr %127, align 2, !tbaa !20
  %129 = sext i16 %128 to i32
  %130 = add nsw i32 %129, %108
  %131 = ashr i32 %130, 1
  br label %137

132:                                              ; preds = %117
  %133 = getelementptr i8, ptr %101, i64 12
  %134 = load i16, ptr %133, align 2, !tbaa !20
  %135 = sext i16 %134 to i32
  %136 = add nuw nsw i32 %.3292404, 1
  br label %137

137:                                              ; preds = %113, %124, %132
  %.1320 = phi i32 [ %123, %132 ], [ %126, %124 ], [ %105, %113 ]
  %.1317 = phi i32 [ %135, %132 ], [ %131, %124 ], [ %108, %113 ]
  %.1314 = phi i32 [ %105, %132 ], [ %105, %124 ], [ %.0313400, %113 ]
  %.1311 = phi i32 [ %108, %132 ], [ %108, %124 ], [ %.0310401, %113 ]
  %.4293 = phi i32 [ %136, %132 ], [ %.3292404, %124 ], [ %.3292404, %113 ]
  %138 = add nsw i32 %.1277, 1
  %139 = sext i32 %.1277 to i64
  %140 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %139
  tail call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef nonnull %140, i8 noundef zeroext 1, i32 noundef %.1320, i32 noundef %.1317, i32 noundef 0, i32 noundef 0)
  %141 = shl nsw i32 %.0300403, 1
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i8, ptr %15, i64 %142
  %144 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %143)
  %145 = zext i16 %144 to i32
  %146 = add nuw nsw i32 %145, 1
  %147 = add nsw i32 %.0300403, 1
  br label %165

148:                                              ; preds = %.preheader
  %149 = and i8 %103, 1
  %.not354 = icmp eq i8 %149, 0
  %.not355 = icmp eq i32 %.0332394, 0
  br i1 %.not354, label %150, label %159

150:                                              ; preds = %148
  br i1 %.not355, label %165, label %151

151:                                              ; preds = %150
  %152 = add nsw i32 %.0276405, 1
  %153 = sext i32 %.0276405 to i64
  %154 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %153
  %155 = add nsw i32 %.0324396, %105
  %156 = ashr i32 %155, 1
  %157 = add nsw i32 %.0322397, %108
  %158 = ashr i32 %157, 1
  tail call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef nonnull %154, i8 noundef zeroext 3, i32 noundef %156, i32 noundef %158, i32 noundef %.0324396, i32 noundef %.0322397)
  br label %165

159:                                              ; preds = %148
  %160 = sext i32 %.0276405 to i64
  %161 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %160
  br i1 %.not355, label %163, label %162

162:                                              ; preds = %159
  tail call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef nonnull %161, i8 noundef zeroext 3, i32 noundef %105, i32 noundef %108, i32 noundef %.0324396, i32 noundef %.0322397)
  br label %164

163:                                              ; preds = %159
  tail call void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef nonnull %161, i8 noundef zeroext 2, i32 noundef %105, i32 noundef %108, i32 noundef 0, i32 noundef 0)
  br label %164

164:                                              ; preds = %163, %162
  %.3279 = add nsw i32 %.0276405, 1
  br label %165

165:                                              ; preds = %150, %151, %137, %164
  %.1333 = phi i32 [ 0, %137 ], [ 0, %164 ], [ 1, %151 ], [ 1, %150 ]
  %.1331 = phi i32 [ %116, %137 ], [ %.0330395, %164 ], [ %.0330395, %151 ], [ %.0330395, %150 ]
  %.1325 = phi i32 [ %.0324396, %137 ], [ %.0324396, %164 ], [ %105, %151 ], [ %105, %150 ]
  %.1323 = phi i32 [ %.0322397, %137 ], [ %.0322397, %164 ], [ %108, %151 ], [ %108, %150 ]
  %.2321 = phi i32 [ %.1320, %137 ], [ %.0319398, %164 ], [ %.0319398, %151 ], [ %.0319398, %150 ]
  %.2318 = phi i32 [ %.1317, %137 ], [ %.0316399, %164 ], [ %.0316399, %151 ], [ %.0316399, %150 ]
  %.2315 = phi i32 [ %.1314, %137 ], [ %.0313400, %164 ], [ %.0313400, %151 ], [ %.0313400, %150 ]
  %.2312 = phi i32 [ %.1311, %137 ], [ %.0310401, %164 ], [ %.0310401, %151 ], [ %.0310401, %150 ]
  %.1303 = phi i32 [ %146, %137 ], [ %.0302402, %164 ], [ %.0302402, %151 ], [ %.0302402, %150 ]
  %.1301 = phi i32 [ %147, %137 ], [ %.0300403, %164 ], [ %.0300403, %151 ], [ %.0300403, %150 ]
  %.5294 = phi i32 [ %.4293, %137 ], [ %.3292404, %164 ], [ %.3292404, %151 ], [ %.3292404, %150 ]
  %.4280 = phi i32 [ %138, %137 ], [ %.3279, %164 ], [ %152, %151 ], [ %.0276405, %150 ]
  %166 = add nsw i32 %.5294, 1
  %.not353.not = icmp slt i32 %.5294, %23
  br i1 %.not353.not, label %.preheader, label %167, !llvm.loop !22

167:                                              ; preds = %165
  %168 = tail call noundef i32 @_ZL18stbtt__close_shapeP12stbtt_vertexiiiiiiiii(ptr noundef nonnull %27, i32 noundef %.4280, i32 noundef %.1333, i32 noundef %.1331, i32 noundef %.2321, i32 noundef %.2318, i32 noundef %.2315, i32 noundef %.2312, i32 noundef %.1325, i32 noundef %.1323)
  br label %.thread374

169:                                              ; preds = %9
  %170 = icmp eq i16 %12, -1
  br i1 %170, label %171, label %.thread374

171:                                              ; preds = %169
  %172 = getelementptr inbounds i8, ptr %11, i64 10
  %173 = load <2 x float>, ptr @__const.stbtt_GetGlyphShape.mtx, align 16
  %174 = load <2 x float>, ptr getelementptr inbounds (i8, ptr @__const.stbtt_GetGlyphShape.mtx, i64 8), align 8
  %175 = load <2 x float>, ptr getelementptr inbounds (i8, ptr @__const.stbtt_GetGlyphShape.mtx, i64 16), align 16
  br label %176

176:                                              ; preds = %171, %465
  %.0271383 = phi ptr [ null, %171 ], [ %.1272, %465 ]
  %.6382 = phi i32 [ 0, %171 ], [ %.7, %465 ]
  %.0295381 = phi ptr [ %172, %171 ], [ %.2297, %465 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #10
  store ptr null, ptr %4, align 8, !tbaa !11
  %177 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %.0295381)
  %178 = getelementptr inbounds i8, ptr %.0295381, i64 2
  %179 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %178)
  %180 = getelementptr inbounds i8, ptr %.0295381, i64 4
  %181 = zext i16 %177 to i32
  %182 = and i32 %181, 2
  %.not341 = icmp eq i32 %182, 0
  br i1 %.not341, label %197, label %183

183:                                              ; preds = %176
  %184 = and i32 %181, 1
  %.not342 = icmp eq i32 %184, 0
  br i1 %.not342, label %193, label %185

185:                                              ; preds = %183
  %186 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %180)
  %187 = getelementptr inbounds i8, ptr %.0295381, i64 6
  %188 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %187)
  %189 = insertelement <2 x i16> poison, i16 %186, i64 0
  %190 = insertelement <2 x i16> %189, i16 %188, i64 1
  %191 = sitofp <2 x i16> %190 to <2 x float>
  %192 = getelementptr inbounds i8, ptr %.0295381, i64 8
  br label %197

193:                                              ; preds = %183
  %194 = load <2 x i8>, ptr %180, align 1, !tbaa !12
  %195 = sitofp <2 x i8> %194 to <2 x float>
  %196 = getelementptr inbounds i8, ptr %.0295381, i64 6
  br label %197

197:                                              ; preds = %176, %185, %193
  %.1296 = phi ptr [ %192, %185 ], [ %196, %193 ], [ %180, %176 ]
  %198 = phi <2 x float> [ %191, %185 ], [ %195, %193 ], [ %175, %176 ]
  %199 = shufflevector <2 x float> %198, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %200 = and i32 %181, 8
  %.not343 = icmp eq i32 %200, 0
  br i1 %.not343, label %208, label %201

201:                                              ; preds = %197
  %202 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %.1296)
  %203 = sitofp i16 %202 to float
  %204 = fmul float %203, 0x3F10000000000000
  %205 = getelementptr inbounds i8, ptr %.1296, i64 2
  %206 = insertelement <2 x float> <float poison, float 0.000000e+00>, float %204, i64 0
  %207 = insertelement <2 x float> <float 0.000000e+00, float poison>, float %204, i64 1
  br label %240

208:                                              ; preds = %197
  %209 = and i32 %181, 64
  %.not344 = icmp eq i32 %209, 0
  br i1 %.not344, label %221, label %210

210:                                              ; preds = %208
  %211 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %.1296)
  %212 = sitofp i16 %211 to float
  %213 = fmul float %212, 0x3F10000000000000
  %214 = getelementptr inbounds i8, ptr %.1296, i64 2
  %215 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %214)
  %216 = sitofp i16 %215 to float
  %217 = fmul float %216, 0x3F10000000000000
  %218 = getelementptr inbounds i8, ptr %.1296, i64 4
  %219 = insertelement <2 x float> <float poison, float 0.000000e+00>, float %213, i64 0
  %220 = insertelement <2 x float> <float 0.000000e+00, float poison>, float %217, i64 1
  br label %240

221:                                              ; preds = %208
  %222 = and i32 %181, 128
  %.not345 = icmp eq i32 %222, 0
  br i1 %.not345, label %240, label %223

223:                                              ; preds = %221
  %224 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %.1296)
  %225 = getelementptr inbounds i8, ptr %.1296, i64 2
  %226 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %225)
  %227 = getelementptr inbounds i8, ptr %.1296, i64 4
  %228 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %227)
  %229 = getelementptr inbounds i8, ptr %.1296, i64 6
  %230 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %229)
  %231 = insertelement <2 x i16> poison, i16 %224, i64 0
  %232 = insertelement <2 x i16> %231, i16 %226, i64 1
  %233 = sitofp <2 x i16> %232 to <2 x float>
  %234 = fmul <2 x float> %233, <float 0x3F10000000000000, float 0x3F10000000000000>
  %235 = insertelement <2 x i16> poison, i16 %228, i64 0
  %236 = insertelement <2 x i16> %235, i16 %230, i64 1
  %237 = sitofp <2 x i16> %236 to <2 x float>
  %238 = fmul <2 x float> %237, <float 0x3F10000000000000, float 0x3F10000000000000>
  %239 = getelementptr inbounds i8, ptr %.1296, i64 8
  br label %240

240:                                              ; preds = %210, %223, %221, %201
  %.2297 = phi ptr [ %205, %201 ], [ %218, %210 ], [ %239, %223 ], [ %.1296, %221 ]
  %241 = phi <2 x float> [ %206, %201 ], [ %219, %210 ], [ %234, %223 ], [ %173, %221 ]
  %242 = phi <2 x float> [ %207, %201 ], [ %220, %210 ], [ %238, %223 ], [ %174, %221 ]
  %243 = shufflevector <2 x float> %242, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %244 = shufflevector <2 x float> %241, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %245 = fmul <2 x float> %241, %241
  %246 = extractelement <2 x float> %245, i64 1
  %247 = extractelement <2 x float> %241, i64 0
  %248 = tail call float @llvm.fmuladd.f32(float %247, float %247, float %246)
  %249 = tail call noundef float @_ZSt4sqrtf(float noundef %248)
  %250 = fmul <2 x float> %242, %242
  %251 = extractelement <2 x float> %250, i64 1
  %252 = extractelement <2 x float> %242, i64 0
  %253 = tail call float @llvm.fmuladd.f32(float %252, float %252, float %251)
  %254 = tail call noundef float @_ZSt4sqrtf(float noundef %253)
  %255 = zext i16 %179 to i32
  %256 = call i32 @stbtt_GetGlyphShape(ptr noundef %0, i32 noundef %255, ptr noundef nonnull %4)
  %257 = icmp sgt i32 %256, 0
  br i1 %257, label %.preheader377, label %465

.preheader377:                                    ; preds = %240
  %258 = load ptr, ptr %4, align 8, !tbaa !11
  %wide.trip.count = zext nneg i32 %256 to i64
  %min.iters.check = icmp ult i32 %256, 9
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.preheader377
  %n.mod.vf = and i64 %wide.trip.count, 7
  %259 = icmp eq i64 %n.mod.vf, 0
  %260 = select i1 %259, i64 8, i64 %n.mod.vf
  %n.vec = sub nsw i64 %wide.trip.count, %260
  %broadcast.splat = shufflevector <2 x float> %242, <2 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splat425 = shufflevector <2 x float> %241, <2 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splat427 = shufflevector <2 x float> %198, <2 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splatinsert428 = insertelement <8 x float> poison, float %249, i64 0
  %broadcast.splat429 = shufflevector <8 x float> %broadcast.splatinsert428, <8 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splat431 = shufflevector <2 x float> %242, <2 x float> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat433 = shufflevector <2 x float> %241, <2 x float> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat435 = shufflevector <2 x float> %198, <2 x float> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %broadcast.splatinsert436 = insertelement <8 x float> poison, float %254, i64 0
  %broadcast.splat437 = shufflevector <8 x float> %broadcast.splatinsert436, <8 x float> poison, <8 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %261 = or disjoint i64 %index, 1
  %262 = or disjoint i64 %index, 2
  %263 = or disjoint i64 %index, 3
  %264 = or disjoint i64 %index, 4
  %265 = or disjoint i64 %index, 5
  %266 = or disjoint i64 %index, 6
  %267 = or disjoint i64 %index, 7
  %268 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %index
  %269 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %261
  %270 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %262
  %271 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %263
  %272 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %264
  %273 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %265
  %274 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %266
  %275 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %267
  %276 = load i16, ptr %268, align 2, !tbaa !18
  %277 = load i16, ptr %269, align 2, !tbaa !18
  %278 = load i16, ptr %270, align 2, !tbaa !18
  %279 = load i16, ptr %271, align 2, !tbaa !18
  %280 = load i16, ptr %272, align 2, !tbaa !18
  %281 = load i16, ptr %273, align 2, !tbaa !18
  %282 = load i16, ptr %274, align 2, !tbaa !18
  %283 = load i16, ptr %275, align 2, !tbaa !18
  %284 = insertelement <8 x i16> poison, i16 %276, i64 0
  %285 = insertelement <8 x i16> %284, i16 %277, i64 1
  %286 = insertelement <8 x i16> %285, i16 %278, i64 2
  %287 = insertelement <8 x i16> %286, i16 %279, i64 3
  %288 = insertelement <8 x i16> %287, i16 %280, i64 4
  %289 = insertelement <8 x i16> %288, i16 %281, i64 5
  %290 = insertelement <8 x i16> %289, i16 %282, i64 6
  %291 = insertelement <8 x i16> %290, i16 %283, i64 7
  %292 = getelementptr inbounds i8, ptr %268, i64 2
  %293 = getelementptr inbounds i8, ptr %269, i64 2
  %294 = getelementptr inbounds i8, ptr %270, i64 2
  %295 = getelementptr inbounds i8, ptr %271, i64 2
  %296 = getelementptr inbounds i8, ptr %272, i64 2
  %297 = getelementptr inbounds i8, ptr %273, i64 2
  %298 = getelementptr inbounds i8, ptr %274, i64 2
  %299 = getelementptr inbounds i8, ptr %275, i64 2
  %300 = load i16, ptr %292, align 2, !tbaa !20
  %301 = load i16, ptr %293, align 2, !tbaa !20
  %302 = load i16, ptr %294, align 2, !tbaa !20
  %303 = load i16, ptr %295, align 2, !tbaa !20
  %304 = load i16, ptr %296, align 2, !tbaa !20
  %305 = load i16, ptr %297, align 2, !tbaa !20
  %306 = load i16, ptr %298, align 2, !tbaa !20
  %307 = load i16, ptr %299, align 2, !tbaa !20
  %308 = insertelement <8 x i16> poison, i16 %300, i64 0
  %309 = insertelement <8 x i16> %308, i16 %301, i64 1
  %310 = insertelement <8 x i16> %309, i16 %302, i64 2
  %311 = insertelement <8 x i16> %310, i16 %303, i64 3
  %312 = insertelement <8 x i16> %311, i16 %304, i64 4
  %313 = insertelement <8 x i16> %312, i16 %305, i64 5
  %314 = insertelement <8 x i16> %313, i16 %306, i64 6
  %315 = insertelement <8 x i16> %314, i16 %307, i64 7
  %316 = sitofp <8 x i16> %291 to <8 x float>
  %317 = sitofp <8 x i16> %315 to <8 x float>
  %318 = fmul <8 x float> %broadcast.splat, %317
  %319 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat425, <8 x float> %316, <8 x float> %318)
  %320 = fadd <8 x float> %broadcast.splat427, %319
  %321 = fmul <8 x float> %broadcast.splat429, %320
  %322 = fptosi <8 x float> %321 to <8 x i16>
  %323 = extractelement <8 x i16> %322, i64 4
  store i16 %323, ptr %272, align 2, !tbaa !18
  %324 = extractelement <8 x i16> %322, i64 5
  store i16 %324, ptr %273, align 2, !tbaa !18
  %325 = extractelement <8 x i16> %322, i64 6
  store i16 %325, ptr %274, align 2, !tbaa !18
  %326 = extractelement <8 x i16> %322, i64 7
  store i16 %326, ptr %275, align 2, !tbaa !18
  %327 = fmul <8 x float> %broadcast.splat431, %317
  %328 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat433, <8 x float> %316, <8 x float> %327)
  %329 = fadd <8 x float> %broadcast.splat435, %328
  %330 = fmul <8 x float> %broadcast.splat437, %329
  %331 = fptosi <8 x float> %330 to <8 x i16>
  %332 = extractelement <8 x i16> %331, i64 4
  store i16 %332, ptr %296, align 2, !tbaa !20
  %333 = extractelement <8 x i16> %331, i64 5
  store i16 %333, ptr %297, align 2, !tbaa !20
  %334 = extractelement <8 x i16> %331, i64 6
  store i16 %334, ptr %298, align 2, !tbaa !20
  %335 = extractelement <8 x i16> %331, i64 7
  store i16 %335, ptr %299, align 2, !tbaa !20
  %336 = getelementptr inbounds i8, ptr %268, i64 4
  %337 = getelementptr inbounds i8, ptr %269, i64 4
  %338 = getelementptr inbounds i8, ptr %270, i64 4
  %339 = getelementptr inbounds i8, ptr %271, i64 4
  %340 = getelementptr inbounds i8, ptr %272, i64 4
  %341 = getelementptr inbounds i8, ptr %273, i64 4
  %342 = getelementptr inbounds i8, ptr %274, i64 4
  %343 = getelementptr inbounds i8, ptr %275, i64 4
  %344 = load i16, ptr %336, align 2, !tbaa !23
  %345 = load i16, ptr %337, align 2, !tbaa !23
  %346 = load i16, ptr %338, align 2, !tbaa !23
  %347 = load i16, ptr %339, align 2, !tbaa !23
  %348 = load i16, ptr %340, align 2, !tbaa !23
  %349 = load i16, ptr %341, align 2, !tbaa !23
  %350 = load i16, ptr %342, align 2, !tbaa !23
  %351 = load i16, ptr %343, align 2, !tbaa !23
  %352 = insertelement <8 x i16> poison, i16 %344, i64 0
  %353 = insertelement <8 x i16> %352, i16 %345, i64 1
  %354 = insertelement <8 x i16> %353, i16 %346, i64 2
  %355 = insertelement <8 x i16> %354, i16 %347, i64 3
  %356 = insertelement <8 x i16> %355, i16 %348, i64 4
  %357 = insertelement <8 x i16> %356, i16 %349, i64 5
  %358 = insertelement <8 x i16> %357, i16 %350, i64 6
  %359 = insertelement <8 x i16> %358, i16 %351, i64 7
  %360 = getelementptr inbounds i8, ptr %268, i64 6
  %361 = getelementptr inbounds i8, ptr %269, i64 6
  %362 = getelementptr inbounds i8, ptr %270, i64 6
  %363 = getelementptr inbounds i8, ptr %271, i64 6
  %364 = getelementptr inbounds i8, ptr %272, i64 6
  %365 = getelementptr inbounds i8, ptr %273, i64 6
  %366 = getelementptr inbounds i8, ptr %274, i64 6
  %367 = getelementptr inbounds i8, ptr %275, i64 6
  %368 = load i16, ptr %360, align 2, !tbaa !24
  %369 = load i16, ptr %361, align 2, !tbaa !24
  %370 = load i16, ptr %362, align 2, !tbaa !24
  %371 = load i16, ptr %363, align 2, !tbaa !24
  %372 = load i16, ptr %364, align 2, !tbaa !24
  %373 = load i16, ptr %365, align 2, !tbaa !24
  %374 = load i16, ptr %366, align 2, !tbaa !24
  %375 = load i16, ptr %367, align 2, !tbaa !24
  %376 = insertelement <8 x i16> poison, i16 %368, i64 0
  %377 = insertelement <8 x i16> %376, i16 %369, i64 1
  %378 = insertelement <8 x i16> %377, i16 %370, i64 2
  %379 = insertelement <8 x i16> %378, i16 %371, i64 3
  %380 = insertelement <8 x i16> %379, i16 %372, i64 4
  %381 = insertelement <8 x i16> %380, i16 %373, i64 5
  %382 = insertelement <8 x i16> %381, i16 %374, i64 6
  %383 = insertelement <8 x i16> %382, i16 %375, i64 7
  %384 = sitofp <8 x i16> %359 to <8 x float>
  %385 = sitofp <8 x i16> %383 to <8 x float>
  %386 = fmul <8 x float> %broadcast.splat, %385
  %387 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat425, <8 x float> %384, <8 x float> %386)
  %388 = fadd <8 x float> %broadcast.splat427, %387
  %389 = fmul <8 x float> %broadcast.splat429, %388
  %390 = fptosi <8 x float> %389 to <8 x i16>
  %391 = extractelement <8 x i16> %390, i64 0
  %392 = extractelement <8 x i16> %390, i64 1
  %393 = extractelement <8 x i16> %390, i64 2
  %394 = extractelement <8 x i16> %390, i64 3
  %395 = extractelement <8 x i16> %390, i64 4
  store i16 %395, ptr %340, align 2, !tbaa !23
  %396 = extractelement <8 x i16> %390, i64 5
  store i16 %396, ptr %341, align 2, !tbaa !23
  %397 = extractelement <8 x i16> %390, i64 6
  store i16 %397, ptr %342, align 2, !tbaa !23
  %398 = extractelement <8 x i16> %390, i64 7
  store i16 %398, ptr %343, align 2, !tbaa !23
  %399 = fmul <8 x float> %broadcast.splat431, %385
  %400 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat433, <8 x float> %384, <8 x float> %399)
  %401 = fadd <8 x float> %broadcast.splat435, %400
  %402 = fmul <8 x float> %broadcast.splat437, %401
  %403 = fptosi <8 x float> %402 to <8 x i16>
  %404 = extractelement <8 x i16> %403, i64 0
  %405 = shufflevector <8 x i16> %322, <8 x i16> %331, <4 x i32> <i32 0, i32 8, i32 poison, i32 poison>
  %406 = insertelement <4 x i16> %405, i16 %391, i64 2
  %407 = insertelement <4 x i16> %406, i16 %404, i64 3
  store <4 x i16> %407, ptr %268, align 2, !tbaa !25
  %408 = extractelement <8 x i16> %403, i64 1
  %409 = shufflevector <8 x i16> %322, <8 x i16> %331, <4 x i32> <i32 1, i32 9, i32 poison, i32 poison>
  %410 = insertelement <4 x i16> %409, i16 %392, i64 2
  %411 = insertelement <4 x i16> %410, i16 %408, i64 3
  store <4 x i16> %411, ptr %269, align 2, !tbaa !25
  %412 = extractelement <8 x i16> %403, i64 2
  %413 = shufflevector <8 x i16> %322, <8 x i16> %331, <4 x i32> <i32 2, i32 10, i32 poison, i32 poison>
  %414 = insertelement <4 x i16> %413, i16 %393, i64 2
  %415 = insertelement <4 x i16> %414, i16 %412, i64 3
  store <4 x i16> %415, ptr %270, align 2, !tbaa !25
  %416 = extractelement <8 x i16> %403, i64 3
  %417 = shufflevector <8 x i16> %322, <8 x i16> %331, <4 x i32> <i32 3, i32 11, i32 poison, i32 poison>
  %418 = insertelement <4 x i16> %417, i16 %394, i64 2
  %419 = insertelement <4 x i16> %418, i16 %416, i64 3
  store <4 x i16> %419, ptr %271, align 2, !tbaa !25
  %420 = extractelement <8 x i16> %403, i64 4
  store i16 %420, ptr %364, align 2, !tbaa !24
  %421 = extractelement <8 x i16> %403, i64 5
  store i16 %421, ptr %365, align 2, !tbaa !24
  %422 = extractelement <8 x i16> %403, i64 6
  store i16 %422, ptr %366, align 2, !tbaa !24
  %423 = extractelement <8 x i16> %403, i64 7
  store i16 %423, ptr %367, align 2, !tbaa !24
  %index.next = add nuw i64 %index, 8
  %424 = icmp eq i64 %index.next, %n.vec
  br i1 %424, label %scalar.ph.preheader, label %vector.body, !llvm.loop !26

scalar.ph.preheader:                              ; preds = %vector.body, %.preheader377
  %indvars.iv.ph = phi i64 [ 0, %.preheader377 ], [ %n.vec, %vector.body ]
  %425 = insertelement <4 x float> poison, float %249, i64 0
  %426 = insertelement <4 x float> %425, float %254, i64 1
  %427 = shufflevector <4 x float> %426, <4 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %428 = getelementptr inbounds %struct.stbtt_vertex, ptr %258, i64 %indvars.iv
  %429 = load i16, ptr %428, align 2, !tbaa !18
  %430 = getelementptr inbounds i8, ptr %428, i64 2
  %431 = load i16, ptr %430, align 2, !tbaa !20
  %432 = getelementptr inbounds i8, ptr %428, i64 4
  %433 = load i16, ptr %432, align 2, !tbaa !23
  %434 = getelementptr inbounds i8, ptr %428, i64 6
  %435 = load i16, ptr %434, align 2, !tbaa !24
  %436 = insertelement <2 x i16> poison, i16 %429, i64 0
  %437 = insertelement <2 x i16> %436, i16 %433, i64 1
  %438 = sitofp <2 x i16> %437 to <2 x float>
  %439 = shufflevector <2 x float> %438, <2 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  %440 = insertelement <2 x i16> poison, i16 %431, i64 0
  %441 = insertelement <2 x i16> %440, i16 %435, i64 1
  %442 = sitofp <2 x i16> %441 to <2 x float>
  %443 = shufflevector <2 x float> %442, <2 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  %444 = fmul <4 x float> %243, %443
  %445 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %244, <4 x float> %439, <4 x float> %444)
  %446 = fadd <4 x float> %199, %445
  %447 = fmul <4 x float> %427, %446
  %448 = fptosi <4 x float> %447 to <4 x i16>
  store <4 x i16> %448, ptr %428, align 2, !tbaa !25
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %449, label %scalar.ph, !llvm.loop !29

449:                                              ; preds = %scalar.ph
  %450 = add nuw nsw i32 %256, %.6382
  %451 = zext nneg i32 %450 to i64
  %452 = mul nuw nsw i64 %451, 10
  %453 = tail call noalias ptr @malloc(i64 noundef %452) #9
  %.not346 = icmp eq ptr %453, null
  br i1 %.not346, label %454, label %456

454:                                              ; preds = %449
  %.not347 = icmp eq ptr %.0271383, null
  br i1 %.not347, label %467, label %455

455:                                              ; preds = %454
  tail call void @free(ptr noundef nonnull %.0271383) #10
  br label %467

456:                                              ; preds = %449
  %457 = icmp sgt i32 %.6382, 0
  %458 = zext nneg i32 %.6382 to i64
  br i1 %457, label %459, label %._crit_edge

459:                                              ; preds = %456
  %460 = mul nuw nsw i64 %458, 10
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 2 %453, ptr align 2 %.0271383, i64 %460, i1 false)
  br label %._crit_edge

._crit_edge:                                      ; preds = %456, %459
  %461 = getelementptr inbounds %struct.stbtt_vertex, ptr %453, i64 %458
  %462 = mul nuw nsw i64 %wide.trip.count, 10
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 2 %461, ptr nonnull align 2 %258, i64 %462, i1 false)
  %.not349 = icmp eq ptr %.0271383, null
  br i1 %.not349, label %464, label %463

463:                                              ; preds = %._crit_edge
  tail call void @free(ptr noundef nonnull %.0271383) #10
  br label %464

464:                                              ; preds = %463, %._crit_edge
  tail call void @free(ptr noundef nonnull %258) #10
  br label %465

465:                                              ; preds = %240, %464
  %.7 = phi i32 [ %450, %464 ], [ %.6382, %240 ]
  %.1272 = phi ptr [ %453, %464 ], [ %.0271383, %240 ]
  %466 = and i32 %181, 32
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #10
  %.not = icmp eq i32 %466, 0
  br i1 %.not, label %.thread374, label %176, !llvm.loop !30

467:                                              ; preds = %455, %454
  tail call void @free(ptr noundef nonnull %258) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #10
  br label %.thread

.thread374:                                       ; preds = %465, %167, %169
  %.10 = phi i32 [ %168, %167 ], [ 0, %169 ], [ %.7, %465 ]
  %.4275 = phi ptr [ %27, %167 ], [ null, %169 ], [ %.1272, %465 ]
  store ptr %.4275, ptr %2, align 8, !tbaa !11
  br label %.thread

.thread:                                          ; preds = %467, %14, %3, %.thread374
  %.4 = phi i32 [ %.10, %.thread374 ], [ 0, %467 ], [ 0, %3 ], [ 0, %14 ]
  ret i32 %.4
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL20stbtt__GetGlyfOffsetPK14stbtt_fontinfoi(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden noundef i32 @_ZL18stbtt__close_shapeP12stbtt_vertexiiiiiiiii(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZL15stbtt_setvertexP12stbtt_vertexhiiii(ptr noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress 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) #4

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <8 x float> @llvm.fmuladd.v8f32(<8 x float>, <8 x float>, <8 x float>) #8

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #8

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { nounwind allocsize(0) }
attributes #10 = { nounwind }

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

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


; Effective O3 passes: AggressiveInstCombinePass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass