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

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

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

@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [113 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 [58 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL7ttULONGPKh(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
declare hidden noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef) #0

; 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 i16, align 2
  %14 = alloca i16, align 2
  %15 = alloca i16, align 2
  %16 = alloca i16, align 2
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %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 i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  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
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %30, i32 0, i32 1
  %32 = load ptr, ptr %31, align 8, !tbaa !11
  store ptr %32, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.stbtt_fontinfo, ptr %33, i32 0, i32 10
  %35 = load i32, ptr %34, align 8, !tbaa !13
  store i32 %35, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #4
  %36 = load ptr, ptr %6, align 8, !tbaa !5
  %37 = load i32, ptr %7, align 4, !tbaa !9
  %38 = zext i32 %37 to i64
  %39 = getelementptr inbounds i8, ptr %36, i64 %38
  %40 = getelementptr inbounds i8, ptr %39, i64 0
  %41 = call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %40)
  store i16 %41, ptr %8, align 2, !tbaa !14
  %42 = load i16, ptr %8, align 2, !tbaa !14
  %43 = zext i16 %42 to i32
  %44 = icmp eq i32 %43, 0
  br i1 %44, label %45, label %70

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

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

68:                                               ; preds = %45
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %69

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

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

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

92:                                               ; preds = %74
  %93 = load i32, ptr %5, align 4, !tbaa !9
  %94 = load i32, ptr %11, align 4, !tbaa !9
  %95 = load i32, ptr %12, align 4, !tbaa !9
  %96 = add i32 %94, %95
  %97 = icmp ult i32 %93, %96
  br i1 %97, label %98, label %112

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

112:                                              ; preds = %92, %74
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %113

113:                                              ; preds = %112, %98
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %436

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

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

119:                                              ; preds = %114
  %120 = load i16, ptr %8, align 2, !tbaa !14
  %121 = zext i16 %120 to i32
  %122 = icmp eq i32 %121, 4
  br i1 %122, label %123, label %340

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

162:                                              ; preds = %123
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %339

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

177:                                              ; preds = %163
  %178 = load i16, ptr %16, align 2, !tbaa !14
  %179 = zext i16 %178 to i32
  %180 = mul nsw i32 %179, 2
  %181 = load i32, ptr %18, align 4, !tbaa !9
  %182 = add i32 %181, %180
  store i32 %182, ptr %18, align 4, !tbaa !9
  br label %183

183:                                              ; preds = %177, %163
  %184 = load i32, ptr %18, align 4, !tbaa !9
  %185 = sub i32 %184, 2
  store i32 %185, ptr %18, align 4, !tbaa !9
  br label %186

186:                                              ; preds = %214, %183
  %187 = load i16, ptr %15, align 2, !tbaa !14
  %188 = icmp ne i16 %187, 0
  br i1 %188, label %189, label %217

189:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #4
  %190 = load i16, ptr %14, align 2, !tbaa !14
  %191 = zext i16 %190 to i32
  %192 = ashr i32 %191, 1
  %193 = trunc i32 %192 to i16
  store i16 %193, ptr %14, align 2, !tbaa !14
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  %195 = load i32, ptr %18, align 4, !tbaa !9
  %196 = zext i32 %195 to i64
  %197 = getelementptr inbounds i8, ptr %194, i64 %196
  %198 = load i16, ptr %14, align 2, !tbaa !14
  %199 = zext i16 %198 to i32
  %200 = mul nsw i32 %199, 2
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i8, ptr %197, i64 %201
  %203 = call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %202)
  store i16 %203, ptr %19, align 2, !tbaa !14
  %204 = load i32, ptr %5, align 4, !tbaa !9
  %205 = load i16, ptr %19, align 2, !tbaa !14
  %206 = zext i16 %205 to i32
  %207 = icmp sgt i32 %204, %206
  br i1 %207, label %208, label %214

208:                                              ; preds = %189
  %209 = load i16, ptr %14, align 2, !tbaa !14
  %210 = zext i16 %209 to i32
  %211 = mul nsw i32 %210, 2
  %212 = load i32, ptr %18, align 4, !tbaa !9
  %213 = add i32 %212, %211
  store i32 %213, ptr %18, align 4, !tbaa !9
  br label %214

214:                                              ; preds = %208, %189
  %215 = load i16, ptr %15, align 2, !tbaa !14
  %216 = add i16 %215, -1
  store i16 %216, ptr %15, align 2, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #4
  br label %186, !llvm.loop !17

217:                                              ; preds = %186
  %218 = load i32, ptr %18, align 4, !tbaa !9
  %219 = add i32 %218, 2
  store i32 %219, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #4
  %220 = load i32, ptr %18, align 4, !tbaa !9
  %221 = load i32, ptr %17, align 4, !tbaa !9
  %222 = sub i32 %220, %221
  %223 = lshr i32 %222, 1
  %224 = trunc i32 %223 to i16
  store i16 %224, ptr %22, align 2, !tbaa !14
  %225 = load i32, ptr %5, align 4, !tbaa !9
  %226 = load ptr, ptr %6, align 8, !tbaa !5
  %227 = load i32, ptr %17, align 4, !tbaa !9
  %228 = zext i32 %227 to i64
  %229 = getelementptr inbounds i8, ptr %226, i64 %228
  %230 = load i16, ptr %22, align 2, !tbaa !14
  %231 = zext i16 %230 to i32
  %232 = mul nsw i32 2, %231
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds i8, ptr %229, i64 %233
  %235 = call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %234)
  %236 = zext i16 %235 to i32
  %237 = icmp sle i32 %225, %236
  br i1 %237, label %238, label %239

238:                                              ; preds = %217
  br label %241

239:                                              ; preds = %217
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.10, i32 noundef 1141, ptr noundef @__PRETTY_FUNCTION__.stbtt_FindGlyphIndex) #5
  unreachable

240:                                              ; No predecessors!
  br label %241

241:                                              ; preds = %240, %238
  %242 = load ptr, ptr %6, align 8, !tbaa !5
  %243 = load i32, ptr %7, align 4, !tbaa !9
  %244 = zext i32 %243 to i64
  %245 = getelementptr inbounds i8, ptr %242, i64 %244
  %246 = getelementptr inbounds i8, ptr %245, i64 14
  %247 = load i16, ptr %13, align 2, !tbaa !14
  %248 = zext i16 %247 to i32
  %249 = mul nsw i32 %248, 2
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i8, ptr %246, i64 %250
  %252 = getelementptr inbounds i8, ptr %251, i64 2
  %253 = load i16, ptr %22, align 2, !tbaa !14
  %254 = zext i16 %253 to i32
  %255 = mul nsw i32 2, %254
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds i8, ptr %252, i64 %256
  %258 = call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %257)
  store i16 %258, ptr %21, align 2, !tbaa !14
  %259 = load i32, ptr %5, align 4, !tbaa !9
  %260 = load i16, ptr %21, align 2, !tbaa !14
  %261 = zext i16 %260 to i32
  %262 = icmp slt i32 %259, %261
  br i1 %262, label %263, label %264

263:                                              ; preds = %241
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %338

264:                                              ; preds = %241
  %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 14
  %270 = load i16, ptr %13, align 2, !tbaa !14
  %271 = zext i16 %270 to i32
  %272 = mul nsw i32 %271, 6
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i8, ptr %269, i64 %273
  %275 = getelementptr inbounds i8, ptr %274, i64 2
  %276 = load i16, ptr %22, align 2, !tbaa !14
  %277 = zext i16 %276 to i32
  %278 = mul nsw i32 2, %277
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i8, ptr %275, i64 %279
  %281 = call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %280)
  store i16 %281, ptr %20, align 2, !tbaa !14
  %282 = load i16, ptr %20, align 2, !tbaa !14
  %283 = zext i16 %282 to i32
  %284 = icmp eq i32 %283, 0
  br i1 %284, label %285, label %308

285:                                              ; preds = %264
  %286 = load i32, ptr %5, align 4, !tbaa !9
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = load i32, ptr %7, align 4, !tbaa !9
  %289 = zext i32 %288 to i64
  %290 = getelementptr inbounds i8, ptr %287, i64 %289
  %291 = getelementptr inbounds i8, ptr %290, i64 14
  %292 = load i16, ptr %13, align 2, !tbaa !14
  %293 = zext i16 %292 to i32
  %294 = mul nsw i32 %293, 4
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds i8, ptr %291, i64 %295
  %297 = getelementptr inbounds i8, ptr %296, i64 2
  %298 = load i16, ptr %22, align 2, !tbaa !14
  %299 = zext i16 %298 to i32
  %300 = mul nsw i32 2, %299
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i8, ptr %297, i64 %301
  %303 = call noundef signext i16 @_ZL7ttSHORTPKh(ptr noundef %302)
  %304 = sext i16 %303 to i32
  %305 = add nsw i32 %286, %304
  %306 = trunc i32 %305 to i16
  %307 = zext i16 %306 to i32
  store i32 %307, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %338

308:                                              ; preds = %264
  %309 = load ptr, ptr %6, align 8, !tbaa !5
  %310 = load i16, ptr %20, align 2, !tbaa !14
  %311 = zext i16 %310 to i32
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds i8, ptr %309, i64 %312
  %314 = load i32, ptr %5, align 4, !tbaa !9
  %315 = load i16, ptr %21, align 2, !tbaa !14
  %316 = zext i16 %315 to i32
  %317 = sub nsw i32 %314, %316
  %318 = mul nsw i32 %317, 2
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds i8, ptr %313, i64 %319
  %321 = load i32, ptr %7, align 4, !tbaa !9
  %322 = zext i32 %321 to i64
  %323 = getelementptr inbounds i8, ptr %320, i64 %322
  %324 = getelementptr inbounds i8, ptr %323, i64 14
  %325 = load i16, ptr %13, align 2, !tbaa !14
  %326 = zext i16 %325 to i32
  %327 = mul nsw i32 %326, 6
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i8, ptr %324, i64 %328
  %330 = getelementptr inbounds i8, ptr %329, i64 2
  %331 = load i16, ptr %22, align 2, !tbaa !14
  %332 = zext i16 %331 to i32
  %333 = mul nsw i32 2, %332
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds i8, ptr %330, i64 %334
  %336 = call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %335)
  %337 = zext i16 %336 to i32
  store i32 %337, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %338

338:                                              ; preds = %308, %285, %263
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #4
  br label %339

339:                                              ; preds = %338, %162
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #4
  br label %436

340:                                              ; preds = %119
  %341 = load i16, ptr %8, align 2, !tbaa !14
  %342 = zext i16 %341 to i32
  %343 = icmp eq i32 %342, 12
  br i1 %343, label %348, label %344

344:                                              ; preds = %340
  %345 = load i16, ptr %8, align 2, !tbaa !14
  %346 = zext i16 %345 to i32
  %347 = icmp eq i32 %346, 13
  br i1 %347, label %348, label %431

348:                                              ; preds = %344, %340
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %349 = load ptr, ptr %6, align 8, !tbaa !5
  %350 = load i32, ptr %7, align 4, !tbaa !9
  %351 = zext i32 %350 to i64
  %352 = getelementptr inbounds i8, ptr %349, i64 %351
  %353 = getelementptr inbounds i8, ptr %352, i64 12
  %354 = call noundef i32 @_ZL7ttULONGPKh(ptr noundef %353)
  store i32 %354, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 0, ptr %24, align 4, !tbaa !9
  %355 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %355, ptr %25, align 4, !tbaa !9
  br label %356

356:                                              ; preds = %428, %348
  %357 = load i32, ptr %24, align 4, !tbaa !9
  %358 = load i32, ptr %25, align 4, !tbaa !9
  %359 = icmp slt i32 %357, %358
  br i1 %359, label %360, label %429

360:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %361 = load i32, ptr %24, align 4, !tbaa !9
  %362 = load i32, ptr %25, align 4, !tbaa !9
  %363 = load i32, ptr %24, align 4, !tbaa !9
  %364 = sub nsw i32 %362, %363
  %365 = ashr i32 %364, 1
  %366 = add nsw i32 %361, %365
  store i32 %366, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %367 = load ptr, ptr %6, align 8, !tbaa !5
  %368 = load i32, ptr %7, align 4, !tbaa !9
  %369 = zext i32 %368 to i64
  %370 = getelementptr inbounds i8, ptr %367, i64 %369
  %371 = getelementptr inbounds i8, ptr %370, i64 16
  %372 = load i32, ptr %26, align 4, !tbaa !9
  %373 = mul nsw i32 %372, 12
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i8, ptr %371, i64 %374
  %376 = call noundef i32 @_ZL7ttULONGPKh(ptr noundef %375)
  store i32 %376, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %377 = load ptr, ptr %6, align 8, !tbaa !5
  %378 = load i32, ptr %7, align 4, !tbaa !9
  %379 = zext i32 %378 to i64
  %380 = getelementptr inbounds i8, ptr %377, i64 %379
  %381 = getelementptr inbounds i8, ptr %380, i64 16
  %382 = load i32, ptr %26, align 4, !tbaa !9
  %383 = mul nsw i32 %382, 12
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i8, ptr %381, i64 %384
  %386 = getelementptr inbounds i8, ptr %385, i64 4
  %387 = call noundef i32 @_ZL7ttULONGPKh(ptr noundef %386)
  store i32 %387, ptr %28, align 4, !tbaa !9
  %388 = load i32, ptr %5, align 4, !tbaa !9
  %389 = load i32, ptr %27, align 4, !tbaa !9
  %390 = icmp ult i32 %388, %389
  br i1 %390, label %391, label %393

391:                                              ; preds = %360
  %392 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %392, ptr %25, align 4, !tbaa !9
  br label %425

393:                                              ; preds = %360
  %394 = load i32, ptr %5, align 4, !tbaa !9
  %395 = load i32, ptr %28, align 4, !tbaa !9
  %396 = icmp ugt i32 %394, %395
  br i1 %396, label %397, label %400

397:                                              ; preds = %393
  %398 = load i32, ptr %26, align 4, !tbaa !9
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %24, align 4, !tbaa !9
  br label %424

400:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %401 = load ptr, ptr %6, align 8, !tbaa !5
  %402 = load i32, ptr %7, align 4, !tbaa !9
  %403 = zext i32 %402 to i64
  %404 = getelementptr inbounds i8, ptr %401, i64 %403
  %405 = getelementptr inbounds i8, ptr %404, i64 16
  %406 = load i32, ptr %26, align 4, !tbaa !9
  %407 = mul nsw i32 %406, 12
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds i8, ptr %405, i64 %408
  %410 = getelementptr inbounds i8, ptr %409, i64 8
  %411 = call noundef i32 @_ZL7ttULONGPKh(ptr noundef %410)
  store i32 %411, ptr %29, align 4, !tbaa !9
  %412 = load i16, ptr %8, align 2, !tbaa !14
  %413 = zext i16 %412 to i32
  %414 = icmp eq i32 %413, 12
  br i1 %414, label %415, label %421

415:                                              ; preds = %400
  %416 = load i32, ptr %29, align 4, !tbaa !9
  %417 = load i32, ptr %5, align 4, !tbaa !9
  %418 = add i32 %416, %417
  %419 = load i32, ptr %27, align 4, !tbaa !9
  %420 = sub i32 %418, %419
  store i32 %420, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %423

421:                                              ; preds = %400
  %422 = load i32, ptr %29, align 4, !tbaa !9
  store i32 %422, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %423

423:                                              ; preds = %421, %415
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %426

424:                                              ; preds = %397
  br label %425

425:                                              ; preds = %424, %391
  store i32 0, ptr %10, align 4
  br label %426

426:                                              ; preds = %425, %423
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  %427 = load i32, ptr %10, align 4
  switch i32 %427, label %430 [
    i32 0, label %428
  ]

428:                                              ; preds = %426
  br label %356, !llvm.loop !19

429:                                              ; preds = %356
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %430

430:                                              ; preds = %429, %426
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %436

431:                                              ; preds = %344
  br label %432

432:                                              ; preds = %431
  br label %433

433:                                              ; preds = %432
  br label %434

434:                                              ; preds = %433
  br label %435

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

436:                                              ; preds = %430, %339, %113, %69
  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
  %437 = load i32, ptr %3, align 4
  ret i32 %437
}

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

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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}
!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 [113 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 [58 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i16 @_ZL8ttUSHORTPKh(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 @_ZL8ttUSHORTPKh(ptr noundef %8)
  switch i16 %9, label %124 [
    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 @_ZL8ttUSHORTPKh(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 @_ZL8ttUSHORTPKh(ptr noundef nonnull %23)
  %25 = zext i16 %24 to i32
  %26 = getelementptr inbounds i8, ptr %8, i64 8
  %27 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %26)
  %.not143 = icmp ugt i32 %25, %1
  br i1 %.not143, 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 @_ZL8ttUSHORTPKh(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 1102, 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 @_ZL8ttUSHORTPKh(ptr noundef nonnull %42)
  %44 = lshr i16 %43, 1
  %45 = getelementptr inbounds i8, ptr %8, i64 8
  %46 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %45)
  %47 = getelementptr inbounds i8, ptr %8, i64 10
  %48 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %47)
  %49 = getelementptr inbounds i8, ptr %8, i64 12
  %50 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %49)
  %51 = icmp sgt i32 %1, 65535
  br i1 %51, label %.loopexit, 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 @_ZL8ttUSHORTPKh(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
  %.0129 = add i32 %6, 12
  %63 = add i32 %.0129, %62
  %.not141150 = icmp eq i16 %48, 0
  br i1 %.not141150, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %52, %.lr.ph
  %.0121.in153 = phi i16 [ %.0121, %.lr.ph ], [ %46, %52 ]
  %.0122152 = phi i16 [ %74, %.lr.ph ], [ %48, %52 ]
  %.1130151 = phi i32 [ %.2131, %.lr.ph ], [ %63, %52 ]
  %.0121 = lshr i16 %.0121.in153, 1
  %64 = zext i32 %.1130151 to i64
  %65 = getelementptr inbounds i8, ptr %4, i64 %64
  %66 = and i16 %.0121, 32766
  %67 = zext nneg i16 %66 to i64
  %68 = getelementptr inbounds i8, ptr %65, i64 %67
  %69 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %68)
  %70 = zext i16 %69 to i32
  %71 = icmp slt i32 %70, %1
  %72 = zext nneg i16 %66 to i32
  %73 = select i1 %71, i32 %72, i32 0
  %.2131 = add i32 %73, %.1130151
  %74 = add i16 %.0122152, -1
  %.not141 = icmp eq i16 %74, 0
  br i1 %.not141, label %._crit_edge, label %.lr.ph, !llvm.loop !13

._crit_edge:                                      ; preds = %.lr.ph, %52
  %.1130.lcssa = phi i32 [ %63, %52 ], [ %.2131, %.lr.ph ]
  %reass.sub = sub i32 %.1130.lcssa, %6
  %75 = add i32 %reass.sub, 131060
  %76 = and i32 %75, 131070
  %77 = zext nneg i32 %76 to i64
  %78 = getelementptr inbounds i8, ptr %56, i64 %77
  %79 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef %78)
  %80 = zext i16 %79 to i32
  %.not142 = icmp slt i32 %80, %1
  br i1 %.not142, label %81, label %82

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

82:                                               ; preds = %._crit_edge
  %83 = getelementptr inbounds i8, ptr %8, i64 14
  %84 = zext nneg i16 %44 to i32
  %85 = shl nuw nsw i32 %84, 1
  %86 = zext nneg i32 %85 to i64
  %87 = getelementptr inbounds i8, ptr %83, i64 %86
  %88 = getelementptr inbounds i8, ptr %87, i64 2
  %89 = getelementptr inbounds i8, ptr %88, i64 %77
  %90 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %89)
  %91 = zext i16 %90 to i32
  %92 = icmp sgt i32 %91, %1
  br i1 %92, label %123, label %93

93:                                               ; preds = %82
  %94 = mul nuw nsw i32 %84, 6
  %95 = zext nneg i32 %94 to i64
  %96 = getelementptr inbounds i8, ptr %83, i64 %95
  %97 = getelementptr inbounds i8, ptr %96, i64 2
  %98 = getelementptr inbounds i8, ptr %97, i64 %77
  %99 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %98)
  %100 = icmp eq i16 %99, 0
  br i1 %100, label %101, label %110

101:                                              ; preds = %93
  %102 = shl nuw nsw i32 %84, 2
  %103 = zext nneg i32 %102 to i64
  %104 = getelementptr inbounds i8, ptr %83, i64 %103
  %105 = getelementptr inbounds i8, ptr %104, i64 2
  %106 = getelementptr inbounds i8, ptr %105, i64 %77
  %107 = tail call noundef signext i16 @_ZL7ttSHORTPKh(ptr noundef nonnull %106)
  %108 = trunc i32 %1 to i16
  %109 = add i16 %107, %108
  br label %123

110:                                              ; preds = %93
  %111 = zext i16 %99 to i64
  %112 = getelementptr inbounds i8, ptr %4, i64 %111
  %113 = sub nsw i32 %1, %91
  %114 = shl nsw i32 %113, 1
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds i8, ptr %112, i64 %115
  %117 = getelementptr inbounds i8, ptr %116, i64 %7
  %118 = getelementptr inbounds i8, ptr %117, i64 14
  %119 = getelementptr inbounds i8, ptr %118, i64 %95
  %120 = getelementptr inbounds i8, ptr %119, i64 2
  %121 = getelementptr inbounds i8, ptr %120, i64 %77
  %122 = tail call noundef zeroext i16 @_ZL8ttUSHORTPKh(ptr noundef nonnull %121)
  br label %123

123:                                              ; preds = %82, %110, %101
  %.2.shrunk = phi i16 [ %109, %101 ], [ %122, %110 ], [ 0, %82 ]
  %.2 = zext i16 %.2.shrunk to i32
  br label %.loopexit

124:                                              ; preds = %2
  %125 = icmp eq i16 %9, 12
  %126 = and i16 %9, -2
  %or.cond = icmp eq i16 %126, 12
  br i1 %or.cond, label %127, label %153

127:                                              ; preds = %124
  %128 = getelementptr inbounds i8, ptr %8, i64 12
  %129 = tail call noundef i32 @_ZL7ttULONGPKh(ptr noundef nonnull %128)
  %130 = icmp sgt i32 %129, 0
  br i1 %130, label %.lr.ph157, label %.loopexit

.lr.ph157:                                        ; preds = %127
  %131 = getelementptr inbounds i8, ptr %8, i64 16
  br label %132

132:                                              ; preds = %.lr.ph157, %151
  %.0123155 = phi i32 [ %129, %.lr.ph157 ], [ %.2125, %151 ]
  %.0126154 = phi i32 [ 0, %.lr.ph157 ], [ %.2128, %151 ]
  %133 = sub nsw i32 %.0123155, %.0126154
  %134 = ashr i32 %133, 1
  %135 = add nsw i32 %134, %.0126154
  %136 = mul nsw i32 %135, 12
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds i8, ptr %131, i64 %137
  %139 = tail call noundef i32 @_ZL7ttULONGPKh(ptr noundef nonnull %138)
  %140 = getelementptr inbounds i8, ptr %138, i64 4
  %141 = tail call noundef i32 @_ZL7ttULONGPKh(ptr noundef nonnull %140)
  %142 = icmp ugt i32 %139, %1
  br i1 %142, label %151, label %143

143:                                              ; preds = %132
  %144 = icmp ult i32 %141, %1
  br i1 %144, label %145, label %.thread

145:                                              ; preds = %143
  %146 = add nsw i32 %135, 1
  br label %151

.thread:                                          ; preds = %143
  %147 = getelementptr inbounds i8, ptr %138, i64 8
  %148 = tail call noundef i32 @_ZL7ttULONGPKh(ptr noundef nonnull %147)
  %149 = sub i32 %1, %139
  %150 = select i1 %125, i32 %149, i32 0
  %.5 = add i32 %148, %150
  br label %.loopexit

151:                                              ; preds = %145, %132
  %.2128 = phi i32 [ %146, %145 ], [ %.0126154, %132 ]
  %.2125 = phi i32 [ %.0123155, %145 ], [ %135, %132 ]
  %152 = icmp slt i32 %.2128, %.2125
  br i1 %152, label %132, label %.loopexit, !llvm.loop !15

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

.loopexit:                                        ; preds = %151, %127, %.thread, %123, %41, %32, %28, %22, %16, %10
  %.8 = phi i32 [ %21, %16 ], [ 0, %10 ], [ %39, %32 ], [ 0, %28 ], [ 0, %22 ], [ %.2, %123 ], [ 0, %41 ], [ %.5, %.thread ], [ 0, %127 ], [ 0, %151 ]
  ret i32 %.8
}

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

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

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