; LLVM IR from erwincoumans/tiny-differentiable-simulator :: src/visualizer/opengl (tiny_font_stash)

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

@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [113 x i8], align 1
@__const.stbtt_GetGlyphShape.mtx = external hidden unnamed_addr constant [6 x float], align 16
@__PRETTY_FUNCTION__.stbtt_GetGlyphShape = external hidden unnamed_addr constant [70 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef) #1

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef signext i16 @_ZL7ttSHORTPKh(ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local i32 @stbtt_GetGlyphShape(ptr noundef %0, i32 noundef %1, ptr noundef %2) #3 {
  %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) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  %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) #9
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %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 %872

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 @_ZL7ttSHORTPKh(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) #9
  store i8 0, ptr %15, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %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 @_ZL8ttUSHORTPKh(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 @_ZL8ttUSHORTPKh(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) #10
  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) #9
  %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) #9
  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) #9
  %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) #9
  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 @_ZL8ttUSHORTPKh(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) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  %525 = load i32, ptr %14, align 4
  switch i32 %525, label %872 [
    i32 0, label %526
  ]

526:                                              ; preds = %524
  br label %868

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 %860

531:                                              ; preds = %527
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  store i32 1, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %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 = %855, %531
  %538 = load i32, ptr %37, align 4, !tbaa !9
  %539 = icmp ne i32 %538, 0
  br i1 %539, label %540, label %856

540:                                              ; preds = %537
  call void @llvm.lifetime.start.p0(i64 2, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 2, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store i32 0, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #9
  store ptr null, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #9
  store ptr null, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #9
  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) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %541 = load ptr, ptr %38, align 8, !tbaa !5
  %542 = call noundef signext i16 @_ZL7ttSHORTPKh(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 @_ZL7ttSHORTPKh(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 @_ZL7ttSHORTPKh(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 @_ZL7ttSHORTPKh(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 %586

585:                                              ; preds = %540
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.10, i32 noundef 1470, ptr noundef @__PRETTY_FUNCTION__.stbtt_GetGlyphShape) #11
  unreachable

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

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

603:                                              ; preds = %586
  %604 = load i16, ptr %39, align 2, !tbaa !13
  %605 = zext i16 %604 to i32
  %606 = and i32 %605, 64
  %607 = icmp ne i32 %606, 0
  br i1 %607, label %608, label %627

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

627:                                              ; preds = %603
  %628 = load i16, ptr %39, align 2, !tbaa !13
  %629 = zext i16 %628 to i32
  %630 = and i32 %629, 128
  %631 = icmp ne i32 %630, 0
  br i1 %631, label %632, label %665

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

665:                                              ; preds = %632, %627
  br label %666

666:                                              ; preds = %665, %608
  br label %667

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

696:                                              ; preds = %667
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %697

697:                                              ; preds = %798, %696
  %698 = load i32, ptr %42, align 4, !tbaa !9
  %699 = load i32, ptr %41, align 4, !tbaa !9
  %700 = icmp slt i32 %698, %699
  br i1 %700, label %701, label %801

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

798:                                              ; preds = %701
  %799 = load i32, ptr %42, align 4, !tbaa !9
  %800 = add nsw i32 %799, 1
  store i32 %800, ptr %42, align 4, !tbaa !9
  br label %697, !llvm.loop !29

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

810:                                              ; preds = %801
  %811 = load ptr, ptr %11, align 8, !tbaa !5
  %812 = icmp ne ptr %811, null
  br i1 %812, label %813, label %815

813:                                              ; preds = %810
  %814 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %814) #9
  br label %815

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

818:                                              ; preds = %815
  %819 = load ptr, ptr %43, align 8, !tbaa !5
  call void @free(ptr noundef %819) #9
  br label %820

820:                                              ; preds = %818, %815
  store i32 0, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %853

821:                                              ; preds = %801
  %822 = load i32, ptr %12, align 4, !tbaa !9
  %823 = icmp sgt i32 %822, 0
  br i1 %823, label %824, label %830

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

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

841:                                              ; preds = %830
  %842 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %842) #9
  br label %843

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

849:                                              ; preds = %843, %667
  %850 = load i16, ptr %39, align 2, !tbaa !13
  %851 = zext i16 %850 to i32
  %852 = and i32 %851, 32
  store i32 %852, ptr %37, align 4, !tbaa !9
  store i32 0, ptr %14, align 4
  br label %853

853:                                              ; preds = %849, %820
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 2, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 2, ptr %39) #9
  %854 = load i32, ptr %14, align 4
  switch i32 %854, label %857 [
    i32 0, label %855
  ]

855:                                              ; preds = %853
  br label %537, !llvm.loop !30

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

857:                                              ; preds = %856, %853
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  %858 = load i32, ptr %14, align 4
  switch i32 %858, label %872 [
    i32 0, label %859
  ]

859:                                              ; preds = %857
  br label %867

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

864:                                              ; preds = %860
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.10, i32 noundef 1542, ptr noundef @__PRETTY_FUNCTION__.stbtt_GetGlyphShape) #11
  unreachable

865:                                              ; preds = %860
  br label %866

866:                                              ; preds = %865
  br label %867

867:                                              ; preds = %866, %859
  br label %868

868:                                              ; preds = %867, %526
  %869 = load ptr, ptr %11, align 8, !tbaa !5
  %870 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %869, ptr %870, align 8, !tbaa !5
  %871 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %871, ptr %4, align 4
  store i32 1, ptr %14, align 4
  br label %872

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"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 }

@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [113 x i8], align 1
@__const.stbtt_GetGlyphShape.mtx = external hidden unnamed_addr constant [6 x float], align 16
@__PRETTY_FUNCTION__.stbtt_GetGlyphShape = external hidden unnamed_addr constant [70 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef signext i16 @_ZL7ttSHORTPKh(ptr noundef) local_unnamed_addr #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 #3 {
  %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 @_ZL7ttSHORTPKh(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 @_ZL8ttUSHORTPKh(ptr noundef nonnull %19)
  %21 = getelementptr inbounds i8, ptr %19, i64 -2
  %22 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(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) #10
  %.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.count413 = zext nneg i32 %33 to i64
  br label %34

34:                                               ; preds = %28, %45
  %indvars.iv411 = phi i64 [ 0, %28 ], [ %indvars.iv.next412, %45 ]
  %.0284389 = phi i8 [ 0, %28 ], [ %.1285, %45 ]
  %.0287388 = phi i8 [ 0, %28 ], [ %.1288, %45 ]
  %.0304386 = phi ptr [ %31, %28 ], [ %.1305, %45 ]
  %35 = icmp eq i8 %.0287388, 0
  br i1 %35, label %36, label %43

36:                                               ; preds = %34
  %37 = getelementptr inbounds i8, ptr %.0304386, i64 1
  %38 = load i8, ptr %.0304386, 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 %.0304386, i64 2
  %42 = load i8, ptr %37, align 1, !tbaa !12
  br label %45

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

45:                                               ; preds = %36, %40, %43
  %.1305 = phi ptr [ %41, %40 ], [ %37, %36 ], [ %.0304386, %43 ]
  %.1288 = phi i8 [ %42, %40 ], [ 0, %36 ], [ %44, %43 ]
  %.1285 = phi i8 [ %38, %40 ], [ %38, %36 ], [ %.0284389, %43 ]
  %46 = add nuw nsw i64 %indvars.iv411, %32
  %47 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %46, i32 4
  store i8 %.1285, ptr %47, align 2, !tbaa !13
  %indvars.iv.next412 = add nuw nsw i64 %indvars.iv411, 1
  %exitcond414.not = icmp eq i64 %indvars.iv.next412, %wide.trip.count413
  br i1 %exitcond414.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.iv415 = phi i64 [ 0, %.preheader376.preheader ], [ %indvars.iv.next416, %72 ]
  %.2306391 = phi ptr [ %.1305, %.preheader376.preheader ], [ %.3307, %72 ]
  %.0328390 = phi i16 [ 0, %.preheader376.preheader ], [ %.1329, %72 ]
  %gep = getelementptr inbounds %struct.stbtt_vertex, ptr %invariant.gep, i64 %indvars.iv415
  %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 %.2306391, i64 1
  %54 = load i8, ptr %.2306391, 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, %.0328390
  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 %.2306391, align 1, !tbaa !12
  %64 = zext i8 %63 to i16
  %65 = shl nuw i16 %64, 8
  %66 = getelementptr inbounds i8, ptr %.2306391, 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, %.0328390
  %71 = getelementptr inbounds i8, ptr %.2306391, i64 2
  br label %72

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

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

.preheader375:                                    ; preds = %.preheader375.preheader, %97
  %indvars.iv419 = phi i64 [ 0, %.preheader375.preheader ], [ %indvars.iv.next420, %97 ]
  %.4308394 = phi ptr [ %.3307, %.preheader375.preheader ], [ %.5309, %97 ]
  %.0326393 = phi i16 [ 0, %.preheader375.preheader ], [ %.1327, %97 ]
  %gep426 = getelementptr inbounds %struct.stbtt_vertex, ptr %invariant.gep425, i64 %indvars.iv419
  %73 = getelementptr inbounds i8, ptr %gep426, 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 %.4308394, i64 1
  %79 = load i8, ptr %.4308394, 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, %.0326393
  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 %.4308394, align 1, !tbaa !12
  %89 = zext i8 %88 to i16
  %90 = shl nuw i16 %89, 8
  %91 = getelementptr inbounds i8, ptr %.4308394, 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, %.0326393
  %96 = getelementptr inbounds i8, ptr %.4308394, i64 2
  br label %97

97:                                               ; preds = %85, %87, %77
  %.1327 = phi i16 [ %84, %77 ], [ %.0326393, %85 ], [ %95, %87 ]
  %.5309 = phi ptr [ %78, %77 ], [ %.4308394, %85 ], [ %96, %87 ]
  %98 = getelementptr inbounds i8, ptr %gep426, i64 2
  store i16 %.1327, ptr %98, align 2, !tbaa !20
  %indvars.iv.next420 = add nuw nsw i64 %indvars.iv419, 1
  %exitcond422.not = icmp eq i64 %indvars.iv.next420, %wide.trip.count413
  br i1 %exitcond422.not, label %.preheader, label %.preheader375, !llvm.loop !21

.preheader:                                       ; preds = %97, %165
  %.0276407 = phi i32 [ %.4280, %165 ], [ 0, %97 ]
  %.3292406 = phi i32 [ %166, %165 ], [ 0, %97 ]
  %.0300405 = phi i32 [ %.1301, %165 ], [ 0, %97 ]
  %.0302404 = phi i32 [ %.1303, %165 ], [ 0, %97 ]
  %.0310403 = phi i32 [ %.2312, %165 ], [ 0, %97 ]
  %.0313402 = phi i32 [ %.2315, %165 ], [ 0, %97 ]
  %.0316401 = phi i32 [ %.2318, %165 ], [ 0, %97 ]
  %.0319400 = phi i32 [ %.2321, %165 ], [ 0, %97 ]
  %.0322399 = phi i32 [ %.1323, %165 ], [ 0, %97 ]
  %.0324398 = phi i32 [ %.1325, %165 ], [ 0, %97 ]
  %.0330397 = phi i32 [ %.1331, %165 ], [ 0, %97 ]
  %.0332396 = phi i32 [ %.1333, %165 ], [ 0, %97 ]
  %99 = add nsw i32 %.3292406, %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 %.0302404, %.3292406
  br i1 %109, label %110, label %148

110:                                              ; preds = %.preheader
  %.not357 = icmp eq i32 %.3292406, 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 %.0276407, i32 noundef %.0332396, i32 noundef %.0330397, i32 noundef %.0319400, i32 noundef %.0316401, i32 noundef %.0313402, i32 noundef %.0310403, i32 noundef %.0324398, i32 noundef %.0322399)
  br label %113

113:                                              ; preds = %111, %110
  %.1277 = phi i32 [ %112, %111 ], [ %.0276407, %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 %.3292406, 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 ], [ %.0313402, %113 ]
  %.1311 = phi i32 [ %108, %132 ], [ %108, %124 ], [ %.0310403, %113 ]
  %.4293 = phi i32 [ %136, %132 ], [ %.3292406, %124 ], [ %.3292406, %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 %.0300405, 1
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i8, ptr %15, i64 %142
  %144 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %143)
  %145 = zext i16 %144 to i32
  %146 = add nuw nsw i32 %145, 1
  %147 = add nsw i32 %.0300405, 1
  br label %165

148:                                              ; preds = %.preheader
  %149 = and i8 %103, 1
  %.not354 = icmp eq i8 %149, 0
  %.not355 = icmp eq i32 %.0332396, 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 %.0276407, 1
  %153 = sext i32 %.0276407 to i64
  %154 = getelementptr inbounds %struct.stbtt_vertex, ptr %27, i64 %153
  %155 = add nsw i32 %.0324398, %105
  %156 = ashr i32 %155, 1
  %157 = add nsw i32 %.0322399, %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 %.0324398, i32 noundef %.0322399)
  br label %165

159:                                              ; preds = %148
  %160 = sext i32 %.0276407 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 %.0324398, i32 noundef %.0322399)
  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 %.0276407, 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 ], [ %.0330397, %164 ], [ %.0330397, %151 ], [ %.0330397, %150 ]
  %.1325 = phi i32 [ %.0324398, %137 ], [ %.0324398, %164 ], [ %105, %151 ], [ %105, %150 ]
  %.1323 = phi i32 [ %.0322399, %137 ], [ %.0322399, %164 ], [ %108, %151 ], [ %108, %150 ]
  %.2321 = phi i32 [ %.1320, %137 ], [ %.0319400, %164 ], [ %.0319400, %151 ], [ %.0319400, %150 ]
  %.2318 = phi i32 [ %.1317, %137 ], [ %.0316401, %164 ], [ %.0316401, %151 ], [ %.0316401, %150 ]
  %.2315 = phi i32 [ %.1314, %137 ], [ %.0313402, %164 ], [ %.0313402, %151 ], [ %.0313402, %150 ]
  %.2312 = phi i32 [ %.1311, %137 ], [ %.0310403, %164 ], [ %.0310403, %151 ], [ %.0310403, %150 ]
  %.1303 = phi i32 [ %146, %137 ], [ %.0302404, %164 ], [ %.0302404, %151 ], [ %.0302404, %150 ]
  %.1301 = phi i32 [ %147, %137 ], [ %.0300405, %164 ], [ %.0300405, %151 ], [ %.0300405, %150 ]
  %.5294 = phi i32 [ %.4293, %137 ], [ %.3292406, %164 ], [ %.3292406, %151 ], [ %.3292406, %150 ]
  %.4280 = phi i32 [ %138, %137 ], [ %.3279, %164 ], [ %152, %151 ], [ %.0276407, %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 %467

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
  br label %175

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

182:                                              ; preds = %175
  %183 = and i32 %180, 1
  %.not342 = icmp eq i32 %183, 0
  br i1 %.not342, label %191, label %184

184:                                              ; preds = %182
  %185 = tail call noundef signext i16 @_ZL7ttSHORTPKh(ptr noundef nonnull %179)
  %186 = getelementptr inbounds i8, ptr %.0295383, i64 6
  %187 = tail call noundef signext i16 @_ZL7ttSHORTPKh(ptr noundef nonnull %186)
  %188 = insertelement <2 x i16> poison, i16 %185, i64 0
  %189 = insertelement <2 x i16> %188, i16 %187, i64 1
  %190 = sitofp <2 x i16> %189 to <2 x float>
  br label %195

191:                                              ; preds = %182
  %192 = load <2 x i8>, ptr %179, align 1, !tbaa !12
  %193 = sitofp <2 x i8> %192 to <2 x float>
  br label %195

194:                                              ; preds = %175
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, i32 noundef 1470, ptr noundef nonnull @__PRETTY_FUNCTION__.stbtt_GetGlyphShape) #12
  unreachable

195:                                              ; preds = %184, %191
  %.sink = phi i64 [ 8, %184 ], [ 6, %191 ]
  %196 = phi <2 x float> [ %190, %184 ], [ %193, %191 ]
  %197 = shufflevector <2 x float> %196, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %198 = getelementptr inbounds i8, ptr %.0295383, i64 %.sink
  %199 = and i32 %180, 8
  %.not343 = icmp eq i32 %199, 0
  br i1 %.not343, label %207, label %200

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

207:                                              ; preds = %195
  %208 = and i32 %180, 64
  %.not344 = icmp eq i32 %208, 0
  br i1 %.not344, label %220, label %209

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

220:                                              ; preds = %207
  %221 = and i32 %180, 128
  %.not345 = icmp eq i32 %221, 0
  br i1 %.not345, label %239, label %222

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

239:                                              ; preds = %209, %222, %220, %200
  %.2297 = phi ptr [ %204, %200 ], [ %217, %209 ], [ %238, %222 ], [ %198, %220 ]
  %240 = phi <2 x float> [ %205, %200 ], [ %218, %209 ], [ %233, %222 ], [ %173, %220 ]
  %241 = phi <2 x float> [ %206, %200 ], [ %219, %209 ], [ %237, %222 ], [ %174, %220 ]
  %242 = shufflevector <2 x float> %241, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %243 = shufflevector <2 x float> %240, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %244 = fmul <2 x float> %240, %240
  %245 = extractelement <2 x float> %244, i64 1
  %246 = extractelement <2 x float> %240, i64 0
  %247 = tail call float @llvm.fmuladd.f32(float %246, float %246, float %245)
  %248 = tail call noundef float @_ZSt4sqrtf(float noundef %247)
  %249 = fmul <2 x float> %241, %241
  %250 = extractelement <2 x float> %249, i64 1
  %251 = extractelement <2 x float> %241, i64 0
  %252 = tail call float @llvm.fmuladd.f32(float %251, float %251, float %250)
  %253 = tail call noundef float @_ZSt4sqrtf(float noundef %252)
  %254 = zext i16 %178 to i32
  %255 = call i32 @stbtt_GetGlyphShape(ptr noundef %0, i32 noundef %254, ptr noundef nonnull %4)
  %256 = icmp sgt i32 %255, 0
  br i1 %256, label %.preheader377, label %464

.preheader377:                                    ; preds = %239
  %257 = load ptr, ptr %4, align 8, !tbaa !11
  %wide.trip.count = zext nneg i32 %255 to i64
  %min.iters.check = icmp ult i32 %255, 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
  %258 = icmp eq i64 %n.mod.vf, 0
  %259 = select i1 %258, i64 8, i64 %n.mod.vf
  %n.vec = sub nsw i64 %wide.trip.count, %259
  %broadcast.splat = shufflevector <2 x float> %241, <2 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splat430 = shufflevector <2 x float> %240, <2 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splat432 = shufflevector <2 x float> %196, <2 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splatinsert433 = insertelement <8 x float> poison, float %248, i64 0
  %broadcast.splat434 = shufflevector <8 x float> %broadcast.splatinsert433, <8 x float> poison, <8 x i32> zeroinitializer
  %broadcast.splat436 = 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.splat438 = shufflevector <2 x float> %240, <2 x float> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat440 = shufflevector <2 x float> %196, <2 x float> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %broadcast.splatinsert441 = insertelement <8 x float> poison, float %253, i64 0
  %broadcast.splat442 = shufflevector <8 x float> %broadcast.splatinsert441, <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 ]
  %260 = or disjoint i64 %index, 1
  %261 = or disjoint i64 %index, 2
  %262 = or disjoint i64 %index, 3
  %263 = or disjoint i64 %index, 4
  %264 = or disjoint i64 %index, 5
  %265 = or disjoint i64 %index, 6
  %266 = or disjoint i64 %index, 7
  %267 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %index
  %268 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %260
  %269 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %261
  %270 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %262
  %271 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %263
  %272 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %264
  %273 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %265
  %274 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %266
  %275 = load i16, ptr %267, align 2, !tbaa !18
  %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 = insertelement <8 x i16> poison, i16 %275, i64 0
  %284 = insertelement <8 x i16> %283, i16 %276, i64 1
  %285 = insertelement <8 x i16> %284, i16 %277, i64 2
  %286 = insertelement <8 x i16> %285, i16 %278, i64 3
  %287 = insertelement <8 x i16> %286, i16 %279, i64 4
  %288 = insertelement <8 x i16> %287, i16 %280, i64 5
  %289 = insertelement <8 x i16> %288, i16 %281, i64 6
  %290 = insertelement <8 x i16> %289, i16 %282, i64 7
  %291 = getelementptr inbounds i8, ptr %267, i64 2
  %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 = load i16, ptr %291, align 2, !tbaa !20
  %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 = insertelement <8 x i16> poison, i16 %299, i64 0
  %308 = insertelement <8 x i16> %307, i16 %300, i64 1
  %309 = insertelement <8 x i16> %308, i16 %301, i64 2
  %310 = insertelement <8 x i16> %309, i16 %302, i64 3
  %311 = insertelement <8 x i16> %310, i16 %303, i64 4
  %312 = insertelement <8 x i16> %311, i16 %304, i64 5
  %313 = insertelement <8 x i16> %312, i16 %305, i64 6
  %314 = insertelement <8 x i16> %313, i16 %306, i64 7
  %315 = sitofp <8 x i16> %290 to <8 x float>
  %316 = sitofp <8 x i16> %314 to <8 x float>
  %317 = fmul <8 x float> %broadcast.splat, %316
  %318 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat430, <8 x float> %315, <8 x float> %317)
  %319 = fadd <8 x float> %broadcast.splat432, %318
  %320 = fmul <8 x float> %broadcast.splat434, %319
  %321 = fptosi <8 x float> %320 to <8 x i16>
  %322 = extractelement <8 x i16> %321, i64 4
  store i16 %322, ptr %271, align 2, !tbaa !18
  %323 = extractelement <8 x i16> %321, i64 5
  store i16 %323, ptr %272, align 2, !tbaa !18
  %324 = extractelement <8 x i16> %321, i64 6
  store i16 %324, ptr %273, align 2, !tbaa !18
  %325 = extractelement <8 x i16> %321, i64 7
  store i16 %325, ptr %274, align 2, !tbaa !18
  %326 = fmul <8 x float> %broadcast.splat436, %316
  %327 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat438, <8 x float> %315, <8 x float> %326)
  %328 = fadd <8 x float> %broadcast.splat440, %327
  %329 = fmul <8 x float> %broadcast.splat442, %328
  %330 = fptosi <8 x float> %329 to <8 x i16>
  %331 = extractelement <8 x i16> %330, i64 4
  store i16 %331, ptr %295, align 2, !tbaa !20
  %332 = extractelement <8 x i16> %330, i64 5
  store i16 %332, ptr %296, align 2, !tbaa !20
  %333 = extractelement <8 x i16> %330, i64 6
  store i16 %333, ptr %297, align 2, !tbaa !20
  %334 = extractelement <8 x i16> %330, i64 7
  store i16 %334, ptr %298, align 2, !tbaa !20
  %335 = getelementptr inbounds i8, ptr %267, i64 4
  %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 = load i16, ptr %335, align 2, !tbaa !23
  %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 = insertelement <8 x i16> poison, i16 %343, i64 0
  %352 = insertelement <8 x i16> %351, i16 %344, i64 1
  %353 = insertelement <8 x i16> %352, i16 %345, i64 2
  %354 = insertelement <8 x i16> %353, i16 %346, i64 3
  %355 = insertelement <8 x i16> %354, i16 %347, i64 4
  %356 = insertelement <8 x i16> %355, i16 %348, i64 5
  %357 = insertelement <8 x i16> %356, i16 %349, i64 6
  %358 = insertelement <8 x i16> %357, i16 %350, i64 7
  %359 = getelementptr inbounds i8, ptr %267, i64 6
  %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 = load i16, ptr %359, align 2, !tbaa !24
  %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 = insertelement <8 x i16> poison, i16 %367, i64 0
  %376 = insertelement <8 x i16> %375, i16 %368, i64 1
  %377 = insertelement <8 x i16> %376, i16 %369, i64 2
  %378 = insertelement <8 x i16> %377, i16 %370, i64 3
  %379 = insertelement <8 x i16> %378, i16 %371, i64 4
  %380 = insertelement <8 x i16> %379, i16 %372, i64 5
  %381 = insertelement <8 x i16> %380, i16 %373, i64 6
  %382 = insertelement <8 x i16> %381, i16 %374, i64 7
  %383 = sitofp <8 x i16> %358 to <8 x float>
  %384 = sitofp <8 x i16> %382 to <8 x float>
  %385 = fmul <8 x float> %broadcast.splat, %384
  %386 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat430, <8 x float> %383, <8 x float> %385)
  %387 = fadd <8 x float> %broadcast.splat432, %386
  %388 = fmul <8 x float> %broadcast.splat434, %387
  %389 = fptosi <8 x float> %388 to <8 x i16>
  %390 = extractelement <8 x i16> %389, i64 0
  %391 = extractelement <8 x i16> %389, i64 1
  %392 = extractelement <8 x i16> %389, i64 2
  %393 = extractelement <8 x i16> %389, i64 3
  %394 = extractelement <8 x i16> %389, i64 4
  store i16 %394, ptr %339, align 2, !tbaa !23
  %395 = extractelement <8 x i16> %389, i64 5
  store i16 %395, ptr %340, align 2, !tbaa !23
  %396 = extractelement <8 x i16> %389, i64 6
  store i16 %396, ptr %341, align 2, !tbaa !23
  %397 = extractelement <8 x i16> %389, i64 7
  store i16 %397, ptr %342, align 2, !tbaa !23
  %398 = fmul <8 x float> %broadcast.splat436, %384
  %399 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %broadcast.splat438, <8 x float> %383, <8 x float> %398)
  %400 = fadd <8 x float> %broadcast.splat440, %399
  %401 = fmul <8 x float> %broadcast.splat442, %400
  %402 = fptosi <8 x float> %401 to <8 x i16>
  %403 = extractelement <8 x i16> %402, i64 0
  %404 = shufflevector <8 x i16> %321, <8 x i16> %330, <4 x i32> <i32 0, i32 8, i32 poison, i32 poison>
  %405 = insertelement <4 x i16> %404, i16 %390, i64 2
  %406 = insertelement <4 x i16> %405, i16 %403, i64 3
  store <4 x i16> %406, ptr %267, align 2, !tbaa !25
  %407 = extractelement <8 x i16> %402, i64 1
  %408 = shufflevector <8 x i16> %321, <8 x i16> %330, <4 x i32> <i32 1, i32 9, i32 poison, i32 poison>
  %409 = insertelement <4 x i16> %408, i16 %391, i64 2
  %410 = insertelement <4 x i16> %409, i16 %407, i64 3
  store <4 x i16> %410, ptr %268, align 2, !tbaa !25
  %411 = extractelement <8 x i16> %402, i64 2
  %412 = shufflevector <8 x i16> %321, <8 x i16> %330, <4 x i32> <i32 2, i32 10, i32 poison, i32 poison>
  %413 = insertelement <4 x i16> %412, i16 %392, i64 2
  %414 = insertelement <4 x i16> %413, i16 %411, i64 3
  store <4 x i16> %414, ptr %269, align 2, !tbaa !25
  %415 = extractelement <8 x i16> %402, i64 3
  %416 = shufflevector <8 x i16> %321, <8 x i16> %330, <4 x i32> <i32 3, i32 11, i32 poison, i32 poison>
  %417 = insertelement <4 x i16> %416, i16 %393, i64 2
  %418 = insertelement <4 x i16> %417, i16 %415, i64 3
  store <4 x i16> %418, ptr %270, align 2, !tbaa !25
  %419 = extractelement <8 x i16> %402, i64 4
  store i16 %419, ptr %363, align 2, !tbaa !24
  %420 = extractelement <8 x i16> %402, i64 5
  store i16 %420, ptr %364, align 2, !tbaa !24
  %421 = extractelement <8 x i16> %402, i64 6
  store i16 %421, ptr %365, align 2, !tbaa !24
  %422 = extractelement <8 x i16> %402, i64 7
  store i16 %422, ptr %366, align 2, !tbaa !24
  %index.next = add nuw i64 %index, 8
  %423 = icmp eq i64 %index.next, %n.vec
  br i1 %423, 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 ]
  %424 = insertelement <4 x float> poison, float %248, i64 0
  %425 = insertelement <4 x float> %424, float %253, i64 1
  %426 = shufflevector <4 x float> %425, <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 ]
  %427 = getelementptr inbounds %struct.stbtt_vertex, ptr %257, i64 %indvars.iv
  %428 = load i16, ptr %427, align 2, !tbaa !18
  %429 = getelementptr inbounds i8, ptr %427, i64 2
  %430 = load i16, ptr %429, align 2, !tbaa !20
  %431 = getelementptr inbounds i8, ptr %427, i64 4
  %432 = load i16, ptr %431, align 2, !tbaa !23
  %433 = getelementptr inbounds i8, ptr %427, i64 6
  %434 = load i16, ptr %433, align 2, !tbaa !24
  %435 = insertelement <2 x i16> poison, i16 %428, i64 0
  %436 = insertelement <2 x i16> %435, i16 %432, i64 1
  %437 = sitofp <2 x i16> %436 to <2 x float>
  %438 = shufflevector <2 x float> %437, <2 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  %439 = insertelement <2 x i16> poison, i16 %430, i64 0
  %440 = insertelement <2 x i16> %439, i16 %434, i64 1
  %441 = sitofp <2 x i16> %440 to <2 x float>
  %442 = shufflevector <2 x float> %441, <2 x float> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
  %443 = fmul <4 x float> %242, %442
  %444 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %243, <4 x float> %438, <4 x float> %443)
  %445 = fadd <4 x float> %197, %444
  %446 = fmul <4 x float> %426, %445
  %447 = fptosi <4 x float> %446 to <4 x i16>
  store <4 x i16> %447, ptr %427, 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 %448, label %scalar.ph, !llvm.loop !29

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

453:                                              ; preds = %448
  %.not347 = icmp eq ptr %.0271385, null
  br i1 %.not347, label %466, label %454

454:                                              ; preds = %453
  tail call void @free(ptr noundef nonnull %.0271385) #11
  br label %466

455:                                              ; preds = %448
  %456 = icmp sgt i32 %.6384, 0
  %457 = zext nneg i32 %.6384 to i64
  br i1 %456, label %458, label %._crit_edge

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

._crit_edge:                                      ; preds = %455, %458
  %460 = getelementptr inbounds %struct.stbtt_vertex, ptr %452, i64 %457
  %461 = mul nuw nsw i64 %wide.trip.count, 10
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 2 %460, ptr nonnull align 2 %257, i64 %461, i1 false)
  %.not349 = icmp eq ptr %.0271385, null
  br i1 %.not349, label %463, label %462

462:                                              ; preds = %._crit_edge
  tail call void @free(ptr noundef nonnull %.0271385) #11
  br label %463

463:                                              ; preds = %462, %._crit_edge
  tail call void @free(ptr noundef nonnull %257) #11
  br label %464

464:                                              ; preds = %239, %463
  %.7 = phi i32 [ %449, %463 ], [ %.6384, %239 ]
  %.1272 = phi ptr [ %452, %463 ], [ %.0271385, %239 ]
  %465 = and i32 %180, 32
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #11
  %.not = icmp eq i32 %465, 0
  br i1 %.not, label %.thread374, label %175, !llvm.loop !30

466:                                              ; preds = %454, %453
  tail call void @free(ptr noundef nonnull %257) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #11
  br label %.thread

467:                                              ; preds = %169
  %468 = icmp slt i16 %12, 0
  br i1 %468, label %469, label %.thread374

469:                                              ; preds = %467
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, i32 noundef 1542, ptr noundef nonnull @__PRETTY_FUNCTION__.stbtt_GetGlyphShape) #12
  unreachable

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

.thread:                                          ; preds = %466, %14, %3, %.thread374
  %.4 = phi i32 [ %.10, %.thread374 ], [ 0, %466 ], [ 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 #1

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

; 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 #3

; 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 #1

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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