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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.stbtt_fontinfo = type { ptr, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf, %struct.stbtt__buf }
%struct.stbtt__buf = type { ptr, i32, i32 }

@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [82 x i8], align 1
@__PRETTY_FUNCTION__.stbtt_FindGlyphIndex = external hidden unnamed_addr constant [54 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local i32 @stbtt_FindGlyphIndex(ptr noundef %0, i32 noundef %1) #2 {
  %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 i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i16, align 2
  %18 = alloca i16, align 2
  %19 = alloca i16, align 2
  %20 = alloca i16, align 2
  %21 = alloca i16, align 2
  %22 = alloca i16, align 2
  %23 = alloca i32, align 4
  %24 = alloca i16, align 2
  %25 = alloca i16, align 2
  %26 = alloca i16, align 2
  %27 = alloca i16, align 2
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i16, align 2
  %31 = alloca i16, align 2
  %32 = alloca i16, align 2
  %33 = alloca i16, align 2
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = 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) #4
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %41, i32 0, i32 1
  %43 = load ptr, ptr %42, align 8, !tbaa !11
  store ptr %43, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %44, i32 0, i32 12
  %46 = load i32, ptr %45, align 8, !tbaa !14
  store i32 %46, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #4
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = load i32, ptr %7, align 4, !tbaa !9
  %49 = zext i32 %48 to i64
  %50 = getelementptr inbounds i8, ptr %47, i64 %49
  %51 = getelementptr inbounds i8, ptr %50, i64 0
  %52 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %51)
  store i16 %52, ptr %8, align 2, !tbaa !15
  %53 = load i16, ptr %8, align 2, !tbaa !15
  %54 = zext i16 %53 to i32
  %55 = icmp eq i32 %54, 0
  br i1 %55, label %56, label %81

56:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = load i32, ptr %7, align 4, !tbaa !9
  %59 = zext i32 %58 to i64
  %60 = getelementptr inbounds i8, ptr %57, i64 %59
  %61 = getelementptr inbounds i8, ptr %60, i64 2
  %62 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %61)
  %63 = zext i16 %62 to i32
  store i32 %63, ptr %9, align 4, !tbaa !9
  %64 = load i32, ptr %5, align 4, !tbaa !9
  %65 = load i32, ptr %9, align 4, !tbaa !9
  %66 = sub nsw i32 %65, 6
  %67 = icmp slt i32 %64, %66
  br i1 %67, label %68, label %79

68:                                               ; preds = %56
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = load i32, ptr %7, align 4, !tbaa !9
  %71 = zext i32 %70 to i64
  %72 = getelementptr inbounds i8, ptr %69, i64 %71
  %73 = getelementptr inbounds i8, ptr %72, i64 6
  %74 = load i32, ptr %5, align 4, !tbaa !9
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds i8, ptr %73, i64 %75
  %77 = load i8, ptr %76, align 1, !tbaa !17
  %78 = zext i8 %77 to i32
  store i32 %78, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %80

79:                                               ; preds = %56
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %80

80:                                               ; preds = %79, %68
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %559

81:                                               ; preds = %2
  %82 = load i16, ptr %8, align 2, !tbaa !15
  %83 = zext i16 %82 to i32
  %84 = icmp eq i32 %83, 6
  br i1 %84, label %85, label %125

85:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = load i32, ptr %7, align 4, !tbaa !9
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %86, i64 %88
  %90 = getelementptr inbounds i8, ptr %89, i64 6
  %91 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %90)
  %92 = zext i16 %91 to i32
  store i32 %92, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  %94 = load i32, ptr %7, align 4, !tbaa !9
  %95 = zext i32 %94 to i64
  %96 = getelementptr inbounds i8, ptr %93, i64 %95
  %97 = getelementptr inbounds i8, ptr %96, i64 8
  %98 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %97)
  %99 = zext i16 %98 to i32
  store i32 %99, ptr %12, align 4, !tbaa !9
  %100 = load i32, ptr %5, align 4, !tbaa !9
  %101 = load i32, ptr %11, align 4, !tbaa !9
  %102 = icmp uge i32 %100, %101
  br i1 %102, label %103, label %123

103:                                              ; preds = %85
  %104 = load i32, ptr %5, align 4, !tbaa !9
  %105 = load i32, ptr %11, align 4, !tbaa !9
  %106 = load i32, ptr %12, align 4, !tbaa !9
  %107 = add i32 %105, %106
  %108 = icmp ult i32 %104, %107
  br i1 %108, label %109, label %123

109:                                              ; preds = %103
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = load i32, ptr %7, align 4, !tbaa !9
  %112 = zext i32 %111 to i64
  %113 = getelementptr inbounds i8, ptr %110, i64 %112
  %114 = getelementptr inbounds i8, ptr %113, i64 10
  %115 = load i32, ptr %5, align 4, !tbaa !9
  %116 = load i32, ptr %11, align 4, !tbaa !9
  %117 = sub i32 %115, %116
  %118 = mul i32 %117, 2
  %119 = zext i32 %118 to i64
  %120 = getelementptr inbounds i8, ptr %114, i64 %119
  %121 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %120)
  %122 = zext i16 %121 to i32
  store i32 %122, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %124

123:                                              ; preds = %103, %85
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %124

124:                                              ; preds = %123, %109
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %559

125:                                              ; preds = %81
  %126 = load i16, ptr %8, align 2, !tbaa !15
  %127 = zext i16 %126 to i32
  %128 = icmp eq i32 %127, 2
  br i1 %128, label %129, label %242

129:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %130 = load i32, ptr %5, align 4, !tbaa !9
  %131 = and i32 %130, 65280
  %132 = ashr i32 %131, 4
  store i32 %132, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %133 = load i32, ptr %5, align 4, !tbaa !9
  %134 = and i32 %133, 255
  store i32 %134, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %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 6
  store ptr %139, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %140 = load ptr, ptr %15, align 8, !tbaa !5
  %141 = getelementptr inbounds i16, ptr %140, i64 512
  store ptr %141, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #4
  %142 = load ptr, ptr %15, align 8, !tbaa !5
  %143 = load i32, ptr %13, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds i16, ptr %142, i64 %144
  %146 = load i16, ptr %145, align 2, !tbaa !15
  store i16 %146, ptr %17, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #4
  %147 = load i16, ptr %17, align 2, !tbaa !15
  %148 = icmp ne i16 %147, 0
  br i1 %148, label %149, label %227

149:                                              ; preds = %129
  %150 = load i16, ptr %17, align 2, !tbaa !15
  %151 = zext i16 %150 to i32
  %152 = sdiv i32 %151, 8
  %153 = trunc i32 %152 to i16
  store i16 %153, ptr %17, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #4
  %154 = load ptr, ptr %16, align 8, !tbaa !5
  %155 = load i16, ptr %17, align 2, !tbaa !15
  %156 = zext i16 %155 to i64
  %157 = getelementptr inbounds i16, ptr %154, i64 %156
  %158 = load i16, ptr %157, align 2, !tbaa !15
  store i16 %158, ptr %19, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #4
  %159 = load ptr, ptr %16, align 8, !tbaa !5
  %160 = load i16, ptr %17, align 2, !tbaa !15
  %161 = zext i16 %160 to i32
  %162 = add nsw i32 %161, 1
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i16, ptr %159, i64 %163
  %165 = load i16, ptr %164, align 2, !tbaa !15
  store i16 %165, ptr %20, align 2, !tbaa !15
  %166 = load i16, ptr %19, align 2, !tbaa !15
  %167 = zext i16 %166 to i32
  %168 = load i32, ptr %14, align 4, !tbaa !9
  %169 = icmp sle i32 %167, %168
  br i1 %169, label %170, label %225

170:                                              ; preds = %149
  %171 = load i32, ptr %14, align 4, !tbaa !9
  %172 = load i16, ptr %19, align 2, !tbaa !15
  %173 = zext i16 %172 to i32
  %174 = load i16, ptr %20, align 2, !tbaa !15
  %175 = zext i16 %174 to i32
  %176 = add nsw i32 %173, %175
  %177 = icmp slt i32 %171, %176
  br i1 %177, label %178, label %225

178:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #4
  %179 = load ptr, ptr %16, align 8, !tbaa !5
  %180 = load i16, ptr %17, align 2, !tbaa !15
  %181 = zext i16 %180 to i32
  %182 = add nsw i32 %181, 2
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i16, ptr %179, i64 %183
  %185 = load i16, ptr %184, align 2, !tbaa !15
  store i16 %185, ptr %21, align 2, !tbaa !15
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = load i16, ptr %17, align 2, !tbaa !15
  %188 = zext i16 %187 to i32
  %189 = add nsw i32 %188, 3
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i16, ptr %186, i64 %190
  %192 = load i16, ptr %191, align 2, !tbaa !15
  store i16 %192, ptr %18, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #4
  %193 = load ptr, ptr %16, align 8, !tbaa !5
  %194 = load i16, ptr %17, align 2, !tbaa !15
  %195 = zext i16 %194 to i32
  %196 = add nsw i32 %195, 3
  %197 = load i16, ptr %18, align 2, !tbaa !15
  %198 = zext i16 %197 to i32
  %199 = add nsw i32 %196, %198
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds i16, ptr %193, i64 %200
  %202 = load i16, ptr %201, align 2, !tbaa !15
  store i16 %202, ptr %22, align 2, !tbaa !15
  %203 = load i16, ptr %22, align 2, !tbaa !15
  %204 = zext i16 %203 to i32
  %205 = icmp eq i32 %204, 0
  br i1 %205, label %206, label %209

206:                                              ; preds = %178
  %207 = load i16, ptr %22, align 2, !tbaa !15
  %208 = zext i16 %207 to i32
  store i32 %208, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %224

209:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %210 = load i16, ptr %22, align 2, !tbaa !15
  %211 = zext i16 %210 to i32
  %212 = load i16, ptr %21, align 2, !tbaa !15
  %213 = sext i16 %212 to i32
  %214 = add i32 %211, %213
  store i32 %214, ptr %23, align 4, !tbaa !9
  %215 = load i32, ptr %23, align 4, !tbaa !9
  %216 = icmp ult i32 %215, 65536
  br i1 %216, label %217, label %219

217:                                              ; preds = %209
  %218 = load i32, ptr %23, align 4, !tbaa !9
  br label %222

219:                                              ; preds = %209
  %220 = load i32, ptr %23, align 4, !tbaa !9
  %221 = urem i32 %220, 65536
  br label %222

222:                                              ; preds = %219, %217
  %223 = phi i32 [ %218, %217 ], [ %221, %219 ]
  store i32 %223, ptr %3, align 4
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %224

224:                                              ; preds = %222, %206
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #4
  br label %226

225:                                              ; preds = %170, %149
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %226

226:                                              ; preds = %225, %224
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #4
  br label %241

227:                                              ; preds = %129
  %228 = load ptr, ptr %16, align 8, !tbaa !5
  %229 = getelementptr inbounds i16, ptr %228, i64 3
  %230 = load i16, ptr %229, align 2, !tbaa !15
  store i16 %230, ptr %18, align 2, !tbaa !15
  %231 = load ptr, ptr %16, align 8, !tbaa !5
  %232 = load i16, ptr %18, align 2, !tbaa !15
  %233 = zext i16 %232 to i32
  %234 = add nsw i32 3, %233
  %235 = load i32, ptr %13, align 4, !tbaa !9
  %236 = add nsw i32 %234, %235
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i16, ptr %231, i64 %237
  %239 = load i16, ptr %238, align 2, !tbaa !15
  %240 = zext i16 %239 to i32
  store i32 %240, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %241

241:                                              ; preds = %227, %226
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %559

242:                                              ; preds = %125
  %243 = load i16, ptr %8, align 2, !tbaa !15
  %244 = zext i16 %243 to i32
  %245 = icmp eq i32 %244, 4
  br i1 %245, label %246, label %463

246:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 2, ptr %24) #4
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = load i32, ptr %7, align 4, !tbaa !9
  %249 = zext i32 %248 to i64
  %250 = getelementptr inbounds i8, ptr %247, i64 %249
  %251 = getelementptr inbounds i8, ptr %250, i64 6
  %252 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %251)
  %253 = zext i16 %252 to i32
  %254 = ashr i32 %253, 1
  %255 = trunc i32 %254 to i16
  store i16 %255, ptr %24, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #4
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  %257 = load i32, ptr %7, align 4, !tbaa !9
  %258 = zext i32 %257 to i64
  %259 = getelementptr inbounds i8, ptr %256, i64 %258
  %260 = getelementptr inbounds i8, ptr %259, i64 8
  %261 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %260)
  %262 = zext i16 %261 to i32
  %263 = ashr i32 %262, 1
  %264 = trunc i32 %263 to i16
  store i16 %264, ptr %25, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #4
  %265 = load ptr, ptr %6, align 8, !tbaa !5
  %266 = load i32, ptr %7, align 4, !tbaa !9
  %267 = zext i32 %266 to i64
  %268 = getelementptr inbounds i8, ptr %265, i64 %267
  %269 = getelementptr inbounds i8, ptr %268, i64 10
  %270 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %269)
  store i16 %270, ptr %26, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #4
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  %272 = load i32, ptr %7, align 4, !tbaa !9
  %273 = zext i32 %272 to i64
  %274 = getelementptr inbounds i8, ptr %271, i64 %273
  %275 = getelementptr inbounds i8, ptr %274, i64 12
  %276 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %275)
  %277 = zext i16 %276 to i32
  %278 = ashr i32 %277, 1
  %279 = trunc i32 %278 to i16
  store i16 %279, ptr %27, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %280 = load i32, ptr %7, align 4, !tbaa !9
  %281 = add i32 %280, 14
  store i32 %281, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %282 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %282, ptr %29, align 4, !tbaa !9
  %283 = load i32, ptr %5, align 4, !tbaa !9
  %284 = icmp sgt i32 %283, 65535
  br i1 %284, label %285, label %286

285:                                              ; preds = %246
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %462

286:                                              ; preds = %246
  %287 = load i32, ptr %5, align 4, !tbaa !9
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = load i32, ptr %29, align 4, !tbaa !9
  %290 = zext i32 %289 to i64
  %291 = getelementptr inbounds i8, ptr %288, i64 %290
  %292 = load i16, ptr %27, align 2, !tbaa !15
  %293 = zext i16 %292 to i32
  %294 = mul nsw i32 %293, 2
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds i8, ptr %291, i64 %295
  %297 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %296)
  %298 = zext i16 %297 to i32
  %299 = icmp sge i32 %287, %298
  br i1 %299, label %300, label %306

300:                                              ; preds = %286
  %301 = load i16, ptr %27, align 2, !tbaa !15
  %302 = zext i16 %301 to i32
  %303 = mul nsw i32 %302, 2
  %304 = load i32, ptr %29, align 4, !tbaa !9
  %305 = add i32 %304, %303
  store i32 %305, ptr %29, align 4, !tbaa !9
  br label %306

306:                                              ; preds = %300, %286
  %307 = load i32, ptr %29, align 4, !tbaa !9
  %308 = sub i32 %307, 2
  store i32 %308, ptr %29, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %337, %306
  %310 = load i16, ptr %26, align 2, !tbaa !15
  %311 = icmp ne i16 %310, 0
  br i1 %311, label %312, label %340

312:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #4
  %313 = load i16, ptr %25, align 2, !tbaa !15
  %314 = zext i16 %313 to i32
  %315 = ashr i32 %314, 1
  %316 = trunc i32 %315 to i16
  store i16 %316, ptr %25, align 2, !tbaa !15
  %317 = load ptr, ptr %6, align 8, !tbaa !5
  %318 = load i32, ptr %29, align 4, !tbaa !9
  %319 = zext i32 %318 to i64
  %320 = getelementptr inbounds i8, ptr %317, i64 %319
  %321 = load i16, ptr %25, align 2, !tbaa !15
  %322 = zext i16 %321 to i32
  %323 = mul nsw i32 %322, 2
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i8, ptr %320, i64 %324
  %326 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %325)
  store i16 %326, ptr %30, align 2, !tbaa !15
  %327 = load i32, ptr %5, align 4, !tbaa !9
  %328 = load i16, ptr %30, align 2, !tbaa !15
  %329 = zext i16 %328 to i32
  %330 = icmp sgt i32 %327, %329
  br i1 %330, label %331, label %337

331:                                              ; preds = %312
  %332 = load i16, ptr %25, align 2, !tbaa !15
  %333 = zext i16 %332 to i32
  %334 = mul nsw i32 %333, 2
  %335 = load i32, ptr %29, align 4, !tbaa !9
  %336 = add i32 %335, %334
  store i32 %336, ptr %29, align 4, !tbaa !9
  br label %337

337:                                              ; preds = %331, %312
  %338 = load i16, ptr %26, align 2, !tbaa !15
  %339 = add i16 %338, -1
  store i16 %339, ptr %26, align 2, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #4
  br label %309, !llvm.loop !18

340:                                              ; preds = %309
  %341 = load i32, ptr %29, align 4, !tbaa !9
  %342 = add i32 %341, 2
  store i32 %342, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #4
  %343 = load i32, ptr %29, align 4, !tbaa !9
  %344 = load i32, ptr %28, align 4, !tbaa !9
  %345 = sub i32 %343, %344
  %346 = lshr i32 %345, 1
  %347 = trunc i32 %346 to i16
  store i16 %347, ptr %33, align 2, !tbaa !15
  %348 = load i32, ptr %5, align 4, !tbaa !9
  %349 = load ptr, ptr %6, align 8, !tbaa !5
  %350 = load i32, ptr %28, align 4, !tbaa !9
  %351 = zext i32 %350 to i64
  %352 = getelementptr inbounds i8, ptr %349, i64 %351
  %353 = load i16, ptr %33, align 2, !tbaa !15
  %354 = zext i16 %353 to i32
  %355 = mul nsw i32 2, %354
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i8, ptr %352, i64 %356
  %358 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %357)
  %359 = zext i16 %358 to i32
  %360 = icmp sle i32 %348, %359
  br i1 %360, label %361, label %362

361:                                              ; preds = %340
  br label %364

362:                                              ; preds = %340
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.10, i32 noundef 1577, ptr noundef @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #5
  unreachable

363:                                              ; No predecessors!
  br label %364

364:                                              ; preds = %363, %361
  %365 = load ptr, ptr %6, align 8, !tbaa !5
  %366 = load i32, ptr %7, align 4, !tbaa !9
  %367 = zext i32 %366 to i64
  %368 = getelementptr inbounds i8, ptr %365, i64 %367
  %369 = getelementptr inbounds i8, ptr %368, i64 14
  %370 = load i16, ptr %24, align 2, !tbaa !15
  %371 = zext i16 %370 to i32
  %372 = mul nsw i32 %371, 2
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds i8, ptr %369, i64 %373
  %375 = getelementptr inbounds i8, ptr %374, i64 2
  %376 = load i16, ptr %33, align 2, !tbaa !15
  %377 = zext i16 %376 to i32
  %378 = mul nsw i32 2, %377
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds i8, ptr %375, i64 %379
  %381 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %380)
  store i16 %381, ptr %32, align 2, !tbaa !15
  %382 = load i32, ptr %5, align 4, !tbaa !9
  %383 = load i16, ptr %32, align 2, !tbaa !15
  %384 = zext i16 %383 to i32
  %385 = icmp slt i32 %382, %384
  br i1 %385, label %386, label %387

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

387:                                              ; preds = %364
  %388 = load ptr, ptr %6, align 8, !tbaa !5
  %389 = load i32, ptr %7, align 4, !tbaa !9
  %390 = zext i32 %389 to i64
  %391 = getelementptr inbounds i8, ptr %388, i64 %390
  %392 = getelementptr inbounds i8, ptr %391, i64 14
  %393 = load i16, ptr %24, align 2, !tbaa !15
  %394 = zext i16 %393 to i32
  %395 = mul nsw i32 %394, 6
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds i8, ptr %392, i64 %396
  %398 = getelementptr inbounds i8, ptr %397, i64 2
  %399 = load i16, ptr %33, align 2, !tbaa !15
  %400 = zext i16 %399 to i32
  %401 = mul nsw i32 2, %400
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i8, ptr %398, i64 %402
  %404 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %403)
  store i16 %404, ptr %31, align 2, !tbaa !15
  %405 = load i16, ptr %31, align 2, !tbaa !15
  %406 = zext i16 %405 to i32
  %407 = icmp eq i32 %406, 0
  br i1 %407, label %408, label %431

408:                                              ; preds = %387
  %409 = load i32, ptr %5, align 4, !tbaa !9
  %410 = load ptr, ptr %6, align 8, !tbaa !5
  %411 = load i32, ptr %7, align 4, !tbaa !9
  %412 = zext i32 %411 to i64
  %413 = getelementptr inbounds i8, ptr %410, i64 %412
  %414 = getelementptr inbounds i8, ptr %413, i64 14
  %415 = load i16, ptr %24, align 2, !tbaa !15
  %416 = zext i16 %415 to i32
  %417 = mul nsw i32 %416, 4
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i8, ptr %414, i64 %418
  %420 = getelementptr inbounds i8, ptr %419, i64 2
  %421 = load i16, ptr %33, align 2, !tbaa !15
  %422 = zext i16 %421 to i32
  %423 = mul nsw i32 2, %422
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds i8, ptr %420, i64 %424
  %426 = call noundef signext i16 @_ZL7ttSHORTPh(ptr noundef %425)
  %427 = sext i16 %426 to i32
  %428 = add nsw i32 %409, %427
  %429 = trunc i32 %428 to i16
  %430 = zext i16 %429 to i32
  store i32 %430, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %461

431:                                              ; preds = %387
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  %433 = load i16, ptr %31, align 2, !tbaa !15
  %434 = zext i16 %433 to i32
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i8, ptr %432, i64 %435
  %437 = load i32, ptr %5, align 4, !tbaa !9
  %438 = load i16, ptr %32, align 2, !tbaa !15
  %439 = zext i16 %438 to i32
  %440 = sub nsw i32 %437, %439
  %441 = mul nsw i32 %440, 2
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i8, ptr %436, i64 %442
  %444 = load i32, ptr %7, align 4, !tbaa !9
  %445 = zext i32 %444 to i64
  %446 = getelementptr inbounds i8, ptr %443, i64 %445
  %447 = getelementptr inbounds i8, ptr %446, i64 14
  %448 = load i16, ptr %24, align 2, !tbaa !15
  %449 = zext i16 %448 to i32
  %450 = mul nsw i32 %449, 6
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i8, ptr %447, i64 %451
  %453 = getelementptr inbounds i8, ptr %452, i64 2
  %454 = load i16, ptr %33, align 2, !tbaa !15
  %455 = zext i16 %454 to i32
  %456 = mul nsw i32 2, %455
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds i8, ptr %453, i64 %457
  %459 = call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %458)
  %460 = zext i16 %459 to i32
  store i32 %460, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %461

461:                                              ; preds = %431, %408, %386
  call void @llvm.lifetime.end.p0(i64 2, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #4
  br label %462

462:                                              ; preds = %461, %285
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #4
  br label %559

463:                                              ; preds = %242
  %464 = load i16, ptr %8, align 2, !tbaa !15
  %465 = zext i16 %464 to i32
  %466 = icmp eq i32 %465, 12
  br i1 %466, label %471, label %467

467:                                              ; preds = %463
  %468 = load i16, ptr %8, align 2, !tbaa !15
  %469 = zext i16 %468 to i32
  %470 = icmp eq i32 %469, 13
  br i1 %470, label %471, label %554

471:                                              ; preds = %467, %463
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %472 = load ptr, ptr %6, align 8, !tbaa !5
  %473 = load i32, ptr %7, align 4, !tbaa !9
  %474 = zext i32 %473 to i64
  %475 = getelementptr inbounds i8, ptr %472, i64 %474
  %476 = getelementptr inbounds i8, ptr %475, i64 12
  %477 = call noundef i32 @_ZL7ttULONGPh(ptr noundef %476)
  store i32 %477, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  store i32 0, ptr %35, align 4, !tbaa !9
  %478 = load i32, ptr %34, align 4, !tbaa !9
  store i32 %478, ptr %36, align 4, !tbaa !9
  br label %479

479:                                              ; preds = %551, %471
  %480 = load i32, ptr %35, align 4, !tbaa !9
  %481 = load i32, ptr %36, align 4, !tbaa !9
  %482 = icmp slt i32 %480, %481
  br i1 %482, label %483, label %552

483:                                              ; preds = %479
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  %484 = load i32, ptr %35, align 4, !tbaa !9
  %485 = load i32, ptr %36, align 4, !tbaa !9
  %486 = load i32, ptr %35, align 4, !tbaa !9
  %487 = sub nsw i32 %485, %486
  %488 = ashr i32 %487, 1
  %489 = add nsw i32 %484, %488
  store i32 %489, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %490 = load ptr, ptr %6, align 8, !tbaa !5
  %491 = load i32, ptr %7, align 4, !tbaa !9
  %492 = zext i32 %491 to i64
  %493 = getelementptr inbounds i8, ptr %490, i64 %492
  %494 = getelementptr inbounds i8, ptr %493, i64 16
  %495 = load i32, ptr %37, align 4, !tbaa !9
  %496 = mul nsw i32 %495, 12
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds i8, ptr %494, i64 %497
  %499 = call noundef i32 @_ZL7ttULONGPh(ptr noundef %498)
  store i32 %499, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %500 = load ptr, ptr %6, align 8, !tbaa !5
  %501 = load i32, ptr %7, align 4, !tbaa !9
  %502 = zext i32 %501 to i64
  %503 = getelementptr inbounds i8, ptr %500, i64 %502
  %504 = getelementptr inbounds i8, ptr %503, i64 16
  %505 = load i32, ptr %37, align 4, !tbaa !9
  %506 = mul nsw i32 %505, 12
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i8, ptr %504, i64 %507
  %509 = getelementptr inbounds i8, ptr %508, i64 4
  %510 = call noundef i32 @_ZL7ttULONGPh(ptr noundef %509)
  store i32 %510, ptr %39, align 4, !tbaa !9
  %511 = load i32, ptr %5, align 4, !tbaa !9
  %512 = load i32, ptr %38, align 4, !tbaa !9
  %513 = icmp ult i32 %511, %512
  br i1 %513, label %514, label %516

514:                                              ; preds = %483
  %515 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %515, ptr %36, align 4, !tbaa !9
  br label %548

516:                                              ; preds = %483
  %517 = load i32, ptr %5, align 4, !tbaa !9
  %518 = load i32, ptr %39, align 4, !tbaa !9
  %519 = icmp ugt i32 %517, %518
  br i1 %519, label %520, label %523

520:                                              ; preds = %516
  %521 = load i32, ptr %37, align 4, !tbaa !9
  %522 = add nsw i32 %521, 1
  store i32 %522, ptr %35, align 4, !tbaa !9
  br label %547

523:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  %524 = load ptr, ptr %6, align 8, !tbaa !5
  %525 = load i32, ptr %7, align 4, !tbaa !9
  %526 = zext i32 %525 to i64
  %527 = getelementptr inbounds i8, ptr %524, i64 %526
  %528 = getelementptr inbounds i8, ptr %527, i64 16
  %529 = load i32, ptr %37, align 4, !tbaa !9
  %530 = mul nsw i32 %529, 12
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds i8, ptr %528, i64 %531
  %533 = getelementptr inbounds i8, ptr %532, i64 8
  %534 = call noundef i32 @_ZL7ttULONGPh(ptr noundef %533)
  store i32 %534, ptr %40, align 4, !tbaa !9
  %535 = load i16, ptr %8, align 2, !tbaa !15
  %536 = zext i16 %535 to i32
  %537 = icmp eq i32 %536, 12
  br i1 %537, label %538, label %544

538:                                              ; preds = %523
  %539 = load i32, ptr %40, align 4, !tbaa !9
  %540 = load i32, ptr %5, align 4, !tbaa !9
  %541 = add i32 %539, %540
  %542 = load i32, ptr %38, align 4, !tbaa !9
  %543 = sub i32 %541, %542
  store i32 %543, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %546

544:                                              ; preds = %523
  %545 = load i32, ptr %40, align 4, !tbaa !9
  store i32 %545, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %546

546:                                              ; preds = %544, %538
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  br label %549

547:                                              ; preds = %520
  br label %548

548:                                              ; preds = %547, %514
  store i32 0, ptr %10, align 4
  br label %549

549:                                              ; preds = %548, %546
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  %550 = load i32, ptr %10, align 4
  switch i32 %550, label %553 [
    i32 0, label %551
  ]

551:                                              ; preds = %549
  br label %479, !llvm.loop !20

552:                                              ; preds = %479
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %553

553:                                              ; preds = %552, %549
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %559

554:                                              ; preds = %467
  br label %555

555:                                              ; preds = %554
  br label %556

556:                                              ; preds = %555
  br label %557

557:                                              ; preds = %556
  br label %558

558:                                              ; preds = %557
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.10, i32 noundef 1612, ptr noundef @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #5
  unreachable

559:                                              ; preds = %553, %462, %241, %124, %80
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  %560 = load i32, ptr %3, align 4
  ret i32 %560
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL7ttULONGPh(ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #4 = { nounwind }
attributes #5 = { 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, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !13, i64 80, !13, i64 96, !13, i64 112, !13, i64 128, !13, i64 144, !13, i64 160}
!13 = !{!"_ZTS10stbtt__buf", !6, i64 0, !10, i64 8, !10, i64 12}
!14 = !{!12, !10, i64 56}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !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"

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, 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 #1 {
  %3 = getelementptr inbounds i8, ptr %0, i64 8
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 56
  %6 = load i32, ptr %5, align 8, !tbaa !12
  %7 = zext i32 %6 to i64
  %8 = getelementptr inbounds i8, ptr %4, i64 %7
  %9 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %8)
  switch i16 %9, label %165 [
    i16 0, label %10
    i16 6, label %22
    i16 2, label %40
    i16 4, label %82
  ]

10:                                               ; preds = %2
  %11 = getelementptr inbounds i8, ptr %8, i64 2
  %12 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(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 !13
  %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 @_ZL8ttUSHORTPh(ptr noundef nonnull %23)
  %25 = zext i16 %24 to i32
  %26 = getelementptr inbounds i8, ptr %8, i64 8
  %27 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %26)
  %.not186 = icmp ugt i32 %25, %1
  br i1 %.not186, 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 @_ZL8ttUSHORTPh(ptr noundef nonnull %37)
  %39 = zext i16 %38 to i32
  br label %.loopexit

40:                                               ; preds = %2
  %41 = lshr i32 %1, 4
  %42 = and i32 %41, 4080
  %43 = and i32 %1, 255
  %44 = getelementptr inbounds i8, ptr %8, i64 6
  %45 = getelementptr inbounds i8, ptr %8, i64 1030
  %46 = zext nneg i32 %42 to i64
  %47 = getelementptr inbounds i16, ptr %44, i64 %46
  %48 = load i16, ptr %47, align 2, !tbaa !14
  %.not184 = icmp eq i16 %48, 0
  br i1 %.not184, label %72, label %49

49:                                               ; preds = %40
  %50 = lshr i16 %48, 3
  %51 = zext nneg i16 %50 to i64
  %52 = getelementptr inbounds i16, ptr %45, i64 %51
  %53 = load i16, ptr %52, align 2, !tbaa !14
  %54 = zext i16 %53 to i32
  %.not185 = icmp ult i32 %43, %54
  br i1 %.not185, label %.loopexit, label %55

55:                                               ; preds = %49
  %56 = getelementptr inbounds i8, ptr %52, i64 2
  %57 = load i16, ptr %56, align 2, !tbaa !14
  %58 = zext i16 %57 to i32
  %59 = add nuw nsw i32 %58, %54
  %60 = icmp ult i32 %43, %59
  br i1 %60, label %61, label %.loopexit

61:                                               ; preds = %55
  %62 = getelementptr inbounds i8, ptr %52, i64 6
  %63 = load i16, ptr %62, align 2, !tbaa !14
  %64 = zext i16 %63 to i64
  %65 = getelementptr inbounds i16, ptr %62, i64 %64
  %66 = load i16, ptr %65, align 2, !tbaa !14
  %67 = icmp eq i16 %66, 0
  br i1 %67, label %.loopexit, label %68

68:                                               ; preds = %61
  %69 = getelementptr inbounds i8, ptr %52, i64 4
  %70 = load i16, ptr %69, align 2, !tbaa !14
  %.narrow = add i16 %70, %66
  %71 = zext i16 %.narrow to i32
  br label %.loopexit

72:                                               ; preds = %40
  %73 = getelementptr inbounds i8, ptr %8, i64 1036
  %74 = load i16, ptr %73, align 2, !tbaa !14
  %75 = zext i16 %74 to i32
  %76 = or disjoint i32 %42, 3
  %77 = add nuw nsw i32 %76, %75
  %78 = zext nneg i32 %77 to i64
  %79 = getelementptr inbounds i16, ptr %45, i64 %78
  %80 = load i16, ptr %79, align 2, !tbaa !14
  %81 = zext i16 %80 to i32
  br label %.loopexit

82:                                               ; preds = %2
  %83 = getelementptr inbounds i8, ptr %8, i64 6
  %84 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %83)
  %85 = lshr i16 %84, 1
  %86 = getelementptr inbounds i8, ptr %8, i64 8
  %87 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %86)
  %88 = getelementptr inbounds i8, ptr %8, i64 10
  %89 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %88)
  %90 = getelementptr inbounds i8, ptr %8, i64 12
  %91 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %90)
  %92 = icmp sgt i32 %1, 65535
  br i1 %92, label %.loopexit, label %93

93:                                               ; preds = %82
  %94 = add i32 %6, 14
  %95 = and i16 %91, -2
  %96 = zext i32 %94 to i64
  %97 = getelementptr inbounds i8, ptr %4, i64 %96
  %98 = zext i16 %95 to i64
  %99 = getelementptr inbounds i8, ptr %97, i64 %98
  %100 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %99)
  %101 = zext i16 %100 to i32
  %.not = icmp sgt i32 %101, %1
  %102 = zext i16 %95 to i32
  %103 = select i1 %.not, i32 0, i32 %102
  %.0165 = add i32 %6, 12
  %104 = add i32 %.0165, %103
  %.not182193 = icmp eq i16 %89, 0
  br i1 %.not182193, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %93, %.lr.ph
  %.0163.in196 = phi i16 [ %.0163, %.lr.ph ], [ %87, %93 ]
  %.0164195 = phi i16 [ %115, %.lr.ph ], [ %89, %93 ]
  %.1166194 = phi i32 [ %.2167, %.lr.ph ], [ %104, %93 ]
  %.0163 = lshr i16 %.0163.in196, 1
  %105 = zext i32 %.1166194 to i64
  %106 = getelementptr inbounds i8, ptr %4, i64 %105
  %107 = and i16 %.0163, 32766
  %108 = zext nneg i16 %107 to i64
  %109 = getelementptr inbounds i8, ptr %106, i64 %108
  %110 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %109)
  %111 = zext i16 %110 to i32
  %112 = icmp slt i32 %111, %1
  %113 = zext nneg i16 %107 to i32
  %114 = select i1 %112, i32 %113, i32 0
  %.2167 = add i32 %114, %.1166194
  %115 = add i16 %.0164195, -1
  %.not182 = icmp eq i16 %115, 0
  br i1 %.not182, label %._crit_edge, label %.lr.ph, !llvm.loop !16

._crit_edge:                                      ; preds = %.lr.ph, %93
  %.1166.lcssa = phi i32 [ %104, %93 ], [ %.2167, %.lr.ph ]
  %reass.sub = sub i32 %.1166.lcssa, %6
  %116 = add i32 %reass.sub, 131060
  %117 = and i32 %116, 131070
  %118 = zext nneg i32 %117 to i64
  %119 = getelementptr inbounds i8, ptr %97, i64 %118
  %120 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef %119)
  %121 = zext i16 %120 to i32
  %.not183 = icmp slt i32 %121, %1
  br i1 %.not183, label %122, label %123

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

123:                                              ; preds = %._crit_edge
  %124 = getelementptr inbounds i8, ptr %8, i64 14
  %125 = zext nneg i16 %85 to i32
  %126 = shl nuw nsw i32 %125, 1
  %127 = zext nneg i32 %126 to i64
  %128 = getelementptr inbounds i8, ptr %124, i64 %127
  %129 = getelementptr inbounds i8, ptr %128, i64 2
  %130 = getelementptr inbounds i8, ptr %129, i64 %118
  %131 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %130)
  %132 = zext i16 %131 to i32
  %133 = icmp sgt i32 %132, %1
  br i1 %133, label %164, label %134

134:                                              ; preds = %123
  %135 = mul nuw nsw i32 %125, 6
  %136 = zext nneg i32 %135 to i64
  %137 = getelementptr inbounds i8, ptr %124, i64 %136
  %138 = getelementptr inbounds i8, ptr %137, i64 2
  %139 = getelementptr inbounds i8, ptr %138, i64 %118
  %140 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %139)
  %141 = icmp eq i16 %140, 0
  br i1 %141, label %142, label %151

142:                                              ; preds = %134
  %143 = shl nuw nsw i32 %125, 2
  %144 = zext nneg i32 %143 to i64
  %145 = getelementptr inbounds i8, ptr %124, i64 %144
  %146 = getelementptr inbounds i8, ptr %145, i64 2
  %147 = getelementptr inbounds i8, ptr %146, i64 %118
  %148 = tail call noundef signext i16 @_ZL7ttSHORTPh(ptr noundef nonnull %147)
  %149 = trunc i32 %1 to i16
  %150 = add i16 %148, %149
  br label %164

151:                                              ; preds = %134
  %152 = zext i16 %140 to i64
  %153 = getelementptr inbounds i8, ptr %4, i64 %152
  %154 = sub nsw i32 %1, %132
  %155 = shl nsw i32 %154, 1
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds i8, ptr %153, i64 %156
  %158 = getelementptr inbounds i8, ptr %157, i64 %7
  %159 = getelementptr inbounds i8, ptr %158, i64 14
  %160 = getelementptr inbounds i8, ptr %159, i64 %136
  %161 = getelementptr inbounds i8, ptr %160, i64 2
  %162 = getelementptr inbounds i8, ptr %161, i64 %118
  %163 = tail call noundef zeroext i16 @_ZL8ttUSHORTPh(ptr noundef nonnull %162)
  br label %164

164:                                              ; preds = %123, %151, %142
  %.5.shrunk = phi i16 [ %150, %142 ], [ %163, %151 ], [ 0, %123 ]
  %.5 = zext i16 %.5.shrunk to i32
  br label %.loopexit

165:                                              ; preds = %2
  %166 = icmp eq i16 %9, 12
  %167 = and i16 %9, -2
  %or.cond = icmp eq i16 %167, 12
  br i1 %or.cond, label %168, label %194

168:                                              ; preds = %165
  %169 = getelementptr inbounds i8, ptr %8, i64 12
  %170 = tail call noundef i32 @_ZL7ttULONGPh(ptr noundef nonnull %169)
  %171 = icmp sgt i32 %170, 0
  br i1 %171, label %.lr.ph200, label %.loopexit

.lr.ph200:                                        ; preds = %168
  %172 = getelementptr inbounds i8, ptr %8, i64 16
  br label %173

173:                                              ; preds = %.lr.ph200, %192
  %.0157198 = phi i32 [ %170, %.lr.ph200 ], [ %.2159, %192 ]
  %.0160197 = phi i32 [ 0, %.lr.ph200 ], [ %.2162, %192 ]
  %174 = sub nsw i32 %.0157198, %.0160197
  %175 = ashr i32 %174, 1
  %176 = add nsw i32 %175, %.0160197
  %177 = mul nsw i32 %176, 12
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds i8, ptr %172, i64 %178
  %180 = tail call noundef i32 @_ZL7ttULONGPh(ptr noundef nonnull %179)
  %181 = getelementptr inbounds i8, ptr %179, i64 4
  %182 = tail call noundef i32 @_ZL7ttULONGPh(ptr noundef nonnull %181)
  %183 = icmp ugt i32 %180, %1
  br i1 %183, label %192, label %184

184:                                              ; preds = %173
  %185 = icmp ult i32 %182, %1
  br i1 %185, label %186, label %.thread

186:                                              ; preds = %184
  %187 = add nsw i32 %176, 1
  br label %192

.thread:                                          ; preds = %184
  %188 = getelementptr inbounds i8, ptr %179, i64 8
  %189 = tail call noundef i32 @_ZL7ttULONGPh(ptr noundef nonnull %188)
  %190 = sub i32 %1, %180
  %191 = select i1 %166, i32 %190, i32 0
  %.8 = add i32 %189, %191
  br label %.loopexit

192:                                              ; preds = %186, %173
  %.2162 = phi i32 [ %187, %186 ], [ %.0160197, %173 ]
  %.2159 = phi i32 [ %.0157198, %186 ], [ %176, %173 ]
  %193 = icmp slt i32 %.2162, %.2159
  br i1 %193, label %173, label %.loopexit, !llvm.loop !18

194:                                              ; preds = %165
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.10, i32 noundef 1612, ptr noundef nonnull @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #2
  unreachable

.loopexit:                                        ; preds = %192, %168, %.thread, %164, %82, %72, %49, %55, %68, %61, %32, %28, %22, %16, %10
  %.11 = phi i32 [ %21, %16 ], [ 0, %10 ], [ %39, %32 ], [ 0, %28 ], [ 0, %22 ], [ %81, %72 ], [ %71, %68 ], [ 0, %61 ], [ 0, %55 ], [ 0, %49 ], [ %.5, %164 ], [ 0, %82 ], [ %.8, %.thread ], [ 0, %168 ], [ 0, %192 ]
  ret i32 %.11
}

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

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

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

attributes #0 = { 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 #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 }

!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, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !11, i64 80, !11, i64 96, !11, i64 112, !11, i64 128, !11, i64 144, !11, i64 160}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"_ZTS10stbtt__buf", !7, i64 0, !10, i64 8, !10, i64 12}
!12 = !{!6, !10, i64 56}
!13 = !{!8, !8, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"short", !8, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}


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