; LLVM IR from godofecht/GANN-Object-Avoidance :: Box2D/Testbed/Framework (RenderGL3)

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

@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [104 x i8], align 1
@__PRETTY_FUNCTION__.stbtt_FindGlyphIndex = external hidden unnamed_addr constant [54 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [56 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z7ttULONGPKh(ptr noundef) #0

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local i32 @stbtt_FindGlyphIndex(ptr noundef %0, i32 noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i16, align 2
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i16, align 2
  %14 = alloca i16, align 2
  %15 = alloca i16, align 2
  %16 = alloca i16, align 2
  %17 = alloca i16, align 2
  %18 = alloca i16, align 2
  %19 = alloca i16, align 2
  %20 = alloca i16, align 2
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i16, align 2
  %24 = alloca i16, align 2
  %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
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %32, i32 0, i32 1
  %34 = load ptr, ptr %33, align 8, !tbaa !11
  store ptr %34, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %35, i32 0, i32 10
  %37 = load i32, ptr %36, align 8, !tbaa !13
  store i32 %37, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #3
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = load i32, ptr %7, align 4, !tbaa !9
  %40 = zext i32 %39 to i64
  %41 = getelementptr inbounds i8, ptr %38, i64 %40
  %42 = getelementptr inbounds i8, ptr %41, i64 0
  %43 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %42)
  store i16 %43, ptr %8, align 2, !tbaa !14
  %44 = load i16, ptr %8, align 2, !tbaa !14
  %45 = zext i16 %44 to i32
  %46 = icmp eq i32 %45, 0
  br i1 %46, label %47, label %72

47:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = load i32, ptr %7, align 4, !tbaa !9
  %50 = zext i32 %49 to i64
  %51 = getelementptr inbounds i8, ptr %48, i64 %50
  %52 = getelementptr inbounds i8, ptr %51, i64 2
  %53 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %52)
  %54 = zext i16 %53 to i32
  store i32 %54, ptr %9, align 4, !tbaa !9
  %55 = load i32, ptr %5, align 4, !tbaa !9
  %56 = load i32, ptr %9, align 4, !tbaa !9
  %57 = sub nsw i32 %56, 6
  %58 = icmp slt i32 %55, %57
  br i1 %58, label %59, label %70

59:                                               ; preds = %47
  %60 = load ptr, ptr %6, align 8, !tbaa !5
  %61 = load i32, ptr %7, align 4, !tbaa !9
  %62 = zext i32 %61 to i64
  %63 = getelementptr inbounds i8, ptr %60, i64 %62
  %64 = getelementptr inbounds i8, ptr %63, i64 6
  %65 = load i32, ptr %5, align 4, !tbaa !9
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds i8, ptr %64, i64 %66
  %68 = load i8, ptr %67, align 1, !tbaa !16
  %69 = zext i8 %68 to i32
  store i32 %69, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %71

70:                                               ; preds = %47
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %71

71:                                               ; preds = %70, %59
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  br label %483

72:                                               ; preds = %2
  %73 = load i16, ptr %8, align 2, !tbaa !14
  %74 = zext i16 %73 to i32
  %75 = icmp eq i32 %74, 6
  br i1 %75, label %76, label %116

76:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = load i32, ptr %7, align 4, !tbaa !9
  %79 = zext i32 %78 to i64
  %80 = getelementptr inbounds i8, ptr %77, i64 %79
  %81 = getelementptr inbounds i8, ptr %80, i64 6
  %82 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %81)
  %83 = zext i16 %82 to i32
  store i32 %83, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = load i32, ptr %7, align 4, !tbaa !9
  %86 = zext i32 %85 to i64
  %87 = getelementptr inbounds i8, ptr %84, i64 %86
  %88 = getelementptr inbounds i8, ptr %87, i64 8
  %89 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %88)
  %90 = zext i16 %89 to i32
  store i32 %90, ptr %12, align 4, !tbaa !9
  %91 = load i32, ptr %5, align 4, !tbaa !9
  %92 = load i32, ptr %11, align 4, !tbaa !9
  %93 = icmp uge i32 %91, %92
  br i1 %93, label %94, label %114

94:                                               ; preds = %76
  %95 = load i32, ptr %5, align 4, !tbaa !9
  %96 = load i32, ptr %11, align 4, !tbaa !9
  %97 = load i32, ptr %12, align 4, !tbaa !9
  %98 = add i32 %96, %97
  %99 = icmp ult i32 %95, %98
  br i1 %99, label %100, label %114

100:                                              ; preds = %94
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = load i32, ptr %7, align 4, !tbaa !9
  %103 = zext i32 %102 to i64
  %104 = getelementptr inbounds i8, ptr %101, i64 %103
  %105 = getelementptr inbounds i8, ptr %104, i64 10
  %106 = load i32, ptr %5, align 4, !tbaa !9
  %107 = load i32, ptr %11, align 4, !tbaa !9
  %108 = sub i32 %106, %107
  %109 = mul i32 %108, 2
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds i8, ptr %105, i64 %110
  %112 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %111)
  %113 = zext i16 %112 to i32
  store i32 %113, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %115

114:                                              ; preds = %94, %76
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %115

115:                                              ; preds = %114, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  br label %483

116:                                              ; preds = %72
  %117 = load i16, ptr %8, align 2, !tbaa !14
  %118 = zext i16 %117 to i32
  %119 = icmp eq i32 %118, 2
  br i1 %119, label %120, label %121

120:                                              ; preds = %116
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.10, i32 noundef 895, ptr noundef @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #4
  unreachable

121:                                              ; preds = %116
  %122 = load i16, ptr %8, align 2, !tbaa !14
  %123 = zext i16 %122 to i32
  %124 = icmp eq i32 %123, 4
  br i1 %124, label %125, label %387

125:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #3
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = load i32, ptr %7, align 4, !tbaa !9
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds i8, ptr %126, i64 %128
  %130 = getelementptr inbounds i8, ptr %129, i64 6
  %131 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %130)
  %132 = zext i16 %131 to i32
  %133 = ashr i32 %132, 1
  %134 = trunc i32 %133 to i16
  store i16 %134, ptr %13, align 2, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #3
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = load i32, ptr %7, align 4, !tbaa !9
  %137 = zext i32 %136 to i64
  %138 = getelementptr inbounds i8, ptr %135, i64 %137
  %139 = getelementptr inbounds i8, ptr %138, i64 8
  %140 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %139)
  %141 = zext i16 %140 to i32
  %142 = ashr i32 %141, 1
  %143 = trunc i32 %142 to i16
  store i16 %143, ptr %14, align 2, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #3
  %144 = load ptr, ptr %6, align 8, !tbaa !5
  %145 = load i32, ptr %7, align 4, !tbaa !9
  %146 = zext i32 %145 to i64
  %147 = getelementptr inbounds i8, ptr %144, i64 %146
  %148 = getelementptr inbounds i8, ptr %147, i64 10
  %149 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %148)
  store i16 %149, ptr %15, align 2, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 2, ptr %16) #3
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = load i32, ptr %7, align 4, !tbaa !9
  %152 = zext i32 %151 to i64
  %153 = getelementptr inbounds i8, ptr %150, i64 %152
  %154 = getelementptr inbounds i8, ptr %153, i64 12
  %155 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %154)
  %156 = zext i16 %155 to i32
  %157 = ashr i32 %156, 1
  %158 = trunc i32 %157 to i16
  store i16 %158, ptr %16, align 2, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %159 = load i32, ptr %7, align 4, !tbaa !9
  %160 = add i32 %159, 14
  store i32 %160, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %161 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %161, ptr %22, align 4, !tbaa !9
  %162 = load i32, ptr %5, align 4, !tbaa !9
  %163 = icmp sgt i32 %162, 65535
  br i1 %163, label %164, label %165

164:                                              ; preds = %125
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %386

165:                                              ; preds = %125
  %166 = load i32, ptr %5, align 4, !tbaa !9
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = load i32, ptr %22, align 4, !tbaa !9
  %169 = zext i32 %168 to i64
  %170 = getelementptr inbounds i8, ptr %167, i64 %169
  %171 = load i16, ptr %16, align 2, !tbaa !14
  %172 = zext i16 %171 to i32
  %173 = mul nsw i32 %172, 2
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i8, ptr %170, i64 %174
  %176 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %175)
  %177 = zext i16 %176 to i32
  %178 = icmp sge i32 %166, %177
  br i1 %178, label %179, label %185

179:                                              ; preds = %165
  %180 = load i16, ptr %16, align 2, !tbaa !14
  %181 = zext i16 %180 to i32
  %182 = mul nsw i32 %181, 2
  %183 = load i32, ptr %22, align 4, !tbaa !9
  %184 = add i32 %183, %182
  store i32 %184, ptr %22, align 4, !tbaa !9
  br label %185

185:                                              ; preds = %179, %165
  %186 = load i32, ptr %22, align 4, !tbaa !9
  %187 = sub i32 %186, 2
  store i32 %187, ptr %22, align 4, !tbaa !9
  br label %188

188:                                              ; preds = %250, %185
  %189 = load i16, ptr %15, align 2, !tbaa !14
  %190 = icmp ne i16 %189, 0
  br i1 %190, label %191, label %253

191:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %24) #3
  %192 = load i16, ptr %14, align 2, !tbaa !14
  %193 = zext i16 %192 to i32
  %194 = ashr i32 %193, 1
  %195 = trunc i32 %194 to i16
  store i16 %195, ptr %14, align 2, !tbaa !14
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = load i32, ptr %22, align 4, !tbaa !9
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds i8, ptr %196, i64 %198
  %200 = getelementptr inbounds i8, ptr %199, i64 2
  %201 = load i16, ptr %13, align 2, !tbaa !14
  %202 = zext i16 %201 to i32
  %203 = mul nsw i32 %202, 2
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds i8, ptr %200, i64 %204
  %206 = getelementptr inbounds i8, ptr %205, i64 2
  %207 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %206)
  store i16 %207, ptr %23, align 2, !tbaa !14
  %208 = load ptr, ptr %6, align 8, !tbaa !5
  %209 = load i32, ptr %22, align 4, !tbaa !9
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds i8, ptr %208, i64 %210
  %212 = getelementptr inbounds i8, ptr %211, i64 2
  %213 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %212)
  store i16 %213, ptr %24, align 2, !tbaa !14
  %214 = load ptr, ptr %6, align 8, !tbaa !5
  %215 = load i32, ptr %22, align 4, !tbaa !9
  %216 = zext i32 %215 to i64
  %217 = getelementptr inbounds i8, ptr %214, i64 %216
  %218 = load i16, ptr %14, align 2, !tbaa !14
  %219 = zext i16 %218 to i32
  %220 = mul nsw i32 %219, 2
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds i8, ptr %217, i64 %221
  %223 = load i16, ptr %13, align 2, !tbaa !14
  %224 = zext i16 %223 to i32
  %225 = mul nsw i32 %224, 2
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i8, ptr %222, i64 %226
  %228 = getelementptr inbounds i8, ptr %227, i64 2
  %229 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %228)
  store i16 %229, ptr %23, align 2, !tbaa !14
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = load i32, ptr %22, align 4, !tbaa !9
  %232 = zext i32 %231 to i64
  %233 = getelementptr inbounds i8, ptr %230, i64 %232
  %234 = load i16, ptr %14, align 2, !tbaa !14
  %235 = zext i16 %234 to i32
  %236 = mul nsw i32 %235, 2
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i8, ptr %233, i64 %237
  %239 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %238)
  store i16 %239, ptr %24, align 2, !tbaa !14
  %240 = load i32, ptr %5, align 4, !tbaa !9
  %241 = load i16, ptr %24, align 2, !tbaa !14
  %242 = zext i16 %241 to i32
  %243 = icmp sgt i32 %240, %242
  br i1 %243, label %244, label %250

244:                                              ; preds = %191
  %245 = load i16, ptr %14, align 2, !tbaa !14
  %246 = zext i16 %245 to i32
  %247 = mul nsw i32 %246, 2
  %248 = load i32, ptr %22, align 4, !tbaa !9
  %249 = add i32 %248, %247
  store i32 %249, ptr %22, align 4, !tbaa !9
  br label %250

250:                                              ; preds = %244, %191
  %251 = load i16, ptr %15, align 2, !tbaa !14
  %252 = add i16 %251, -1
  store i16 %252, ptr %15, align 2, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #3
  br label %188, !llvm.loop !17

253:                                              ; preds = %188
  %254 = load i32, ptr %22, align 4, !tbaa !9
  %255 = add i32 %254, 2
  store i32 %255, ptr %22, align 4, !tbaa !9
  %256 = load i32, ptr %22, align 4, !tbaa !9
  %257 = load i32, ptr %21, align 4, !tbaa !9
  %258 = sub i32 %256, %257
  %259 = lshr i32 %258, 1
  %260 = trunc i32 %259 to i16
  store i16 %260, ptr %17, align 2, !tbaa !14
  %261 = load i32, ptr %5, align 4, !tbaa !9
  %262 = load ptr, ptr %6, align 8, !tbaa !5
  %263 = load i32, ptr %21, align 4, !tbaa !9
  %264 = zext i32 %263 to i64
  %265 = getelementptr inbounds i8, ptr %262, i64 %264
  %266 = load i16, ptr %17, align 2, !tbaa !14
  %267 = zext i16 %266 to i32
  %268 = mul nsw i32 2, %267
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds i8, ptr %265, i64 %269
  %271 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %270)
  %272 = zext i16 %271 to i32
  %273 = icmp sle i32 %261, %272
  br i1 %273, label %274, label %275

274:                                              ; preds = %253
  br label %277

275:                                              ; preds = %253
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.10, i32 noundef 933, ptr noundef @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #4
  unreachable

276:                                              ; No predecessors!
  br label %277

277:                                              ; preds = %276, %274
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  %279 = load i32, ptr %7, align 4, !tbaa !9
  %280 = zext i32 %279 to i64
  %281 = getelementptr inbounds i8, ptr %278, i64 %280
  %282 = getelementptr inbounds i8, ptr %281, i64 14
  %283 = load i16, ptr %13, align 2, !tbaa !14
  %284 = zext i16 %283 to i32
  %285 = mul nsw i32 %284, 2
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i8, ptr %282, i64 %286
  %288 = getelementptr inbounds i8, ptr %287, i64 2
  %289 = load i16, ptr %17, align 2, !tbaa !14
  %290 = zext i16 %289 to i32
  %291 = mul nsw i32 2, %290
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds i8, ptr %288, i64 %292
  %294 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %293)
  store i16 %294, ptr %19, align 2, !tbaa !14
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = load i32, ptr %7, align 4, !tbaa !9
  %297 = zext i32 %296 to i64
  %298 = getelementptr inbounds i8, ptr %295, i64 %297
  %299 = getelementptr inbounds i8, ptr %298, i64 14
  %300 = getelementptr inbounds i8, ptr %299, i64 2
  %301 = load i16, ptr %17, align 2, !tbaa !14
  %302 = zext i16 %301 to i32
  %303 = mul nsw i32 2, %302
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i8, ptr %300, i64 %304
  %306 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %305)
  store i16 %306, ptr %20, align 2, !tbaa !14
  %307 = load i32, ptr %5, align 4, !tbaa !9
  %308 = load i16, ptr %19, align 2, !tbaa !14
  %309 = zext i16 %308 to i32
  %310 = icmp slt i32 %307, %309
  br i1 %310, label %311, label %312

311:                                              ; preds = %277
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %386

312:                                              ; preds = %277
  %313 = load ptr, ptr %6, align 8, !tbaa !5
  %314 = load i32, ptr %7, align 4, !tbaa !9
  %315 = zext i32 %314 to i64
  %316 = getelementptr inbounds i8, ptr %313, i64 %315
  %317 = getelementptr inbounds i8, ptr %316, i64 14
  %318 = load i16, ptr %13, align 2, !tbaa !14
  %319 = zext i16 %318 to i32
  %320 = mul nsw i32 %319, 6
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i8, ptr %317, i64 %321
  %323 = getelementptr inbounds i8, ptr %322, i64 2
  %324 = load i16, ptr %17, align 2, !tbaa !14
  %325 = zext i16 %324 to i32
  %326 = mul nsw i32 2, %325
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i8, ptr %323, i64 %327
  %329 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %328)
  store i16 %329, ptr %18, align 2, !tbaa !14
  %330 = load i16, ptr %18, align 2, !tbaa !14
  %331 = zext i16 %330 to i32
  %332 = icmp eq i32 %331, 0
  br i1 %332, label %333, label %356

333:                                              ; preds = %312
  %334 = load i32, ptr %5, align 4, !tbaa !9
  %335 = load ptr, ptr %6, align 8, !tbaa !5
  %336 = load i32, ptr %7, align 4, !tbaa !9
  %337 = zext i32 %336 to i64
  %338 = getelementptr inbounds i8, ptr %335, i64 %337
  %339 = getelementptr inbounds i8, ptr %338, i64 14
  %340 = load i16, ptr %13, align 2, !tbaa !14
  %341 = zext i16 %340 to i32
  %342 = mul nsw i32 %341, 4
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds i8, ptr %339, i64 %343
  %345 = getelementptr inbounds i8, ptr %344, i64 2
  %346 = load i16, ptr %17, align 2, !tbaa !14
  %347 = zext i16 %346 to i32
  %348 = mul nsw i32 2, %347
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i8, ptr %345, i64 %349
  %351 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %350)
  %352 = sext i16 %351 to i32
  %353 = add nsw i32 %334, %352
  %354 = trunc i32 %353 to i16
  %355 = zext i16 %354 to i32
  store i32 %355, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %386

356:                                              ; preds = %312
  %357 = load ptr, ptr %6, align 8, !tbaa !5
  %358 = load i16, ptr %18, align 2, !tbaa !14
  %359 = zext i16 %358 to i32
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i8, ptr %357, i64 %360
  %362 = load i32, ptr %5, align 4, !tbaa !9
  %363 = load i16, ptr %19, align 2, !tbaa !14
  %364 = zext i16 %363 to i32
  %365 = sub nsw i32 %362, %364
  %366 = mul nsw i32 %365, 2
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i8, ptr %361, i64 %367
  %369 = load i32, ptr %7, align 4, !tbaa !9
  %370 = zext i32 %369 to i64
  %371 = getelementptr inbounds i8, ptr %368, i64 %370
  %372 = getelementptr inbounds i8, ptr %371, i64 14
  %373 = load i16, ptr %13, align 2, !tbaa !14
  %374 = zext i16 %373 to i32
  %375 = mul nsw i32 %374, 6
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds i8, ptr %372, i64 %376
  %378 = getelementptr inbounds i8, ptr %377, i64 2
  %379 = load i16, ptr %17, align 2, !tbaa !14
  %380 = zext i16 %379 to i32
  %381 = mul nsw i32 2, %380
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds i8, ptr %378, i64 %382
  %384 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %383)
  %385 = zext i16 %384 to i32
  store i32 %385, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %386

386:                                              ; preds = %356, %333, %311, %164
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #3
  br label %483

387:                                              ; preds = %121
  %388 = load i16, ptr %8, align 2, !tbaa !14
  %389 = zext i16 %388 to i32
  %390 = icmp eq i32 %389, 12
  br i1 %390, label %395, label %391

391:                                              ; preds = %387
  %392 = load i16, ptr %8, align 2, !tbaa !14
  %393 = zext i16 %392 to i32
  %394 = icmp eq i32 %393, 13
  br i1 %394, label %395, label %478

395:                                              ; preds = %391, %387
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = load i32, ptr %7, align 4, !tbaa !9
  %398 = zext i32 %397 to i64
  %399 = getelementptr inbounds i8, ptr %396, i64 %398
  %400 = getelementptr inbounds i8, ptr %399, i64 12
  %401 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %400)
  store i32 %401, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  store i32 0, ptr %26, align 4, !tbaa !9
  %402 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %402, ptr %27, align 4, !tbaa !9
  br label %403

403:                                              ; preds = %475, %395
  %404 = load i32, ptr %26, align 4, !tbaa !9
  %405 = load i32, ptr %27, align 4, !tbaa !9
  %406 = icmp slt i32 %404, %405
  br i1 %406, label %407, label %476

407:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  %408 = load i32, ptr %26, align 4, !tbaa !9
  %409 = load i32, ptr %27, align 4, !tbaa !9
  %410 = load i32, ptr %26, align 4, !tbaa !9
  %411 = sub nsw i32 %409, %410
  %412 = ashr i32 %411, 1
  %413 = add nsw i32 %408, %412
  store i32 %413, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  %414 = load ptr, ptr %6, align 8, !tbaa !5
  %415 = load i32, ptr %7, align 4, !tbaa !9
  %416 = zext i32 %415 to i64
  %417 = getelementptr inbounds i8, ptr %414, i64 %416
  %418 = getelementptr inbounds i8, ptr %417, i64 16
  %419 = load i32, ptr %28, align 4, !tbaa !9
  %420 = mul nsw i32 %419, 12
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i8, ptr %418, i64 %421
  %423 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %422)
  store i32 %423, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %424 = load ptr, ptr %6, align 8, !tbaa !5
  %425 = load i32, ptr %7, align 4, !tbaa !9
  %426 = zext i32 %425 to i64
  %427 = getelementptr inbounds i8, ptr %424, i64 %426
  %428 = getelementptr inbounds i8, ptr %427, i64 16
  %429 = load i32, ptr %28, align 4, !tbaa !9
  %430 = mul nsw i32 %429, 12
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds i8, ptr %428, i64 %431
  %433 = getelementptr inbounds i8, ptr %432, i64 4
  %434 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %433)
  store i32 %434, ptr %30, align 4, !tbaa !9
  %435 = load i32, ptr %5, align 4, !tbaa !9
  %436 = load i32, ptr %29, align 4, !tbaa !9
  %437 = icmp ult i32 %435, %436
  br i1 %437, label %438, label %440

438:                                              ; preds = %407
  %439 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %439, ptr %27, align 4, !tbaa !9
  br label %472

440:                                              ; preds = %407
  %441 = load i32, ptr %5, align 4, !tbaa !9
  %442 = load i32, ptr %30, align 4, !tbaa !9
  %443 = icmp ugt i32 %441, %442
  br i1 %443, label %444, label %447

444:                                              ; preds = %440
  %445 = load i32, ptr %28, align 4, !tbaa !9
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %26, align 4, !tbaa !9
  br label %471

447:                                              ; preds = %440
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  %448 = load ptr, ptr %6, align 8, !tbaa !5
  %449 = load i32, ptr %7, align 4, !tbaa !9
  %450 = zext i32 %449 to i64
  %451 = getelementptr inbounds i8, ptr %448, i64 %450
  %452 = getelementptr inbounds i8, ptr %451, i64 16
  %453 = load i32, ptr %28, align 4, !tbaa !9
  %454 = mul nsw i32 %453, 12
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i8, ptr %452, i64 %455
  %457 = getelementptr inbounds i8, ptr %456, i64 8
  %458 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %457)
  store i32 %458, ptr %31, align 4, !tbaa !9
  %459 = load i16, ptr %8, align 2, !tbaa !14
  %460 = zext i16 %459 to i32
  %461 = icmp eq i32 %460, 12
  br i1 %461, label %462, label %468

462:                                              ; preds = %447
  %463 = load i32, ptr %31, align 4, !tbaa !9
  %464 = load i32, ptr %5, align 4, !tbaa !9
  %465 = add i32 %463, %464
  %466 = load i32, ptr %29, align 4, !tbaa !9
  %467 = sub i32 %465, %466
  store i32 %467, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %470

468:                                              ; preds = %447
  %469 = load i32, ptr %31, align 4, !tbaa !9
  store i32 %469, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %470

470:                                              ; preds = %468, %462
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  br label %473

471:                                              ; preds = %444
  br label %472

472:                                              ; preds = %471, %438
  store i32 0, ptr %10, align 4
  br label %473

473:                                              ; preds = %472, %470
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  %474 = load i32, ptr %10, align 4
  switch i32 %474, label %477 [
    i32 0, label %475
  ]

475:                                              ; preds = %473
  br label %403, !llvm.loop !19

476:                                              ; preds = %403
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %477

477:                                              ; preds = %476, %473
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  br label %483

478:                                              ; preds = %391
  br label %479

479:                                              ; preds = %478
  br label %480

480:                                              ; preds = %479
  br label %481

481:                                              ; preds = %480
  br label %482

482:                                              ; preds = %481
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.10, i32 noundef 968, ptr noundef @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #4
  unreachable

483:                                              ; preds = %477, %386, %115, %71
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %484 = load i32, ptr %3, align 4
  ret i32 %484
}

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 = { nounwind }
attributes #4 = { 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 = !{!12, !10, i64 48}
!14 = !{!15, !15, i64 0}
!15 = !{!"short", !7, i64 0}
!16 = !{!7, !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}


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

@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [104 x i8], align 1
@__PRETTY_FUNCTION__.stbtt_FindGlyphIndex = external hidden unnamed_addr constant [54 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [56 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z7ttULONGPKh(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
define dso_local i32 @stbtt_FindGlyphIndex(ptr nocapture noundef readonly %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 8
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 48
  %6 = load i32, ptr %5, align 8, !tbaa !11
  %7 = zext i32 %6 to i64
  %8 = getelementptr inbounds i8, ptr %4, i64 %7
  %9 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %8)
  switch i16 %9, label %138 [
    i16 0, label %10
    i16 6, label %22
    i16 2, label %40
    i16 4, label %41
  ]

10:                                               ; preds = %2
  %11 = getelementptr inbounds i8, ptr %8, i64 2
  %12 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %11)
  %13 = zext i16 %12 to i32
  %14 = add nsw i32 %13, -6
  %15 = icmp sgt i32 %14, %1
  br i1 %15, label %16, label %.loopexit

16:                                               ; preds = %10
  %17 = getelementptr inbounds i8, ptr %8, i64 6
  %18 = sext i32 %1 to i64
  %19 = getelementptr inbounds i8, ptr %17, i64 %18
  %20 = load i8, ptr %19, align 1, !tbaa !12
  %21 = zext i8 %20 to i32
  br label %.loopexit

22:                                               ; preds = %2
  %23 = getelementptr inbounds i8, ptr %8, i64 6
  %24 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %23)
  %25 = zext i16 %24 to i32
  %26 = getelementptr inbounds i8, ptr %8, i64 8
  %27 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %26)
  %.not155 = icmp ugt i32 %25, %1
  br i1 %.not155, label %.loopexit, label %28

28:                                               ; preds = %22
  %29 = zext i16 %27 to i32
  %30 = add nuw nsw i32 %29, %25
  %31 = icmp ugt i32 %30, %1
  br i1 %31, label %32, label %.loopexit

32:                                               ; preds = %28
  %33 = getelementptr inbounds i8, ptr %8, i64 10
  %34 = sub nsw i32 %1, %25
  %35 = shl nsw i32 %34, 1
  %36 = zext i32 %35 to i64
  %37 = getelementptr inbounds i8, ptr %33, i64 %36
  %38 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %37)
  %39 = zext i16 %38 to i32
  br label %.loopexit

40:                                               ; preds = %2
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, i32 noundef 895, ptr noundef nonnull @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #2
  unreachable

41:                                               ; preds = %2
  %42 = getelementptr inbounds i8, ptr %8, i64 6
  %43 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %42)
  %44 = lshr i16 %43, 1
  %45 = getelementptr inbounds i8, ptr %8, i64 8
  %46 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %45)
  %47 = getelementptr inbounds i8, ptr %8, i64 10
  %48 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %47)
  %49 = getelementptr inbounds i8, ptr %8, i64 12
  %50 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %49)
  %51 = icmp sgt i32 %1, 65535
  br i1 %51, label %137, label %52

52:                                               ; preds = %41
  %53 = add i32 %6, 14
  %54 = and i16 %50, -2
  %55 = zext i32 %53 to i64
  %56 = getelementptr inbounds i8, ptr %4, i64 %55
  %57 = zext i16 %54 to i64
  %58 = getelementptr inbounds i8, ptr %56, i64 %57
  %59 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %58)
  %60 = zext i16 %59 to i32
  %.not = icmp sgt i32 %60, %1
  %61 = zext i16 %54 to i32
  %62 = select i1 %.not, i32 0, i32 %61
  %.0141 = add i32 %6, 12
  %63 = add i32 %.0141, %62
  %.not153162 = icmp eq i16 %48, 0
  br i1 %.not153162, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %52
  %64 = and i16 %43, -2
  %65 = zext i16 %64 to i64
  br label %66

66:                                               ; preds = %.lr.ph, %66
  %.0133.in165 = phi i16 [ %46, %.lr.ph ], [ %.0133, %66 ]
  %.0134164 = phi i16 [ %48, %.lr.ph ], [ %85, %66 ]
  %.1142163 = phi i32 [ %63, %.lr.ph ], [ %.2143, %66 ]
  %.0133 = lshr i16 %.0133.in165, 1
  %67 = zext i32 %.1142163 to i64
  %68 = getelementptr inbounds i8, ptr %4, i64 %67
  %69 = getelementptr inbounds i8, ptr %68, i64 2
  %70 = getelementptr inbounds i8, ptr %69, i64 %65
  %71 = getelementptr inbounds i8, ptr %70, i64 2
  %72 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %71)
  %73 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %69)
  %74 = and i16 %.0133, 32766
  %75 = zext nneg i16 %74 to i64
  %76 = getelementptr inbounds i8, ptr %68, i64 %75
  %77 = getelementptr inbounds i8, ptr %76, i64 %65
  %78 = getelementptr inbounds i8, ptr %77, i64 2
  %79 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %78)
  %80 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %76)
  %81 = zext i16 %80 to i32
  %82 = icmp slt i32 %81, %1
  %83 = zext nneg i16 %74 to i32
  %84 = select i1 %82, i32 %83, i32 0
  %.2143 = add i32 %84, %.1142163
  %85 = add i16 %.0134164, -1
  %.not153 = icmp eq i16 %85, 0
  br i1 %.not153, label %._crit_edge, label %66, !llvm.loop !13

._crit_edge:                                      ; preds = %66, %52
  %.1142.lcssa = phi i32 [ %63, %52 ], [ %.2143, %66 ]
  %reass.sub = sub i32 %.1142.lcssa, %6
  %86 = add i32 %reass.sub, 131060
  %87 = and i32 %86, 131070
  %88 = zext nneg i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %56, i64 %88
  %90 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %89)
  %91 = zext i16 %90 to i32
  %.not154 = icmp slt i32 %91, %1
  br i1 %.not154, label %92, label %93

92:                                               ; preds = %._crit_edge
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.10, i32 noundef 933, ptr noundef nonnull @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #2
  unreachable

93:                                               ; preds = %._crit_edge
  %94 = getelementptr inbounds i8, ptr %8, i64 14
  %95 = zext nneg i16 %44 to i32
  %96 = shl nuw nsw i32 %95, 1
  %97 = zext nneg i32 %96 to i64
  %98 = getelementptr inbounds i8, ptr %94, i64 %97
  %99 = getelementptr inbounds i8, ptr %98, i64 2
  %100 = getelementptr inbounds i8, ptr %99, i64 %88
  %101 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %100)
  %102 = getelementptr inbounds i8, ptr %8, i64 16
  %103 = getelementptr inbounds i8, ptr %102, i64 %88
  %104 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %103)
  %105 = zext i16 %101 to i32
  %106 = icmp sgt i32 %105, %1
  br i1 %106, label %137, label %107

107:                                              ; preds = %93
  %108 = mul nuw nsw i32 %95, 6
  %109 = zext nneg i32 %108 to i64
  %110 = getelementptr inbounds i8, ptr %94, i64 %109
  %111 = getelementptr inbounds i8, ptr %110, i64 2
  %112 = getelementptr inbounds i8, ptr %111, i64 %88
  %113 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %112)
  %114 = icmp eq i16 %113, 0
  br i1 %114, label %115, label %124

115:                                              ; preds = %107
  %116 = shl nuw nsw i32 %95, 2
  %117 = zext nneg i32 %116 to i64
  %118 = getelementptr inbounds i8, ptr %94, i64 %117
  %119 = getelementptr inbounds i8, ptr %118, i64 2
  %120 = getelementptr inbounds i8, ptr %119, i64 %88
  %121 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %120)
  %122 = trunc i32 %1 to i16
  %123 = add i16 %121, %122
  br label %137

124:                                              ; preds = %107
  %125 = zext i16 %113 to i64
  %126 = getelementptr inbounds i8, ptr %4, i64 %125
  %127 = sub nsw i32 %1, %105
  %128 = shl nsw i32 %127, 1
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i8, ptr %126, i64 %129
  %131 = getelementptr inbounds i8, ptr %130, i64 %7
  %132 = getelementptr inbounds i8, ptr %131, i64 14
  %133 = getelementptr inbounds i8, ptr %132, i64 %109
  %134 = getelementptr inbounds i8, ptr %133, i64 2
  %135 = getelementptr inbounds i8, ptr %134, i64 %88
  %136 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %135)
  br label %137

137:                                              ; preds = %93, %41, %124, %115
  %.2.shrunk = phi i16 [ %123, %115 ], [ %136, %124 ], [ 0, %41 ], [ 0, %93 ]
  %.2 = zext i16 %.2.shrunk to i32
  br label %.loopexit

138:                                              ; preds = %2
  %139 = icmp eq i16 %9, 12
  %140 = and i16 %9, -2
  %or.cond = icmp eq i16 %140, 12
  br i1 %or.cond, label %141, label %167

141:                                              ; preds = %138
  %142 = getelementptr inbounds i8, ptr %8, i64 12
  %143 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %142)
  %144 = icmp sgt i32 %143, 0
  br i1 %144, label %.lr.ph169, label %.loopexit

.lr.ph169:                                        ; preds = %141
  %145 = getelementptr inbounds i8, ptr %8, i64 16
  br label %146

146:                                              ; preds = %.lr.ph169, %165
  %.0135167 = phi i32 [ %143, %.lr.ph169 ], [ %.2137, %165 ]
  %.0138166 = phi i32 [ 0, %.lr.ph169 ], [ %.2140, %165 ]
  %147 = sub nsw i32 %.0135167, %.0138166
  %148 = ashr i32 %147, 1
  %149 = add nsw i32 %148, %.0138166
  %150 = mul nsw i32 %149, 12
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds i8, ptr %145, i64 %151
  %153 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %152)
  %154 = getelementptr inbounds i8, ptr %152, i64 4
  %155 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %154)
  %156 = icmp ugt i32 %153, %1
  br i1 %156, label %165, label %157

157:                                              ; preds = %146
  %158 = icmp ult i32 %155, %1
  br i1 %158, label %159, label %.thread

159:                                              ; preds = %157
  %160 = add nsw i32 %149, 1
  br label %165

.thread:                                          ; preds = %157
  %161 = getelementptr inbounds i8, ptr %152, i64 8
  %162 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %161)
  %163 = sub i32 %1, %153
  %164 = select i1 %139, i32 %163, i32 0
  %.4 = add i32 %162, %164
  br label %.loopexit

165:                                              ; preds = %159, %146
  %.2140 = phi i32 [ %160, %159 ], [ %.0138166, %146 ]
  %.2137 = phi i32 [ %.0135167, %159 ], [ %149, %146 ]
  %166 = icmp slt i32 %.2140, %.2137
  br i1 %166, label %146, label %.loopexit, !llvm.loop !15

167:                                              ; preds = %138
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10, i32 noundef 968, ptr noundef nonnull @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #2
  unreachable

.loopexit:                                        ; preds = %165, %141, %.thread, %32, %28, %22, %16, %10, %137
  %.7 = phi i32 [ %.2, %137 ], [ %21, %16 ], [ 0, %10 ], [ %39, %32 ], [ 0, %28 ], [ 0, %22 ], [ %.4, %.thread ], [ 0, %141 ], [ 0, %165 ]
  ret i32 %.7
}

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 #2 = { 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 = !{!6, !10, i64 48}
!12 = !{!8, !8, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}


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