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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

120:                                              ; preds = %116
  br label %121

121:                                              ; preds = %120
  br label %122

122:                                              ; preds = %121
  br label %123

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

124:                                              ; preds = %116
  %125 = load i16, ptr %8, align 2, !tbaa !14
  %126 = zext i16 %125 to i32
  %127 = icmp eq i32 %126, 4
  br i1 %127, label %128, label %376

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

167:                                              ; preds = %128
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %375

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

182:                                              ; preds = %168
  %183 = load i16, ptr %16, align 2, !tbaa !14
  %184 = zext i16 %183 to i32
  %185 = mul nsw i32 %184, 2
  %186 = load i32, ptr %22, align 4, !tbaa !9
  %187 = add i32 %186, %185
  store i32 %187, ptr %22, align 4, !tbaa !9
  br label %188

188:                                              ; preds = %182, %168
  %189 = load i32, ptr %22, align 4, !tbaa !9
  %190 = sub i32 %189, 2
  store i32 %190, ptr %22, align 4, !tbaa !9
  br label %191

191:                                              ; preds = %253, %188
  %192 = load i16, ptr %15, align 2, !tbaa !14
  %193 = icmp ne i16 %192, 0
  br i1 %193, label %194, label %256

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

247:                                              ; preds = %194
  %248 = load i16, ptr %14, align 2, !tbaa !14
  %249 = zext i16 %248 to i32
  %250 = mul nsw i32 %249, 2
  %251 = load i32, ptr %22, align 4, !tbaa !9
  %252 = add i32 %251, %250
  store i32 %252, ptr %22, align 4, !tbaa !9
  br label %253

253:                                              ; preds = %247, %194
  %254 = load i16, ptr %15, align 2, !tbaa !14
  %255 = add i16 %254, -1
  store i16 %255, ptr %15, align 2, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #2
  br label %191, !llvm.loop !17

256:                                              ; preds = %191
  %257 = load i32, ptr %22, align 4, !tbaa !9
  %258 = add i32 %257, 2
  store i32 %258, ptr %22, align 4, !tbaa !9
  %259 = load i32, ptr %22, align 4, !tbaa !9
  %260 = load i32, ptr %21, align 4, !tbaa !9
  %261 = sub i32 %259, %260
  %262 = lshr i32 %261, 1
  %263 = trunc i32 %262 to i16
  store i16 %263, ptr %17, align 2, !tbaa !14
  br label %264

264:                                              ; preds = %256
  br label %265

265:                                              ; preds = %264
  br label %266

266:                                              ; preds = %265
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  %268 = load i32, ptr %7, align 4, !tbaa !9
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds i8, ptr %267, i64 %269
  %271 = getelementptr inbounds i8, ptr %270, i64 14
  %272 = load i16, ptr %13, align 2, !tbaa !14
  %273 = zext i16 %272 to i32
  %274 = mul nsw i32 %273, 2
  %275 = sext i32 %274 to i64
  %276 = getelementptr inbounds i8, ptr %271, i64 %275
  %277 = getelementptr inbounds i8, ptr %276, i64 2
  %278 = load i16, ptr %17, align 2, !tbaa !14
  %279 = zext i16 %278 to i32
  %280 = mul nsw i32 2, %279
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i8, ptr %277, i64 %281
  %283 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %282)
  store i16 %283, ptr %19, align 2, !tbaa !14
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = load i32, ptr %7, align 4, !tbaa !9
  %286 = zext i32 %285 to i64
  %287 = getelementptr inbounds i8, ptr %284, i64 %286
  %288 = getelementptr inbounds i8, ptr %287, i64 14
  %289 = getelementptr inbounds i8, ptr %288, i64 2
  %290 = load i16, ptr %17, align 2, !tbaa !14
  %291 = zext i16 %290 to i32
  %292 = mul nsw i32 2, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i8, ptr %289, i64 %293
  %295 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %294)
  store i16 %295, ptr %20, align 2, !tbaa !14
  %296 = load i32, ptr %5, align 4, !tbaa !9
  %297 = load i16, ptr %19, align 2, !tbaa !14
  %298 = zext i16 %297 to i32
  %299 = icmp slt i32 %296, %298
  br i1 %299, label %300, label %301

300:                                              ; preds = %266
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %375

301:                                              ; preds = %266
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = load i32, ptr %7, align 4, !tbaa !9
  %304 = zext i32 %303 to i64
  %305 = getelementptr inbounds i8, ptr %302, i64 %304
  %306 = getelementptr inbounds i8, ptr %305, i64 14
  %307 = load i16, ptr %13, align 2, !tbaa !14
  %308 = zext i16 %307 to i32
  %309 = mul nsw i32 %308, 6
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i8, ptr %306, i64 %310
  %312 = getelementptr inbounds i8, ptr %311, i64 2
  %313 = load i16, ptr %17, align 2, !tbaa !14
  %314 = zext i16 %313 to i32
  %315 = mul nsw i32 2, %314
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i8, ptr %312, i64 %316
  %318 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %317)
  store i16 %318, ptr %18, align 2, !tbaa !14
  %319 = load i16, ptr %18, align 2, !tbaa !14
  %320 = zext i16 %319 to i32
  %321 = icmp eq i32 %320, 0
  br i1 %321, label %322, label %345

322:                                              ; preds = %301
  %323 = load i32, ptr %5, align 4, !tbaa !9
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = load i32, ptr %7, align 4, !tbaa !9
  %326 = zext i32 %325 to i64
  %327 = getelementptr inbounds i8, ptr %324, i64 %326
  %328 = getelementptr inbounds i8, ptr %327, i64 14
  %329 = load i16, ptr %13, align 2, !tbaa !14
  %330 = zext i16 %329 to i32
  %331 = mul nsw i32 %330, 4
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds i8, ptr %328, i64 %332
  %334 = getelementptr inbounds i8, ptr %333, i64 2
  %335 = load i16, ptr %17, align 2, !tbaa !14
  %336 = zext i16 %335 to i32
  %337 = mul nsw i32 2, %336
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i8, ptr %334, i64 %338
  %340 = call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef %339)
  %341 = sext i16 %340 to i32
  %342 = add nsw i32 %323, %341
  %343 = trunc i32 %342 to i16
  %344 = zext i16 %343 to i32
  store i32 %344, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %375

345:                                              ; preds = %301
  %346 = load ptr, ptr %6, align 8, !tbaa !5
  %347 = load i16, ptr %18, align 2, !tbaa !14
  %348 = zext i16 %347 to i32
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i8, ptr %346, i64 %349
  %351 = load i32, ptr %5, align 4, !tbaa !9
  %352 = load i16, ptr %19, align 2, !tbaa !14
  %353 = zext i16 %352 to i32
  %354 = sub nsw i32 %351, %353
  %355 = mul nsw i32 %354, 2
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i8, ptr %350, i64 %356
  %358 = load i32, ptr %7, align 4, !tbaa !9
  %359 = zext i32 %358 to i64
  %360 = getelementptr inbounds i8, ptr %357, i64 %359
  %361 = getelementptr inbounds i8, ptr %360, i64 14
  %362 = load i16, ptr %13, align 2, !tbaa !14
  %363 = zext i16 %362 to i32
  %364 = mul nsw i32 %363, 6
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i8, ptr %361, i64 %365
  %367 = getelementptr inbounds i8, ptr %366, i64 2
  %368 = load i16, ptr %17, align 2, !tbaa !14
  %369 = zext i16 %368 to i32
  %370 = mul nsw i32 2, %369
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds i8, ptr %367, i64 %371
  %373 = call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %372)
  %374 = zext i16 %373 to i32
  store i32 %374, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %375

375:                                              ; preds = %345, %322, %300, %167
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #2
  br label %475

376:                                              ; preds = %124
  %377 = load i16, ptr %8, align 2, !tbaa !14
  %378 = zext i16 %377 to i32
  %379 = icmp eq i32 %378, 12
  br i1 %379, label %384, label %380

380:                                              ; preds = %376
  %381 = load i16, ptr %8, align 2, !tbaa !14
  %382 = zext i16 %381 to i32
  %383 = icmp eq i32 %382, 13
  br i1 %383, label %384, label %467

384:                                              ; preds = %380, %376
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #2
  %385 = load ptr, ptr %6, align 8, !tbaa !5
  %386 = load i32, ptr %7, align 4, !tbaa !9
  %387 = zext i32 %386 to i64
  %388 = getelementptr inbounds i8, ptr %385, i64 %387
  %389 = getelementptr inbounds i8, ptr %388, i64 12
  %390 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %389)
  store i32 %390, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #2
  store i32 0, ptr %26, align 4, !tbaa !9
  %391 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %391, ptr %27, align 4, !tbaa !9
  br label %392

392:                                              ; preds = %464, %384
  %393 = load i32, ptr %26, align 4, !tbaa !9
  %394 = load i32, ptr %27, align 4, !tbaa !9
  %395 = icmp slt i32 %393, %394
  br i1 %395, label %396, label %465

396:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #2
  %397 = load i32, ptr %26, align 4, !tbaa !9
  %398 = load i32, ptr %27, align 4, !tbaa !9
  %399 = load i32, ptr %26, align 4, !tbaa !9
  %400 = sub nsw i32 %398, %399
  %401 = ashr i32 %400, 1
  %402 = add nsw i32 %397, %401
  store i32 %402, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  %403 = load ptr, ptr %6, align 8, !tbaa !5
  %404 = load i32, ptr %7, align 4, !tbaa !9
  %405 = zext i32 %404 to i64
  %406 = getelementptr inbounds i8, ptr %403, i64 %405
  %407 = getelementptr inbounds i8, ptr %406, i64 16
  %408 = load i32, ptr %28, align 4, !tbaa !9
  %409 = mul nsw i32 %408, 12
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds i8, ptr %407, i64 %410
  %412 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %411)
  store i32 %412, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #2
  %413 = load ptr, ptr %6, align 8, !tbaa !5
  %414 = load i32, ptr %7, align 4, !tbaa !9
  %415 = zext i32 %414 to i64
  %416 = getelementptr inbounds i8, ptr %413, i64 %415
  %417 = getelementptr inbounds i8, ptr %416, i64 16
  %418 = load i32, ptr %28, align 4, !tbaa !9
  %419 = mul nsw i32 %418, 12
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds i8, ptr %417, i64 %420
  %422 = getelementptr inbounds i8, ptr %421, i64 4
  %423 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %422)
  store i32 %423, ptr %30, align 4, !tbaa !9
  %424 = load i32, ptr %5, align 4, !tbaa !9
  %425 = load i32, ptr %29, align 4, !tbaa !9
  %426 = icmp ult i32 %424, %425
  br i1 %426, label %427, label %429

427:                                              ; preds = %396
  %428 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %428, ptr %27, align 4, !tbaa !9
  br label %461

429:                                              ; preds = %396
  %430 = load i32, ptr %5, align 4, !tbaa !9
  %431 = load i32, ptr %30, align 4, !tbaa !9
  %432 = icmp ugt i32 %430, %431
  br i1 %432, label %433, label %436

433:                                              ; preds = %429
  %434 = load i32, ptr %28, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %26, align 4, !tbaa !9
  br label %460

436:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #2
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = load i32, ptr %7, align 4, !tbaa !9
  %439 = zext i32 %438 to i64
  %440 = getelementptr inbounds i8, ptr %437, i64 %439
  %441 = getelementptr inbounds i8, ptr %440, i64 16
  %442 = load i32, ptr %28, align 4, !tbaa !9
  %443 = mul nsw i32 %442, 12
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i8, ptr %441, i64 %444
  %446 = getelementptr inbounds i8, ptr %445, i64 8
  %447 = call noundef i32 @_Z7ttULONGPKh(ptr noundef %446)
  store i32 %447, ptr %31, align 4, !tbaa !9
  %448 = load i16, ptr %8, align 2, !tbaa !14
  %449 = zext i16 %448 to i32
  %450 = icmp eq i32 %449, 12
  br i1 %450, label %451, label %457

451:                                              ; preds = %436
  %452 = load i32, ptr %31, align 4, !tbaa !9
  %453 = load i32, ptr %5, align 4, !tbaa !9
  %454 = add i32 %452, %453
  %455 = load i32, ptr %29, align 4, !tbaa !9
  %456 = sub i32 %454, %455
  store i32 %456, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %459

457:                                              ; preds = %436
  %458 = load i32, ptr %31, align 4, !tbaa !9
  store i32 %458, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %459

459:                                              ; preds = %457, %451
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #2
  br label %462

460:                                              ; preds = %433
  br label %461

461:                                              ; preds = %460, %427
  store i32 0, ptr %10, align 4
  br label %462

462:                                              ; preds = %461, %459
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #2
  %463 = load i32, ptr %10, align 4
  switch i32 %463, label %466 [
    i32 0, label %464
  ]

464:                                              ; preds = %462
  br label %392, !llvm.loop !19

465:                                              ; preds = %392
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %466

466:                                              ; preds = %465, %462
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #2
  br label %475

467:                                              ; preds = %380
  br label %468

468:                                              ; preds = %467
  br label %469

469:                                              ; preds = %468
  br label %470

470:                                              ; preds = %469
  br label %471

471:                                              ; preds = %470
  br label %472

472:                                              ; preds = %471
  br label %473

473:                                              ; preds = %472
  br label %474

474:                                              ; preds = %473
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %475

475:                                              ; preds = %474, %466, %375, %123, %115, %71
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #2
  %476 = load i32, ptr %3, align 4
  ret i32 %476
}

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 = { 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"

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

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

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

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

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

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

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

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

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

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

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

.lr.ph:                                           ; preds = %51
  %63 = and i16 %42, -2
  %64 = zext i16 %63 to i64
  br label %65

65:                                               ; preds = %.lr.ph, %65
  %.0129.in160 = phi i16 [ %45, %.lr.ph ], [ %.0129, %65 ]
  %.0130159 = phi i16 [ %47, %.lr.ph ], [ %84, %65 ]
  %.1138158 = phi i32 [ %62, %.lr.ph ], [ %.2139, %65 ]
  %.0129 = lshr i16 %.0129.in160, 1
  %66 = zext i32 %.1138158 to i64
  %67 = getelementptr inbounds i8, ptr %4, i64 %66
  %68 = getelementptr inbounds i8, ptr %67, i64 2
  %69 = getelementptr inbounds i8, ptr %68, i64 %64
  %70 = getelementptr inbounds i8, ptr %69, i64 2
  %71 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %70)
  %72 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %68)
  %73 = and i16 %.0129, 32766
  %74 = zext nneg i16 %73 to i64
  %75 = getelementptr inbounds i8, ptr %67, i64 %74
  %76 = getelementptr inbounds i8, ptr %75, i64 %64
  %77 = getelementptr inbounds i8, ptr %76, i64 2
  %78 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %77)
  %79 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef %75)
  %80 = zext i16 %79 to i32
  %81 = icmp slt i32 %80, %1
  %82 = zext nneg i16 %73 to i32
  %83 = select i1 %81, i32 %82, i32 0
  %.2139 = add i32 %83, %.1138158
  %84 = add i16 %.0130159, -1
  %.not149 = icmp eq i16 %84, 0
  br i1 %.not149, label %._crit_edge, label %65, !llvm.loop !13

._crit_edge:                                      ; preds = %65, %51
  %.1138.lcssa = phi i32 [ %62, %51 ], [ %.2139, %65 ]
  %reass.sub = sub i32 %.1138.lcssa, %6
  %85 = add i32 %reass.sub, 131060
  %86 = getelementptr inbounds i8, ptr %8, i64 14
  %87 = zext nneg i16 %43 to i32
  %88 = shl nuw nsw i32 %87, 1
  %89 = zext nneg i32 %88 to i64
  %90 = getelementptr inbounds i8, ptr %86, i64 %89
  %91 = getelementptr inbounds i8, ptr %90, i64 2
  %92 = and i32 %85, 131070
  %93 = zext nneg i32 %92 to i64
  %94 = getelementptr inbounds i8, ptr %91, i64 %93
  %95 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %94)
  %96 = getelementptr inbounds i8, ptr %8, i64 16
  %97 = getelementptr inbounds i8, ptr %96, i64 %93
  %98 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %97)
  %99 = zext i16 %95 to i32
  %100 = icmp sgt i32 %99, %1
  br i1 %100, label %131, label %101

101:                                              ; preds = %._crit_edge
  %102 = mul nuw nsw i32 %87, 6
  %103 = zext nneg i32 %102 to i64
  %104 = getelementptr inbounds i8, ptr %86, i64 %103
  %105 = getelementptr inbounds i8, ptr %104, i64 2
  %106 = getelementptr inbounds i8, ptr %105, i64 %93
  %107 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %106)
  %108 = icmp eq i16 %107, 0
  br i1 %108, label %109, label %118

109:                                              ; preds = %101
  %110 = shl nuw nsw i32 %87, 2
  %111 = zext nneg i32 %110 to i64
  %112 = getelementptr inbounds i8, ptr %86, i64 %111
  %113 = getelementptr inbounds i8, ptr %112, i64 2
  %114 = getelementptr inbounds i8, ptr %113, i64 %93
  %115 = tail call noundef signext i16 @_Z7ttSHORTPKh(ptr noundef nonnull %114)
  %116 = trunc i32 %1 to i16
  %117 = add i16 %115, %116
  br label %131

118:                                              ; preds = %101
  %119 = zext i16 %107 to i64
  %120 = getelementptr inbounds i8, ptr %4, i64 %119
  %121 = sub nsw i32 %1, %99
  %122 = shl nsw i32 %121, 1
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds i8, ptr %120, i64 %123
  %125 = getelementptr inbounds i8, ptr %124, i64 %7
  %126 = getelementptr inbounds i8, ptr %125, i64 14
  %127 = getelementptr inbounds i8, ptr %126, i64 %103
  %128 = getelementptr inbounds i8, ptr %127, i64 2
  %129 = getelementptr inbounds i8, ptr %128, i64 %93
  %130 = tail call noundef zeroext i16 @_Z8ttUSHORTPKh(ptr noundef nonnull %129)
  br label %131

131:                                              ; preds = %._crit_edge, %40, %118, %109
  %.2.shrunk = phi i16 [ %117, %109 ], [ %130, %118 ], [ 0, %40 ], [ 0, %._crit_edge ]
  %.2 = zext i16 %.2.shrunk to i32
  br label %.loopexit

132:                                              ; preds = %2
  %133 = icmp eq i16 %9, 12
  %134 = and i16 %9, -2
  %or.cond = icmp eq i16 %134, 12
  br i1 %or.cond, label %135, label %.loopexit

135:                                              ; preds = %132
  %136 = getelementptr inbounds i8, ptr %8, i64 12
  %137 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %136)
  %138 = icmp sgt i32 %137, 0
  br i1 %138, label %.lr.ph164, label %.loopexit

.lr.ph164:                                        ; preds = %135
  %139 = getelementptr inbounds i8, ptr %8, i64 16
  br label %140

140:                                              ; preds = %.lr.ph164, %159
  %.0131162 = phi i32 [ %137, %.lr.ph164 ], [ %.2133, %159 ]
  %.0134161 = phi i32 [ 0, %.lr.ph164 ], [ %.2136, %159 ]
  %141 = sub nsw i32 %.0131162, %.0134161
  %142 = ashr i32 %141, 1
  %143 = add nsw i32 %142, %.0134161
  %144 = mul nsw i32 %143, 12
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds i8, ptr %139, i64 %145
  %147 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %146)
  %148 = getelementptr inbounds i8, ptr %146, i64 4
  %149 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %148)
  %150 = icmp ugt i32 %147, %1
  br i1 %150, label %159, label %151

151:                                              ; preds = %140
  %152 = icmp ult i32 %149, %1
  br i1 %152, label %153, label %.thread

153:                                              ; preds = %151
  %154 = add nsw i32 %143, 1
  br label %159

.thread:                                          ; preds = %151
  %155 = getelementptr inbounds i8, ptr %146, i64 8
  %156 = tail call noundef i32 @_Z7ttULONGPKh(ptr noundef nonnull %155)
  %157 = sub i32 %1, %147
  %158 = select i1 %133, i32 %157, i32 0
  %.4 = add i32 %156, %158
  br label %.loopexit

159:                                              ; preds = %153, %140
  %.2136 = phi i32 [ %154, %153 ], [ %.0134161, %140 ]
  %.2133 = phi i32 [ %.0131162, %153 ], [ %143, %140 ]
  %160 = icmp slt i32 %.2136, %.2133
  br i1 %160, label %140, label %.loopexit, !llvm.loop !15

.loopexit:                                        ; preds = %159, %135, %.thread, %132, %2, %32, %28, %22, %16, %10, %131
  %.7 = phi i32 [ %.2, %131 ], [ %21, %16 ], [ 0, %10 ], [ %39, %32 ], [ 0, %28 ], [ 0, %22 ], [ 0, %2 ], [ 0, %132 ], [ %.4, %.thread ], [ 0, %135 ], [ 0, %159 ]
  ret i32 %.7
}

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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