; LLVM IR from caryll/otfcc :: lib/table (cmap)

; 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.__caryll_elementinterface_table_cmap = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.otfcc_Packet = type { i32, i16, i16, i16, i16, ptr }
%struct.otfcc_PacketPiece = type { i32, i32, i32, i32, ptr }
%struct.table_cmap = type { ptr, ptr }
%struct.cmap_Entry = type { %struct.UT_hash_handle, i32, %struct.otfcc_Handle }
%struct.UT_hash_handle = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.otfcc_Handle = type { i32, i16, ptr }
%struct.UT_hash_table = type { ptr, i32, i32, i32, ptr, i64, i32, i32, i32, i32, i32 }
%struct.cmap_UVS_Entry = type { %struct.UT_hash_handle, %struct.cmap_UVS_key, %struct.otfcc_Handle }
%struct.cmap_UVS_key = type { i32, i32 }
%struct.otfcc_Options = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, ptr, ptr }
%struct.otfcc_ILogger = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@table_iCmap = external dso_local constant %struct.__caryll_elementinterface_table_cmap, align 8
@formatPriorities = external dso_local constant [3 x i16], align 2
@.str = external hidden unnamed_addr constant [25 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: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

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

; Function Attrs: nounwind uwtable
define dso_local ptr @otfcc_readCmap(ptr noundef byval(%struct.otfcc_Packet) align 8 %0, ptr noundef %1) #3 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca %struct.otfcc_PacketPiece, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i16, align 2
  %15 = alloca i64, align 8
  %16 = alloca i16, align 2
  %17 = alloca i16, align 2
  %18 = alloca i16, align 2
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %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
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  store ptr null, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  store i32 1, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  store i32 0, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 1, ptr %8, align 4, !tbaa !9
  br label %46

46:                                               ; preds = %865, %2
  %47 = load i32, ptr %8, align 4, !tbaa !9
  %48 = icmp ne i32 %47, 0
  br i1 %48, label %49, label %58

49:                                               ; preds = %46
  %50 = load i32, ptr %6, align 4, !tbaa !9
  %51 = icmp ne i32 %50, 0
  br i1 %51, label %52, label %58

52:                                               ; preds = %49
  %53 = load i32, ptr %7, align 4, !tbaa !9
  %54 = getelementptr inbounds %struct.otfcc_Packet, ptr %0, i32 0, i32 1
  %55 = load i16, ptr %54, align 4, !tbaa !11
  %56 = zext i16 %55 to i32
  %57 = icmp slt i32 %53, %56
  br label %58

58:                                               ; preds = %52, %49, %46
  %59 = phi i1 [ false, %49 ], [ false, %46 ], [ %57, %52 ]
  br i1 %59, label %61, label %60

60:                                               ; preds = %58
  store i32 2, ptr %9, align 4
  br label %872

61:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #6
  %62 = getelementptr inbounds %struct.otfcc_Packet, ptr %0, i32 0, i32 5
  %63 = load ptr, ptr %62, align 8, !tbaa !14
  %64 = load i32, ptr %7, align 4, !tbaa !9
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %63, i64 %65
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %10, ptr align 8 %66, i64 24, i1 false), !tbaa.struct !15
  br label %67

67:                                               ; preds = %857, %61
  %68 = load i32, ptr %6, align 4, !tbaa !9
  %69 = icmp ne i32 %68, 0
  br i1 %69, label %71, label %70

70:                                               ; preds = %67
  store i32 5, ptr %9, align 4
  br label %862

71:                                               ; preds = %67
  %72 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %10, i32 0, i32 0
  %73 = load i32, ptr %72, align 8, !tbaa !16
  %74 = icmp eq i32 %73, 1668112752
  br i1 %74, label %75, label %856

75:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %76

76:                                               ; preds = %852, %75
  %77 = load i32, ptr %11, align 4, !tbaa !9
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %80, label %79

79:                                               ; preds = %76
  store i32 8, ptr %9, align 4
  br label %853

80:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %81 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %10, i32 0, i32 4
  %82 = load ptr, ptr %81, align 8, !tbaa !18
  store ptr %82, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %83 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %10, i32 0, i32 3
  %84 = load i32, ptr %83, align 4, !tbaa !19
  store i32 %84, ptr %13, align 4, !tbaa !9
  %85 = load i32, ptr %13, align 4, !tbaa !9
  %86 = icmp ult i32 %85, 4
  br i1 %86, label %87, label %88

87:                                               ; preds = %80
  br label %833

88:                                               ; preds = %80
  %89 = load ptr, ptr getelementptr inbounds (%struct.__caryll_elementinterface_table_cmap, ptr @table_iCmap, i32 0, i32 6), align 8, !tbaa !20
  %90 = call ptr (...) %89()
  store ptr %90, ptr %5, align 8, !tbaa !5
  %91 = load ptr, ptr %12, align 8, !tbaa !5
  %92 = getelementptr inbounds i8, ptr %91, i64 2
  %93 = call zeroext i16 @read_16u(ptr noundef %92)
  store i16 %93, ptr %14, align 2, !tbaa !22
  %94 = load i32, ptr %13, align 4, !tbaa !9
  %95 = load i16, ptr %14, align 2, !tbaa !22
  %96 = zext i16 %95 to i32
  %97 = mul nsw i32 8, %96
  %98 = add nsw i32 4, %97
  %99 = icmp ult i32 %94, %98
  br i1 %99, label %100, label %101

100:                                              ; preds = %88
  br label %833

101:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  store i64 0, ptr %15, align 8, !tbaa !23
  br label %102

102:                                              ; preds = %166, %101
  %103 = load i64, ptr %15, align 8, !tbaa !23
  %104 = getelementptr inbounds [3 x i16], ptr @formatPriorities, i64 0, i64 %103
  %105 = load i16, ptr %104, align 2, !tbaa !22
  %106 = icmp ne i16 %105, 0
  br i1 %106, label %108, label %107

107:                                              ; preds = %102
  store i32 12, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %169

108:                                              ; preds = %102
  call void @llvm.lifetime.start.p0(i64 2, ptr %16) #6
  store i16 0, ptr %16, align 2, !tbaa !22
  br label %109

109:                                              ; preds = %162, %108
  %110 = load i16, ptr %16, align 2, !tbaa !22
  %111 = zext i16 %110 to i32
  %112 = load i16, ptr %14, align 2, !tbaa !22
  %113 = zext i16 %112 to i32
  %114 = icmp slt i32 %111, %113
  br i1 %114, label %116, label %115

115:                                              ; preds = %109
  store i32 15, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #6
  br label %165

116:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #6
  %117 = load ptr, ptr %12, align 8, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %117, i64 4
  %119 = load i16, ptr %16, align 2, !tbaa !22
  %120 = zext i16 %119 to i32
  %121 = mul nsw i32 8, %120
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr %118, i64 %122
  %124 = call zeroext i16 @read_16u(ptr noundef %123)
  store i16 %124, ptr %17, align 2, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #6
  %125 = load ptr, ptr %12, align 8, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %125, i64 4
  %127 = load i16, ptr %16, align 2, !tbaa !22
  %128 = zext i16 %127 to i32
  %129 = mul nsw i32 8, %128
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds i8, ptr %126, i64 %130
  %132 = getelementptr inbounds i8, ptr %131, i64 2
  %133 = call zeroext i16 @read_16u(ptr noundef %132)
  store i16 %133, ptr %18, align 2, !tbaa !22
  %134 = load i16, ptr %17, align 2, !tbaa !22
  %135 = load i16, ptr %18, align 2, !tbaa !22
  %136 = call zeroext i1 @isValidCmapEncoding(i16 noundef zeroext %134, i16 noundef zeroext %135)
  br i1 %136, label %138, label %137

137:                                              ; preds = %116
  store i32 17, ptr %9, align 4
  br label %159

138:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %139 = load ptr, ptr %12, align 8, !tbaa !5
  %140 = getelementptr inbounds i8, ptr %139, i64 4
  %141 = load i16, ptr %16, align 2, !tbaa !22
  %142 = zext i16 %141 to i32
  %143 = mul nsw i32 8, %142
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds i8, ptr %140, i64 %144
  %146 = getelementptr inbounds i8, ptr %145, i64 4
  %147 = call i32 @read_32u(ptr noundef %146)
  store i32 %147, ptr %19, align 4, !tbaa !9
  %148 = load ptr, ptr %12, align 8, !tbaa !5
  %149 = load i32, ptr %19, align 4, !tbaa !9
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds i8, ptr %148, i64 %150
  %152 = load i32, ptr %13, align 4, !tbaa !9
  %153 = load i32, ptr %19, align 4, !tbaa !9
  %154 = sub i32 %152, %153
  %155 = load ptr, ptr %5, align 8, !tbaa !5
  %156 = load i64, ptr %15, align 8, !tbaa !23
  %157 = getelementptr inbounds [3 x i16], ptr @formatPriorities, i64 0, i64 %156
  %158 = load i16, ptr %157, align 2, !tbaa !22
  call void @readCmapMappingTable(ptr noundef %151, i32 noundef %154, ptr noundef %155, i16 noundef zeroext %158)
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  store i32 0, ptr %9, align 4
  br label %159

159:                                              ; preds = %138, %137
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #6
  %160 = load i32, ptr %9, align 4
  switch i32 %160, label %877 [
    i32 0, label %161
    i32 17, label %162
  ]

161:                                              ; preds = %159
  br label %162

162:                                              ; preds = %161, %159
  %163 = load i16, ptr %16, align 2, !tbaa !22
  %164 = add i16 %163, 1
  store i16 %164, ptr %16, align 2, !tbaa !22
  br label %109, !llvm.loop !25

165:                                              ; preds = %115
  br label %166

166:                                              ; preds = %165
  %167 = load i64, ptr %15, align 8, !tbaa !23
  %168 = add i64 %167, 1
  store i64 %168, ptr %15, align 8, !tbaa !23
  br label %102, !llvm.loop !27

169:                                              ; preds = %107
  br label %170

170:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.table_cmap, ptr %171, i32 0, i32 0
  %173 = load ptr, ptr %172, align 8, !tbaa !28
  %174 = icmp ne ptr %173, null
  br i1 %174, label %175, label %471

175:                                              ; preds = %170
  store i32 1, ptr %23, align 4, !tbaa !9
  store i32 1, ptr %21, align 4, !tbaa !9
  %176 = load ptr, ptr %5, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.table_cmap, ptr %176, i32 0, i32 0
  %178 = load ptr, ptr %177, align 8, !tbaa !28
  %179 = getelementptr inbounds %struct.cmap_Entry, ptr %178, i32 0, i32 0
  store ptr %179, ptr %29, align 8, !tbaa !5
  br label %180

180:                                              ; preds = %467, %175
  %181 = load i32, ptr %21, align 4, !tbaa !9
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %183, label %470

183:                                              ; preds = %180
  %184 = load ptr, ptr %29, align 8, !tbaa !5
  store ptr %184, ptr %26, align 8, !tbaa !5
  store ptr null, ptr %29, align 8, !tbaa !5
  store ptr null, ptr %30, align 8, !tbaa !5
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %185

185:                                              ; preds = %431, %183
  %186 = load ptr, ptr %26, align 8, !tbaa !5
  %187 = icmp ne ptr %186, null
  br i1 %187, label %188, label %433

188:                                              ; preds = %185
  %189 = load i32, ptr %22, align 4, !tbaa !9
  %190 = add i32 %189, 1
  store i32 %190, ptr %22, align 4, !tbaa !9
  %191 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %191, ptr %27, align 8, !tbaa !5
  store i32 0, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %192

192:                                              ; preds = %223, %188
  %193 = load i32, ptr %20, align 4, !tbaa !9
  %194 = load i32, ptr %23, align 4, !tbaa !9
  %195 = icmp ult i32 %193, %194
  br i1 %195, label %196, label %226

196:                                              ; preds = %192
  %197 = load i32, ptr %24, align 4, !tbaa !9
  %198 = add i32 %197, 1
  store i32 %198, ptr %24, align 4, !tbaa !9
  %199 = load ptr, ptr %27, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.UT_hash_handle, ptr %199, i32 0, i32 2
  %201 = load ptr, ptr %200, align 8, !tbaa !30
  %202 = icmp ne ptr %201, null
  br i1 %202, label %203, label %216

203:                                              ; preds = %196
  %204 = load ptr, ptr %27, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.UT_hash_handle, ptr %204, i32 0, i32 2
  %206 = load ptr, ptr %205, align 8, !tbaa !30
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.table_cmap, ptr %207, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !28
  %210 = getelementptr inbounds %struct.cmap_Entry, ptr %209, i32 0, i32 0
  %211 = getelementptr inbounds %struct.UT_hash_handle, ptr %210, i32 0, i32 0
  %212 = load ptr, ptr %211, align 8, !tbaa !32
  %213 = getelementptr inbounds %struct.UT_hash_table, ptr %212, i32 0, i32 5
  %214 = load i64, ptr %213, align 8, !tbaa !35
  %215 = getelementptr inbounds i8, ptr %206, i64 %214
  br label %217

216:                                              ; preds = %196
  br label %217

217:                                              ; preds = %216, %203
  %218 = phi ptr [ %215, %203 ], [ null, %216 ]
  store ptr %218, ptr %27, align 8, !tbaa !5
  %219 = load ptr, ptr %27, align 8, !tbaa !5
  %220 = icmp eq ptr %219, null
  br i1 %220, label %221, label %222

221:                                              ; preds = %217
  br label %226

222:                                              ; preds = %217
  br label %223

223:                                              ; preds = %222
  %224 = load i32, ptr %20, align 4, !tbaa !9
  %225 = add i32 %224, 1
  store i32 %225, ptr %20, align 4, !tbaa !9
  br label %192, !llvm.loop !37

226:                                              ; preds = %221, %192
  %227 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %227, ptr %25, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %429, %226
  %229 = load i32, ptr %24, align 4, !tbaa !9
  %230 = icmp ne i32 %229, 0
  br i1 %230, label %239, label %231

231:                                              ; preds = %228
  %232 = load i32, ptr %25, align 4, !tbaa !9
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %234, label %237

234:                                              ; preds = %231
  %235 = load ptr, ptr %27, align 8, !tbaa !5
  %236 = icmp ne ptr %235, null
  br label %237

237:                                              ; preds = %234, %231
  %238 = phi i1 [ false, %231 ], [ %236, %234 ]
  br label %239

239:                                              ; preds = %237, %228
  %240 = phi i1 [ true, %228 ], [ %238, %237 ]
  br i1 %240, label %241, label %431

241:                                              ; preds = %239
  %242 = load i32, ptr %24, align 4, !tbaa !9
  %243 = icmp eq i32 %242, 0
  br i1 %243, label %244, label %268

244:                                              ; preds = %241
  %245 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %245, ptr %28, align 8, !tbaa !5
  %246 = load ptr, ptr %27, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.UT_hash_handle, ptr %246, i32 0, i32 2
  %248 = load ptr, ptr %247, align 8, !tbaa !30
  %249 = icmp ne ptr %248, null
  br i1 %249, label %250, label %263

250:                                              ; preds = %244
  %251 = load ptr, ptr %27, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.UT_hash_handle, ptr %251, i32 0, i32 2
  %253 = load ptr, ptr %252, align 8, !tbaa !30
  %254 = load ptr, ptr %5, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.table_cmap, ptr %254, i32 0, i32 0
  %256 = load ptr, ptr %255, align 8, !tbaa !28
  %257 = getelementptr inbounds %struct.cmap_Entry, ptr %256, i32 0, i32 0
  %258 = getelementptr inbounds %struct.UT_hash_handle, ptr %257, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !32
  %260 = getelementptr inbounds %struct.UT_hash_table, ptr %259, i32 0, i32 5
  %261 = load i64, ptr %260, align 8, !tbaa !35
  %262 = getelementptr inbounds i8, ptr %253, i64 %261
  br label %264

263:                                              ; preds = %244
  br label %264

264:                                              ; preds = %263, %250
  %265 = phi ptr [ %262, %250 ], [ null, %263 ]
  store ptr %265, ptr %27, align 8, !tbaa !5
  %266 = load i32, ptr %25, align 4, !tbaa !9
  %267 = add i32 %266, -1
  store i32 %267, ptr %25, align 4, !tbaa !9
  br label %381

268:                                              ; preds = %241
  %269 = load i32, ptr %25, align 4, !tbaa !9
  %270 = icmp eq i32 %269, 0
  br i1 %270, label %274, label %271

271:                                              ; preds = %268
  %272 = load ptr, ptr %27, align 8, !tbaa !5
  %273 = icmp eq ptr %272, null
  br i1 %273, label %274, label %302

274:                                              ; preds = %271, %268
  %275 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %275, ptr %28, align 8, !tbaa !5
  %276 = load ptr, ptr %26, align 8, !tbaa !5
  %277 = icmp ne ptr %276, null
  br i1 %277, label %278, label %299

278:                                              ; preds = %274
  %279 = load ptr, ptr %26, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.UT_hash_handle, ptr %279, i32 0, i32 2
  %281 = load ptr, ptr %280, align 8, !tbaa !30
  %282 = icmp ne ptr %281, null
  br i1 %282, label %283, label %296

283:                                              ; preds = %278
  %284 = load ptr, ptr %26, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.UT_hash_handle, ptr %284, i32 0, i32 2
  %286 = load ptr, ptr %285, align 8, !tbaa !30
  %287 = load ptr, ptr %5, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.table_cmap, ptr %287, i32 0, i32 0
  %289 = load ptr, ptr %288, align 8, !tbaa !28
  %290 = getelementptr inbounds %struct.cmap_Entry, ptr %289, i32 0, i32 0
  %291 = getelementptr inbounds %struct.UT_hash_handle, ptr %290, i32 0, i32 0
  %292 = load ptr, ptr %291, align 8, !tbaa !32
  %293 = getelementptr inbounds %struct.UT_hash_table, ptr %292, i32 0, i32 5
  %294 = load i64, ptr %293, align 8, !tbaa !35
  %295 = getelementptr inbounds i8, ptr %286, i64 %294
  br label %297

296:                                              ; preds = %278
  br label %297

297:                                              ; preds = %296, %283
  %298 = phi ptr [ %295, %283 ], [ null, %296 ]
  store ptr %298, ptr %26, align 8, !tbaa !5
  br label %299

299:                                              ; preds = %297, %274
  %300 = load i32, ptr %24, align 4, !tbaa !9
  %301 = add i32 %300, -1
  store i32 %301, ptr %24, align 4, !tbaa !9
  br label %380

302:                                              ; preds = %271
  %303 = load ptr, ptr %26, align 8, !tbaa !5
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.table_cmap, ptr %304, i32 0, i32 0
  %306 = load ptr, ptr %305, align 8, !tbaa !28
  %307 = getelementptr inbounds %struct.cmap_Entry, ptr %306, i32 0, i32 0
  %308 = getelementptr inbounds %struct.UT_hash_handle, ptr %307, i32 0, i32 0
  %309 = load ptr, ptr %308, align 8, !tbaa !32
  %310 = getelementptr inbounds %struct.UT_hash_table, ptr %309, i32 0, i32 5
  %311 = load i64, ptr %310, align 8, !tbaa !35
  %312 = sub i64 0, %311
  %313 = getelementptr inbounds i8, ptr %303, i64 %312
  %314 = load ptr, ptr %27, align 8, !tbaa !5
  %315 = load ptr, ptr %5, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.table_cmap, ptr %315, i32 0, i32 0
  %317 = load ptr, ptr %316, align 8, !tbaa !28
  %318 = getelementptr inbounds %struct.cmap_Entry, ptr %317, i32 0, i32 0
  %319 = getelementptr inbounds %struct.UT_hash_handle, ptr %318, i32 0, i32 0
  %320 = load ptr, ptr %319, align 8, !tbaa !32
  %321 = getelementptr inbounds %struct.UT_hash_table, ptr %320, i32 0, i32 5
  %322 = load i64, ptr %321, align 8, !tbaa !35
  %323 = sub i64 0, %322
  %324 = getelementptr inbounds i8, ptr %314, i64 %323
  %325 = call i32 @by_unicode(ptr noundef %313, ptr noundef %324)
  %326 = icmp sle i32 %325, 0
  br i1 %326, label %327, label %355

327:                                              ; preds = %302
  %328 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %328, ptr %28, align 8, !tbaa !5
  %329 = load ptr, ptr %26, align 8, !tbaa !5
  %330 = icmp ne ptr %329, null
  br i1 %330, label %331, label %352

331:                                              ; preds = %327
  %332 = load ptr, ptr %26, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.UT_hash_handle, ptr %332, i32 0, i32 2
  %334 = load ptr, ptr %333, align 8, !tbaa !30
  %335 = icmp ne ptr %334, null
  br i1 %335, label %336, label %349

336:                                              ; preds = %331
  %337 = load ptr, ptr %26, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.UT_hash_handle, ptr %337, i32 0, i32 2
  %339 = load ptr, ptr %338, align 8, !tbaa !30
  %340 = load ptr, ptr %5, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.table_cmap, ptr %340, i32 0, i32 0
  %342 = load ptr, ptr %341, align 8, !tbaa !28
  %343 = getelementptr inbounds %struct.cmap_Entry, ptr %342, i32 0, i32 0
  %344 = getelementptr inbounds %struct.UT_hash_handle, ptr %343, i32 0, i32 0
  %345 = load ptr, ptr %344, align 8, !tbaa !32
  %346 = getelementptr inbounds %struct.UT_hash_table, ptr %345, i32 0, i32 5
  %347 = load i64, ptr %346, align 8, !tbaa !35
  %348 = getelementptr inbounds i8, ptr %339, i64 %347
  br label %350

349:                                              ; preds = %331
  br label %350

350:                                              ; preds = %349, %336
  %351 = phi ptr [ %348, %336 ], [ null, %349 ]
  store ptr %351, ptr %26, align 8, !tbaa !5
  br label %352

352:                                              ; preds = %350, %327
  %353 = load i32, ptr %24, align 4, !tbaa !9
  %354 = add i32 %353, -1
  store i32 %354, ptr %24, align 4, !tbaa !9
  br label %379

355:                                              ; preds = %302
  %356 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %356, ptr %28, align 8, !tbaa !5
  %357 = load ptr, ptr %27, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.UT_hash_handle, ptr %357, i32 0, i32 2
  %359 = load ptr, ptr %358, align 8, !tbaa !30
  %360 = icmp ne ptr %359, null
  br i1 %360, label %361, label %374

361:                                              ; preds = %355
  %362 = load ptr, ptr %27, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.UT_hash_handle, ptr %362, i32 0, i32 2
  %364 = load ptr, ptr %363, align 8, !tbaa !30
  %365 = load ptr, ptr %5, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.table_cmap, ptr %365, i32 0, i32 0
  %367 = load ptr, ptr %366, align 8, !tbaa !28
  %368 = getelementptr inbounds %struct.cmap_Entry, ptr %367, i32 0, i32 0
  %369 = getelementptr inbounds %struct.UT_hash_handle, ptr %368, i32 0, i32 0
  %370 = load ptr, ptr %369, align 8, !tbaa !32
  %371 = getelementptr inbounds %struct.UT_hash_table, ptr %370, i32 0, i32 5
  %372 = load i64, ptr %371, align 8, !tbaa !35
  %373 = getelementptr inbounds i8, ptr %364, i64 %372
  br label %375

374:                                              ; preds = %355
  br label %375

375:                                              ; preds = %374, %361
  %376 = phi ptr [ %373, %361 ], [ null, %374 ]
  store ptr %376, ptr %27, align 8, !tbaa !5
  %377 = load i32, ptr %25, align 4, !tbaa !9
  %378 = add i32 %377, -1
  store i32 %378, ptr %25, align 4, !tbaa !9
  br label %379

379:                                              ; preds = %375, %352
  br label %380

380:                                              ; preds = %379, %299
  br label %381

381:                                              ; preds = %380, %264
  %382 = load ptr, ptr %30, align 8, !tbaa !5
  %383 = icmp ne ptr %382, null
  br i1 %383, label %384, label %404

384:                                              ; preds = %381
  %385 = load ptr, ptr %28, align 8, !tbaa !5
  %386 = icmp ne ptr %385, null
  br i1 %386, label %387, label %399

387:                                              ; preds = %384
  %388 = load ptr, ptr %28, align 8, !tbaa !5
  %389 = load ptr, ptr %5, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.table_cmap, ptr %389, i32 0, i32 0
  %391 = load ptr, ptr %390, align 8, !tbaa !28
  %392 = getelementptr inbounds %struct.cmap_Entry, ptr %391, i32 0, i32 0
  %393 = getelementptr inbounds %struct.UT_hash_handle, ptr %392, i32 0, i32 0
  %394 = load ptr, ptr %393, align 8, !tbaa !32
  %395 = getelementptr inbounds %struct.UT_hash_table, ptr %394, i32 0, i32 5
  %396 = load i64, ptr %395, align 8, !tbaa !35
  %397 = sub i64 0, %396
  %398 = getelementptr inbounds i8, ptr %388, i64 %397
  br label %400

399:                                              ; preds = %384
  br label %400

400:                                              ; preds = %399, %387
  %401 = phi ptr [ %398, %387 ], [ null, %399 ]
  %402 = load ptr, ptr %30, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.UT_hash_handle, ptr %402, i32 0, i32 2
  store ptr %401, ptr %403, align 8, !tbaa !30
  br label %406

404:                                              ; preds = %381
  %405 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %405, ptr %29, align 8, !tbaa !5
  br label %406

406:                                              ; preds = %404, %400
  %407 = load ptr, ptr %28, align 8, !tbaa !5
  %408 = icmp ne ptr %407, null
  br i1 %408, label %409, label %429

409:                                              ; preds = %406
  %410 = load ptr, ptr %30, align 8, !tbaa !5
  %411 = icmp ne ptr %410, null
  br i1 %411, label %412, label %424

412:                                              ; preds = %409
  %413 = load ptr, ptr %30, align 8, !tbaa !5
  %414 = load ptr, ptr %5, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.table_cmap, ptr %414, i32 0, i32 0
  %416 = load ptr, ptr %415, align 8, !tbaa !28
  %417 = getelementptr inbounds %struct.cmap_Entry, ptr %416, i32 0, i32 0
  %418 = getelementptr inbounds %struct.UT_hash_handle, ptr %417, i32 0, i32 0
  %419 = load ptr, ptr %418, align 8, !tbaa !32
  %420 = getelementptr inbounds %struct.UT_hash_table, ptr %419, i32 0, i32 5
  %421 = load i64, ptr %420, align 8, !tbaa !35
  %422 = sub i64 0, %421
  %423 = getelementptr inbounds i8, ptr %413, i64 %422
  br label %425

424:                                              ; preds = %409
  br label %425

425:                                              ; preds = %424, %412
  %426 = phi ptr [ %423, %412 ], [ null, %424 ]
  %427 = load ptr, ptr %28, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.UT_hash_handle, ptr %427, i32 0, i32 1
  store ptr %426, ptr %428, align 8, !tbaa !38
  br label %429

429:                                              ; preds = %425, %406
  %430 = load ptr, ptr %28, align 8, !tbaa !5
  store ptr %430, ptr %30, align 8, !tbaa !5
  br label %228, !llvm.loop !39

431:                                              ; preds = %239
  %432 = load ptr, ptr %27, align 8, !tbaa !5
  store ptr %432, ptr %26, align 8, !tbaa !5
  br label %185, !llvm.loop !40

433:                                              ; preds = %185
  %434 = load ptr, ptr %30, align 8, !tbaa !5
  %435 = icmp ne ptr %434, null
  br i1 %435, label %436, label %439

436:                                              ; preds = %433
  %437 = load ptr, ptr %30, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.UT_hash_handle, ptr %437, i32 0, i32 2
  store ptr null, ptr %438, align 8, !tbaa !30
  br label %439

439:                                              ; preds = %436, %433
  %440 = load i32, ptr %22, align 4, !tbaa !9
  %441 = icmp ule i32 %440, 1
  br i1 %441, label %442, label %467

442:                                              ; preds = %439
  store i32 0, ptr %21, align 4, !tbaa !9
  %443 = load ptr, ptr %30, align 8, !tbaa !5
  %444 = load ptr, ptr %5, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.table_cmap, ptr %444, i32 0, i32 0
  %446 = load ptr, ptr %445, align 8, !tbaa !28
  %447 = getelementptr inbounds %struct.cmap_Entry, ptr %446, i32 0, i32 0
  %448 = getelementptr inbounds %struct.UT_hash_handle, ptr %447, i32 0, i32 0
  %449 = load ptr, ptr %448, align 8, !tbaa !32
  %450 = getelementptr inbounds %struct.UT_hash_table, ptr %449, i32 0, i32 4
  store ptr %443, ptr %450, align 8, !tbaa !41
  br label %451

451:                                              ; preds = %442
  %452 = load ptr, ptr %29, align 8, !tbaa !5
  %453 = load ptr, ptr %5, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.table_cmap, ptr %453, i32 0, i32 0
  %455 = load ptr, ptr %454, align 8, !tbaa !28
  %456 = getelementptr inbounds %struct.cmap_Entry, ptr %455, i32 0, i32 0
  %457 = getelementptr inbounds %struct.UT_hash_handle, ptr %456, i32 0, i32 0
  %458 = load ptr, ptr %457, align 8, !tbaa !32
  %459 = getelementptr inbounds %struct.UT_hash_table, ptr %458, i32 0, i32 5
  %460 = load i64, ptr %459, align 8, !tbaa !35
  %461 = sub i64 0, %460
  %462 = getelementptr inbounds i8, ptr %452, i64 %461
  %463 = load ptr, ptr %5, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.table_cmap, ptr %463, i32 0, i32 0
  store ptr %462, ptr %464, align 8, !tbaa !28
  br label %465

465:                                              ; preds = %451
  br label %466

466:                                              ; preds = %465
  br label %467

467:                                              ; preds = %466, %439
  %468 = load i32, ptr %23, align 4, !tbaa !9
  %469 = mul i32 %468, 2
  store i32 %469, ptr %23, align 4, !tbaa !9
  br label %180, !llvm.loop !42

470:                                              ; preds = %180
  br label %471

471:                                              ; preds = %470, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %472

472:                                              ; preds = %471
  br label %473

473:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #6
  store i16 0, ptr %31, align 2, !tbaa !22
  br label %474

474:                                              ; preds = %524, %473
  %475 = load i16, ptr %31, align 2, !tbaa !22
  %476 = zext i16 %475 to i32
  %477 = load i16, ptr %14, align 2, !tbaa !22
  %478 = zext i16 %477 to i32
  %479 = icmp slt i32 %476, %478
  br i1 %479, label %481, label %480

480:                                              ; preds = %474
  store i32 31, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #6
  br label %527

481:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 2, ptr %32) #6
  %482 = load ptr, ptr %12, align 8, !tbaa !5
  %483 = getelementptr inbounds i8, ptr %482, i64 4
  %484 = load i16, ptr %31, align 2, !tbaa !22
  %485 = zext i16 %484 to i32
  %486 = mul nsw i32 8, %485
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds i8, ptr %483, i64 %487
  %489 = call zeroext i16 @read_16u(ptr noundef %488)
  store i16 %489, ptr %32, align 2, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #6
  %490 = load ptr, ptr %12, align 8, !tbaa !5
  %491 = getelementptr inbounds i8, ptr %490, i64 4
  %492 = load i16, ptr %31, align 2, !tbaa !22
  %493 = zext i16 %492 to i32
  %494 = mul nsw i32 8, %493
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds i8, ptr %491, i64 %495
  %497 = getelementptr inbounds i8, ptr %496, i64 2
  %498 = call zeroext i16 @read_16u(ptr noundef %497)
  store i16 %498, ptr %33, align 2, !tbaa !22
  %499 = load i16, ptr %32, align 2, !tbaa !22
  %500 = load i16, ptr %33, align 2, !tbaa !22
  %501 = call zeroext i1 @isValidCmapEncoding(i16 noundef zeroext %499, i16 noundef zeroext %500)
  br i1 %501, label %503, label %502

502:                                              ; preds = %481
  store i32 33, ptr %9, align 4
  br label %521

503:                                              ; preds = %481
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %504 = load ptr, ptr %12, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %504, i64 4
  %506 = load i16, ptr %31, align 2, !tbaa !22
  %507 = zext i16 %506 to i32
  %508 = mul nsw i32 8, %507
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds i8, ptr %505, i64 %509
  %511 = getelementptr inbounds i8, ptr %510, i64 4
  %512 = call i32 @read_32u(ptr noundef %511)
  store i32 %512, ptr %34, align 4, !tbaa !9
  %513 = load ptr, ptr %12, align 8, !tbaa !5
  %514 = load i32, ptr %34, align 4, !tbaa !9
  %515 = zext i32 %514 to i64
  %516 = getelementptr inbounds i8, ptr %513, i64 %515
  %517 = load i32, ptr %13, align 4, !tbaa !9
  %518 = load i32, ptr %34, align 4, !tbaa !9
  %519 = sub i32 %517, %518
  %520 = load ptr, ptr %5, align 8, !tbaa !5
  call void @readCmapMappingTableUVS(ptr noundef %516, i32 noundef %519, ptr noundef %520)
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  store i32 0, ptr %9, align 4
  br label %521

521:                                              ; preds = %503, %502
  call void @llvm.lifetime.end.p0(i64 2, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #6
  %522 = load i32, ptr %9, align 4
  switch i32 %522, label %877 [
    i32 0, label %523
    i32 33, label %524
  ]

523:                                              ; preds = %521
  br label %524

524:                                              ; preds = %523, %521
  %525 = load i16, ptr %31, align 2, !tbaa !22
  %526 = add i16 %525, 1
  store i16 %526, ptr %31, align 2, !tbaa !22
  br label %474, !llvm.loop !43

527:                                              ; preds = %480
  br label %528

528:                                              ; preds = %527
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %529 = load ptr, ptr %5, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.table_cmap, ptr %529, i32 0, i32 1
  %531 = load ptr, ptr %530, align 8, !tbaa !44
  %532 = icmp ne ptr %531, null
  br i1 %532, label %533, label %829

533:                                              ; preds = %528
  store i32 1, ptr %38, align 4, !tbaa !9
  store i32 1, ptr %36, align 4, !tbaa !9
  %534 = load ptr, ptr %5, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.table_cmap, ptr %534, i32 0, i32 1
  %536 = load ptr, ptr %535, align 8, !tbaa !44
  %537 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %536, i32 0, i32 0
  store ptr %537, ptr %44, align 8, !tbaa !5
  br label %538

538:                                              ; preds = %825, %533
  %539 = load i32, ptr %36, align 4, !tbaa !9
  %540 = icmp ne i32 %539, 0
  br i1 %540, label %541, label %828

541:                                              ; preds = %538
  %542 = load ptr, ptr %44, align 8, !tbaa !5
  store ptr %542, ptr %41, align 8, !tbaa !5
  store ptr null, ptr %44, align 8, !tbaa !5
  store ptr null, ptr %45, align 8, !tbaa !5
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %543

543:                                              ; preds = %789, %541
  %544 = load ptr, ptr %41, align 8, !tbaa !5
  %545 = icmp ne ptr %544, null
  br i1 %545, label %546, label %791

546:                                              ; preds = %543
  %547 = load i32, ptr %37, align 4, !tbaa !9
  %548 = add i32 %547, 1
  store i32 %548, ptr %37, align 4, !tbaa !9
  %549 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %549, ptr %42, align 8, !tbaa !5
  store i32 0, ptr %39, align 4, !tbaa !9
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %550

550:                                              ; preds = %581, %546
  %551 = load i32, ptr %35, align 4, !tbaa !9
  %552 = load i32, ptr %38, align 4, !tbaa !9
  %553 = icmp ult i32 %551, %552
  br i1 %553, label %554, label %584

554:                                              ; preds = %550
  %555 = load i32, ptr %39, align 4, !tbaa !9
  %556 = add i32 %555, 1
  store i32 %556, ptr %39, align 4, !tbaa !9
  %557 = load ptr, ptr %42, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.UT_hash_handle, ptr %557, i32 0, i32 2
  %559 = load ptr, ptr %558, align 8, !tbaa !30
  %560 = icmp ne ptr %559, null
  br i1 %560, label %561, label %574

561:                                              ; preds = %554
  %562 = load ptr, ptr %42, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.UT_hash_handle, ptr %562, i32 0, i32 2
  %564 = load ptr, ptr %563, align 8, !tbaa !30
  %565 = load ptr, ptr %5, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.table_cmap, ptr %565, i32 0, i32 1
  %567 = load ptr, ptr %566, align 8, !tbaa !44
  %568 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %567, i32 0, i32 0
  %569 = getelementptr inbounds %struct.UT_hash_handle, ptr %568, i32 0, i32 0
  %570 = load ptr, ptr %569, align 8, !tbaa !45
  %571 = getelementptr inbounds %struct.UT_hash_table, ptr %570, i32 0, i32 5
  %572 = load i64, ptr %571, align 8, !tbaa !35
  %573 = getelementptr inbounds i8, ptr %564, i64 %572
  br label %575

574:                                              ; preds = %554
  br label %575

575:                                              ; preds = %574, %561
  %576 = phi ptr [ %573, %561 ], [ null, %574 ]
  store ptr %576, ptr %42, align 8, !tbaa !5
  %577 = load ptr, ptr %42, align 8, !tbaa !5
  %578 = icmp eq ptr %577, null
  br i1 %578, label %579, label %580

579:                                              ; preds = %575
  br label %584

580:                                              ; preds = %575
  br label %581

581:                                              ; preds = %580
  %582 = load i32, ptr %35, align 4, !tbaa !9
  %583 = add i32 %582, 1
  store i32 %583, ptr %35, align 4, !tbaa !9
  br label %550, !llvm.loop !48

584:                                              ; preds = %579, %550
  %585 = load i32, ptr %38, align 4, !tbaa !9
  store i32 %585, ptr %40, align 4, !tbaa !9
  br label %586

586:                                              ; preds = %787, %584
  %587 = load i32, ptr %39, align 4, !tbaa !9
  %588 = icmp ne i32 %587, 0
  br i1 %588, label %597, label %589

589:                                              ; preds = %586
  %590 = load i32, ptr %40, align 4, !tbaa !9
  %591 = icmp ne i32 %590, 0
  br i1 %591, label %592, label %595

592:                                              ; preds = %589
  %593 = load ptr, ptr %42, align 8, !tbaa !5
  %594 = icmp ne ptr %593, null
  br label %595

595:                                              ; preds = %592, %589
  %596 = phi i1 [ false, %589 ], [ %594, %592 ]
  br label %597

597:                                              ; preds = %595, %586
  %598 = phi i1 [ true, %586 ], [ %596, %595 ]
  br i1 %598, label %599, label %789

599:                                              ; preds = %597
  %600 = load i32, ptr %39, align 4, !tbaa !9
  %601 = icmp eq i32 %600, 0
  br i1 %601, label %602, label %626

602:                                              ; preds = %599
  %603 = load ptr, ptr %42, align 8, !tbaa !5
  store ptr %603, ptr %43, align 8, !tbaa !5
  %604 = load ptr, ptr %42, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.UT_hash_handle, ptr %604, i32 0, i32 2
  %606 = load ptr, ptr %605, align 8, !tbaa !30
  %607 = icmp ne ptr %606, null
  br i1 %607, label %608, label %621

608:                                              ; preds = %602
  %609 = load ptr, ptr %42, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.UT_hash_handle, ptr %609, i32 0, i32 2
  %611 = load ptr, ptr %610, align 8, !tbaa !30
  %612 = load ptr, ptr %5, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.table_cmap, ptr %612, i32 0, i32 1
  %614 = load ptr, ptr %613, align 8, !tbaa !44
  %615 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %614, i32 0, i32 0
  %616 = getelementptr inbounds %struct.UT_hash_handle, ptr %615, i32 0, i32 0
  %617 = load ptr, ptr %616, align 8, !tbaa !45
  %618 = getelementptr inbounds %struct.UT_hash_table, ptr %617, i32 0, i32 5
  %619 = load i64, ptr %618, align 8, !tbaa !35
  %620 = getelementptr inbounds i8, ptr %611, i64 %619
  br label %622

621:                                              ; preds = %602
  br label %622

622:                                              ; preds = %621, %608
  %623 = phi ptr [ %620, %608 ], [ null, %621 ]
  store ptr %623, ptr %42, align 8, !tbaa !5
  %624 = load i32, ptr %40, align 4, !tbaa !9
  %625 = add i32 %624, -1
  store i32 %625, ptr %40, align 4, !tbaa !9
  br label %739

626:                                              ; preds = %599
  %627 = load i32, ptr %40, align 4, !tbaa !9
  %628 = icmp eq i32 %627, 0
  br i1 %628, label %632, label %629

629:                                              ; preds = %626
  %630 = load ptr, ptr %42, align 8, !tbaa !5
  %631 = icmp eq ptr %630, null
  br i1 %631, label %632, label %660

632:                                              ; preds = %629, %626
  %633 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %633, ptr %43, align 8, !tbaa !5
  %634 = load ptr, ptr %41, align 8, !tbaa !5
  %635 = icmp ne ptr %634, null
  br i1 %635, label %636, label %657

636:                                              ; preds = %632
  %637 = load ptr, ptr %41, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.UT_hash_handle, ptr %637, i32 0, i32 2
  %639 = load ptr, ptr %638, align 8, !tbaa !30
  %640 = icmp ne ptr %639, null
  br i1 %640, label %641, label %654

641:                                              ; preds = %636
  %642 = load ptr, ptr %41, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.UT_hash_handle, ptr %642, i32 0, i32 2
  %644 = load ptr, ptr %643, align 8, !tbaa !30
  %645 = load ptr, ptr %5, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.table_cmap, ptr %645, i32 0, i32 1
  %647 = load ptr, ptr %646, align 8, !tbaa !44
  %648 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %647, i32 0, i32 0
  %649 = getelementptr inbounds %struct.UT_hash_handle, ptr %648, i32 0, i32 0
  %650 = load ptr, ptr %649, align 8, !tbaa !45
  %651 = getelementptr inbounds %struct.UT_hash_table, ptr %650, i32 0, i32 5
  %652 = load i64, ptr %651, align 8, !tbaa !35
  %653 = getelementptr inbounds i8, ptr %644, i64 %652
  br label %655

654:                                              ; preds = %636
  br label %655

655:                                              ; preds = %654, %641
  %656 = phi ptr [ %653, %641 ], [ null, %654 ]
  store ptr %656, ptr %41, align 8, !tbaa !5
  br label %657

657:                                              ; preds = %655, %632
  %658 = load i32, ptr %39, align 4, !tbaa !9
  %659 = add i32 %658, -1
  store i32 %659, ptr %39, align 4, !tbaa !9
  br label %738

660:                                              ; preds = %629
  %661 = load ptr, ptr %41, align 8, !tbaa !5
  %662 = load ptr, ptr %5, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.table_cmap, ptr %662, i32 0, i32 1
  %664 = load ptr, ptr %663, align 8, !tbaa !44
  %665 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %664, i32 0, i32 0
  %666 = getelementptr inbounds %struct.UT_hash_handle, ptr %665, i32 0, i32 0
  %667 = load ptr, ptr %666, align 8, !tbaa !45
  %668 = getelementptr inbounds %struct.UT_hash_table, ptr %667, i32 0, i32 5
  %669 = load i64, ptr %668, align 8, !tbaa !35
  %670 = sub i64 0, %669
  %671 = getelementptr inbounds i8, ptr %661, i64 %670
  %672 = load ptr, ptr %42, align 8, !tbaa !5
  %673 = load ptr, ptr %5, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.table_cmap, ptr %673, i32 0, i32 1
  %675 = load ptr, ptr %674, align 8, !tbaa !44
  %676 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %675, i32 0, i32 0
  %677 = getelementptr inbounds %struct.UT_hash_handle, ptr %676, i32 0, i32 0
  %678 = load ptr, ptr %677, align 8, !tbaa !45
  %679 = getelementptr inbounds %struct.UT_hash_table, ptr %678, i32 0, i32 5
  %680 = load i64, ptr %679, align 8, !tbaa !35
  %681 = sub i64 0, %680
  %682 = getelementptr inbounds i8, ptr %672, i64 %681
  %683 = call i32 @by_uvs_key(ptr noundef %671, ptr noundef %682)
  %684 = icmp sle i32 %683, 0
  br i1 %684, label %685, label %713

685:                                              ; preds = %660
  %686 = load ptr, ptr %41, align 8, !tbaa !5
  store ptr %686, ptr %43, align 8, !tbaa !5
  %687 = load ptr, ptr %41, align 8, !tbaa !5
  %688 = icmp ne ptr %687, null
  br i1 %688, label %689, label %710

689:                                              ; preds = %685
  %690 = load ptr, ptr %41, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.UT_hash_handle, ptr %690, i32 0, i32 2
  %692 = load ptr, ptr %691, align 8, !tbaa !30
  %693 = icmp ne ptr %692, null
  br i1 %693, label %694, label %707

694:                                              ; preds = %689
  %695 = load ptr, ptr %41, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.UT_hash_handle, ptr %695, i32 0, i32 2
  %697 = load ptr, ptr %696, align 8, !tbaa !30
  %698 = load ptr, ptr %5, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.table_cmap, ptr %698, i32 0, i32 1
  %700 = load ptr, ptr %699, align 8, !tbaa !44
  %701 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %700, i32 0, i32 0
  %702 = getelementptr inbounds %struct.UT_hash_handle, ptr %701, i32 0, i32 0
  %703 = load ptr, ptr %702, align 8, !tbaa !45
  %704 = getelementptr inbounds %struct.UT_hash_table, ptr %703, i32 0, i32 5
  %705 = load i64, ptr %704, align 8, !tbaa !35
  %706 = getelementptr inbounds i8, ptr %697, i64 %705
  br label %708

707:                                              ; preds = %689
  br label %708

708:                                              ; preds = %707, %694
  %709 = phi ptr [ %706, %694 ], [ null, %707 ]
  store ptr %709, ptr %41, align 8, !tbaa !5
  br label %710

710:                                              ; preds = %708, %685
  %711 = load i32, ptr %39, align 4, !tbaa !9
  %712 = add i32 %711, -1
  store i32 %712, ptr %39, align 4, !tbaa !9
  br label %737

713:                                              ; preds = %660
  %714 = load ptr, ptr %42, align 8, !tbaa !5
  store ptr %714, ptr %43, align 8, !tbaa !5
  %715 = load ptr, ptr %42, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.UT_hash_handle, ptr %715, i32 0, i32 2
  %717 = load ptr, ptr %716, align 8, !tbaa !30
  %718 = icmp ne ptr %717, null
  br i1 %718, label %719, label %732

719:                                              ; preds = %713
  %720 = load ptr, ptr %42, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.UT_hash_handle, ptr %720, i32 0, i32 2
  %722 = load ptr, ptr %721, align 8, !tbaa !30
  %723 = load ptr, ptr %5, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.table_cmap, ptr %723, i32 0, i32 1
  %725 = load ptr, ptr %724, align 8, !tbaa !44
  %726 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %725, i32 0, i32 0
  %727 = getelementptr inbounds %struct.UT_hash_handle, ptr %726, i32 0, i32 0
  %728 = load ptr, ptr %727, align 8, !tbaa !45
  %729 = getelementptr inbounds %struct.UT_hash_table, ptr %728, i32 0, i32 5
  %730 = load i64, ptr %729, align 8, !tbaa !35
  %731 = getelementptr inbounds i8, ptr %722, i64 %730
  br label %733

732:                                              ; preds = %713
  br label %733

733:                                              ; preds = %732, %719
  %734 = phi ptr [ %731, %719 ], [ null, %732 ]
  store ptr %734, ptr %42, align 8, !tbaa !5
  %735 = load i32, ptr %40, align 4, !tbaa !9
  %736 = add i32 %735, -1
  store i32 %736, ptr %40, align 4, !tbaa !9
  br label %737

737:                                              ; preds = %733, %710
  br label %738

738:                                              ; preds = %737, %657
  br label %739

739:                                              ; preds = %738, %622
  %740 = load ptr, ptr %45, align 8, !tbaa !5
  %741 = icmp ne ptr %740, null
  br i1 %741, label %742, label %762

742:                                              ; preds = %739
  %743 = load ptr, ptr %43, align 8, !tbaa !5
  %744 = icmp ne ptr %743, null
  br i1 %744, label %745, label %757

745:                                              ; preds = %742
  %746 = load ptr, ptr %43, align 8, !tbaa !5
  %747 = load ptr, ptr %5, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.table_cmap, ptr %747, i32 0, i32 1
  %749 = load ptr, ptr %748, align 8, !tbaa !44
  %750 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %749, i32 0, i32 0
  %751 = getelementptr inbounds %struct.UT_hash_handle, ptr %750, i32 0, i32 0
  %752 = load ptr, ptr %751, align 8, !tbaa !45
  %753 = getelementptr inbounds %struct.UT_hash_table, ptr %752, i32 0, i32 5
  %754 = load i64, ptr %753, align 8, !tbaa !35
  %755 = sub i64 0, %754
  %756 = getelementptr inbounds i8, ptr %746, i64 %755
  br label %758

757:                                              ; preds = %742
  br label %758

758:                                              ; preds = %757, %745
  %759 = phi ptr [ %756, %745 ], [ null, %757 ]
  %760 = load ptr, ptr %45, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.UT_hash_handle, ptr %760, i32 0, i32 2
  store ptr %759, ptr %761, align 8, !tbaa !30
  br label %764

762:                                              ; preds = %739
  %763 = load ptr, ptr %43, align 8, !tbaa !5
  store ptr %763, ptr %44, align 8, !tbaa !5
  br label %764

764:                                              ; preds = %762, %758
  %765 = load ptr, ptr %43, align 8, !tbaa !5
  %766 = icmp ne ptr %765, null
  br i1 %766, label %767, label %787

767:                                              ; preds = %764
  %768 = load ptr, ptr %45, align 8, !tbaa !5
  %769 = icmp ne ptr %768, null
  br i1 %769, label %770, label %782

770:                                              ; preds = %767
  %771 = load ptr, ptr %45, align 8, !tbaa !5
  %772 = load ptr, ptr %5, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.table_cmap, ptr %772, i32 0, i32 1
  %774 = load ptr, ptr %773, align 8, !tbaa !44
  %775 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %774, i32 0, i32 0
  %776 = getelementptr inbounds %struct.UT_hash_handle, ptr %775, i32 0, i32 0
  %777 = load ptr, ptr %776, align 8, !tbaa !45
  %778 = getelementptr inbounds %struct.UT_hash_table, ptr %777, i32 0, i32 5
  %779 = load i64, ptr %778, align 8, !tbaa !35
  %780 = sub i64 0, %779
  %781 = getelementptr inbounds i8, ptr %771, i64 %780
  br label %783

782:                                              ; preds = %767
  br label %783

783:                                              ; preds = %782, %770
  %784 = phi ptr [ %781, %770 ], [ null, %782 ]
  %785 = load ptr, ptr %43, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.UT_hash_handle, ptr %785, i32 0, i32 1
  store ptr %784, ptr %786, align 8, !tbaa !38
  br label %787

787:                                              ; preds = %783, %764
  %788 = load ptr, ptr %43, align 8, !tbaa !5
  store ptr %788, ptr %45, align 8, !tbaa !5
  br label %586, !llvm.loop !49

789:                                              ; preds = %597
  %790 = load ptr, ptr %42, align 8, !tbaa !5
  store ptr %790, ptr %41, align 8, !tbaa !5
  br label %543, !llvm.loop !50

791:                                              ; preds = %543
  %792 = load ptr, ptr %45, align 8, !tbaa !5
  %793 = icmp ne ptr %792, null
  br i1 %793, label %794, label %797

794:                                              ; preds = %791
  %795 = load ptr, ptr %45, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.UT_hash_handle, ptr %795, i32 0, i32 2
  store ptr null, ptr %796, align 8, !tbaa !30
  br label %797

797:                                              ; preds = %794, %791
  %798 = load i32, ptr %37, align 4, !tbaa !9
  %799 = icmp ule i32 %798, 1
  br i1 %799, label %800, label %825

800:                                              ; preds = %797
  store i32 0, ptr %36, align 4, !tbaa !9
  %801 = load ptr, ptr %45, align 8, !tbaa !5
  %802 = load ptr, ptr %5, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.table_cmap, ptr %802, i32 0, i32 1
  %804 = load ptr, ptr %803, align 8, !tbaa !44
  %805 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %804, i32 0, i32 0
  %806 = getelementptr inbounds %struct.UT_hash_handle, ptr %805, i32 0, i32 0
  %807 = load ptr, ptr %806, align 8, !tbaa !45
  %808 = getelementptr inbounds %struct.UT_hash_table, ptr %807, i32 0, i32 4
  store ptr %801, ptr %808, align 8, !tbaa !41
  br label %809

809:                                              ; preds = %800
  %810 = load ptr, ptr %44, align 8, !tbaa !5
  %811 = load ptr, ptr %5, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.table_cmap, ptr %811, i32 0, i32 1
  %813 = load ptr, ptr %812, align 8, !tbaa !44
  %814 = getelementptr inbounds %struct.cmap_UVS_Entry, ptr %813, i32 0, i32 0
  %815 = getelementptr inbounds %struct.UT_hash_handle, ptr %814, i32 0, i32 0
  %816 = load ptr, ptr %815, align 8, !tbaa !45
  %817 = getelementptr inbounds %struct.UT_hash_table, ptr %816, i32 0, i32 5
  %818 = load i64, ptr %817, align 8, !tbaa !35
  %819 = sub i64 0, %818
  %820 = getelementptr inbounds i8, ptr %810, i64 %819
  %821 = load ptr, ptr %5, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.table_cmap, ptr %821, i32 0, i32 1
  store ptr %820, ptr %822, align 8, !tbaa !44
  br label %823

823:                                              ; preds = %809
  br label %824

824:                                              ; preds = %823
  br label %825

825:                                              ; preds = %824, %797
  %826 = load i32, ptr %38, align 4, !tbaa !9
  %827 = mul i32 %826, 2
  store i32 %827, ptr %38, align 4, !tbaa !9
  br label %538, !llvm.loop !51

828:                                              ; preds = %538
  br label %829

829:                                              ; preds = %828, %528
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %830

830:                                              ; preds = %829
  br label %831

831:                                              ; preds = %830
  %832 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %832, ptr %3, align 8
  store i32 1, ptr %9, align 4
  br label %849

833:                                              ; preds = %100, %87
  %834 = load ptr, ptr %4, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.otfcc_Options, ptr %834, i32 0, i32 24
  %836 = load ptr, ptr %835, align 8, !tbaa !52
  %837 = getelementptr inbounds %struct.otfcc_ILogger, ptr %836, i32 0, i32 6
  %838 = load ptr, ptr %837, align 8, !tbaa !55
  %839 = load ptr, ptr %4, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.otfcc_Options, ptr %839, i32 0, i32 24
  %841 = load ptr, ptr %840, align 8, !tbaa !52
  %842 = call ptr @sdsempty()
  %843 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %842, ptr noundef @.str)
  call void %838(ptr noundef %841, i8 noundef zeroext 1, i32 noundef 1, ptr noundef %843)
  %844 = load ptr, ptr %5, align 8, !tbaa !5
  %845 = icmp ne ptr %844, null
  br i1 %845, label %846, label %848

846:                                              ; preds = %833
  %847 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %847) #6
  store ptr null, ptr %5, align 8, !tbaa !5
  store ptr null, ptr %5, align 8, !tbaa !5
  br label %848

848:                                              ; preds = %846, %833
  store i32 0, ptr %9, align 4
  br label %849

849:                                              ; preds = %848, %831
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  %850 = load i32, ptr %9, align 4
  switch i32 %850, label %853 [
    i32 0, label %851
  ]

851:                                              ; preds = %849
  br label %852

852:                                              ; preds = %851
  store i32 0, ptr %11, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %76, !llvm.loop !57

853:                                              ; preds = %849, %79
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  %854 = load i32, ptr %9, align 4
  switch i32 %854, label %862 [
    i32 8, label %855
  ]

855:                                              ; preds = %853
  br label %856

856:                                              ; preds = %855, %71
  br label %857

857:                                              ; preds = %856
  %858 = load i32, ptr %6, align 4, !tbaa !9
  %859 = icmp ne i32 %858, 0
  %860 = xor i1 %859, true
  %861 = zext i1 %860 to i32
  store i32 %861, ptr %6, align 4, !tbaa !9
  br label %67, !llvm.loop !58

862:                                              ; preds = %853, %70
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #6
  %863 = load i32, ptr %9, align 4
  switch i32 %863, label %872 [
    i32 5, label %864
  ]

864:                                              ; preds = %862
  br label %865

865:                                              ; preds = %864
  %866 = load i32, ptr %6, align 4, !tbaa !9
  %867 = icmp ne i32 %866, 0
  %868 = xor i1 %867, true
  %869 = zext i1 %868 to i32
  store i32 %869, ptr %6, align 4, !tbaa !9
  %870 = load i32, ptr %7, align 4, !tbaa !9
  %871 = add nsw i32 %870, 1
  store i32 %871, ptr %7, align 4, !tbaa !9
  br label %46, !llvm.loop !59

872:                                              ; preds = %862, %60
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  %873 = load i32, ptr %9, align 4
  switch i32 %873, label %875 [
    i32 2, label %874
  ]

874:                                              ; preds = %872
  store ptr null, ptr %3, align 8
  store i32 1, ptr %9, align 4
  br label %875

875:                                              ; preds = %874, %872
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  %876 = load ptr, ptr %3, align 8
  ret ptr %876

877:                                              ; preds = %521, %159
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @read_16u(ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @isValidCmapEncoding(i16 noundef zeroext, i16 noundef zeroext) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @read_32u(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare hidden void @readCmapMappingTable(ptr noundef, i32 noundef, ptr noundef, i16 noundef zeroext) #3

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

; Function Attrs: nounwind uwtable
declare hidden void @readCmapMappingTableUVS(ptr noundef, i32 noundef, ptr noundef) #3

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

declare ptr @sdscatprintf(ptr noundef, ptr noundef, ...) #5

declare ptr @sdsempty() #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 = { inlinehint 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 #5 = { "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 #6 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 4}
!12 = !{!"", !10, i64 0, !13, i64 4, !13, i64 6, !13, i64 8, !13, i64 10, !6, i64 16}
!13 = !{!"short", !7, i64 0}
!14 = !{!12, !6, i64 16}
!15 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 8, !5}
!16 = !{!17, !10, i64 0}
!17 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !6, i64 16}
!18 = !{!17, !6, i64 16}
!19 = !{!17, !10, i64 12}
!20 = !{!21, !6, i64 48}
!21 = !{!"__caryll_elementinterface_table_cmap", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!22 = !{!13, !13, i64 0}
!23 = !{!24, !24, i64 0}
!24 = !{!"long", !7, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!29, !6, i64 0}
!29 = !{!"", !6, i64 0, !6, i64 8}
!30 = !{!31, !6, i64 16}
!31 = !{!"UT_hash_handle", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !10, i64 48, !10, i64 52}
!32 = !{!33, !6, i64 0}
!33 = !{!"", !31, i64 0, !10, i64 56, !34, i64 64}
!34 = !{!"otfcc_Handle", !10, i64 0, !13, i64 4, !6, i64 8}
!35 = !{!36, !24, i64 32}
!36 = !{!"UT_hash_table", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !6, i64 24, !24, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56}
!37 = distinct !{!37, !26}
!38 = !{!31, !6, i64 8}
!39 = distinct !{!39, !26}
!40 = distinct !{!40, !26}
!41 = !{!36, !6, i64 24}
!42 = distinct !{!42, !26}
!43 = distinct !{!43, !26}
!44 = !{!29, !6, i64 8}
!45 = !{!46, !6, i64 0}
!46 = !{!"", !31, i64 0, !47, i64 56, !34, i64 64}
!47 = !{!"", !10, i64 0, !10, i64 4}
!48 = distinct !{!48, !26}
!49 = distinct !{!49, !26}
!50 = distinct !{!50, !26}
!51 = distinct !{!51, !26}
!52 = !{!53, !6, i64 32}
!53 = !{!"", !54, i64 0, !54, i64 1, !54, i64 2, !54, i64 3, !54, i64 4, !54, i64 5, !54, i64 6, !54, i64 7, !54, i64 8, !54, i64 9, !54, i64 10, !54, i64 11, !54, i64 12, !54, i64 13, !54, i64 14, !54, i64 15, !54, i64 16, !54, i64 17, !54, i64 18, !54, i64 19, !54, i64 20, !54, i64 21, !54, i64 22, !6, i64 24, !6, i64 32}
!54 = !{!"_Bool", !7, i64 0}
!55 = !{!56, !6, i64 48}
!56 = !{!"otfcc_ILogger", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88}
!57 = distinct !{!57, !26}
!58 = distinct !{!58, !26}
!59 = distinct !{!59, !26}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.__caryll_elementinterface_table_cmap = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.otfcc_Packet = type { i32, i16, i16, i16, i16, ptr }
%struct.otfcc_PacketPiece = type { i32, i32, i32, i32, ptr }

@table_iCmap = external dso_local local_unnamed_addr constant %struct.__caryll_elementinterface_table_cmap, align 8
@formatPriorities = external dso_local local_unnamed_addr constant [3 x i16], align 2
@.str = external hidden unnamed_addr constant [25 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local ptr @otfcc_readCmap(ptr nocapture noundef readonly byval(%struct.otfcc_Packet) align 8 %0, ptr nocapture noundef readonly %1) local_unnamed_addr #1 {
  %3 = getelementptr inbounds i8, ptr %0, i64 4
  %4 = load i16, ptr %3, align 4
  %.not = icmp eq i16 %4, 0
  br i1 %.not, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %2
  %5 = getelementptr inbounds i8, ptr %0, i64 16
  %6 = load ptr, ptr getelementptr inbounds (i8, ptr @table_iCmap, i64 48), align 8
  %7 = getelementptr inbounds i8, ptr %1, i64 32
  %8 = load i16, ptr @formatPriorities, align 2
  %.not308403 = icmp eq i16 %8, 0
  %9 = load ptr, ptr %5, align 8, !tbaa !5
  %10 = load i16, ptr %3, align 4
  %11 = zext i16 %10 to i64
  br label %12

12:                                               ; preds = %.lr.ph, %.thread371
  %indvars.iv487 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next488, %.thread371 ]
  %13 = getelementptr inbounds %struct.otfcc_PacketPiece, ptr %9, i64 %indvars.iv487
  %.sroa.0.0.copyload = load i32, ptr %13, align 8, !tbaa !12
  %.not534 = icmp eq i32 %.sroa.0.0.copyload, 1668112752
  br i1 %.not534, label %.preheader390.us, label %.thread371

.preheader390.us:                                 ; preds = %12
  %.sroa.4161.0..sroa_idx.le = getelementptr inbounds i8, ptr %13, i64 12
  %.sroa.4161.0.copyload.le = load i32, ptr %.sroa.4161.0..sroa_idx.le, align 4, !tbaa !12
  %.sroa.5.0..sroa_idx.le = getelementptr inbounds i8, ptr %13, i64 16
  %.sroa.5.0.copyload.le = load ptr, ptr %.sroa.5.0..sroa_idx.le, align 8, !tbaa !13
  %14 = getelementptr inbounds i8, ptr %.sroa.5.0.copyload.le, i64 4
  %15 = icmp ult i32 %.sroa.4161.0.copyload.le, 4
  br i1 %15, label %244, label %16

16:                                               ; preds = %.preheader390.us
  %17 = getelementptr inbounds i8, ptr %.sroa.5.0.copyload.le, i64 2
  %18 = tail call ptr (...) %6() #4
  %19 = tail call zeroext i16 @read_16u(ptr noundef nonnull %17)
  %20 = zext i16 %19 to i32
  %21 = shl nuw nsw i32 %20, 3
  %22 = or disjoint i32 %21, 4
  %23 = icmp ult i32 %.sroa.4161.0.copyload.le, %22
  br i1 %23, label %244, label %.preheader389.us

._crit_edge405.us:                                ; preds = %._crit_edge.us.us, %.preheader389.us
  %24 = load ptr, ptr %18, align 8, !tbaa !14
  %.not309.us = icmp eq ptr %24, null
  br i1 %.not309.us, label %.loopexit388.us, label %.lr.ph418.us

25:                                               ; preds = %.lr.ph418.us, %.loopexit382.us
  %.0249417.us = phi ptr [ null, %.lr.ph418.us ], [ %.1250.us, %.loopexit382.us ]
  %.1252416.us = phi ptr [ null, %.lr.ph418.us ], [ %.2253.us.ph, %.loopexit382.us ]
  %.0260415.us = phi ptr [ %.0251423.us538, %.lr.ph418.us ], [ %.2258.us, %.loopexit382.us ]
  %.0272414.us = phi i32 [ 0, %.lr.ph418.us ], [ %26, %.loopexit382.us ]
  %26 = add i32 %.0272414.us, 1
  br i1 %.not472, label %.thread.us.preheader, label %.lr.ph.us

.lr.ph.us:                                        ; preds = %25, %30
  %.0256408.us = phi ptr [ %35, %30 ], [ %.0260415.us, %25 ]
  %.0267407.us = phi i32 [ %27, %30 ], [ 0, %25 ]
  %27 = add nuw i32 %.0267407.us, 1
  %28 = getelementptr inbounds i8, ptr %.0256408.us, i64 16
  %29 = load ptr, ptr %28, align 8, !tbaa !16
  %.not328.us = icmp eq ptr %29, null
  br i1 %.not328.us, label %.thread.us.preheader, label %30

30:                                               ; preds = %.lr.ph.us
  %31 = load ptr, ptr %18, align 8, !tbaa !14
  %32 = load ptr, ptr %31, align 8, !tbaa !18
  %33 = getelementptr inbounds i8, ptr %32, i64 32
  %34 = load i64, ptr %33, align 8, !tbaa !21
  %35 = getelementptr inbounds i8, ptr %29, i64 %34
  %exitcond480.not = icmp eq i32 %27, %.0271422.us539
  br i1 %exitcond480.not, label %.thread.us.preheader, label %.lr.ph.us, !llvm.loop !24

.thread.us.preheader:                             ; preds = %30, %.lr.ph.us, %25
  %.2269.us.ph = phi i32 [ 0, %25 ], [ %27, %.lr.ph.us ], [ %.0271422.us539, %30 ]
  %.2258.us.ph = phi ptr [ %.0260415.us, %25 ], [ null, %.lr.ph.us ], [ %35, %30 ]
  br label %.thread.us.outer

.thread.us.outer:                                 ; preds = %.thread.us.outer.backedge, %.thread.us.preheader
  %.2269.us.ph564 = phi i32 [ %.2269.us.ph, %.thread.us.preheader ], [ %.3270.us, %.thread.us.outer.backedge ]
  %.0265.us.ph = phi i32 [ %.0271422.us539, %.thread.us.preheader ], [ %.1266.us, %.thread.us.outer.backedge ]
  %.1261.us.ph = phi ptr [ %.0260415.us, %.thread.us.preheader ], [ %.4264.us, %.thread.us.outer.backedge ]
  %.2258.us.ph565 = phi ptr [ %.2258.us.ph, %.thread.us.preheader ], [ %.3259.us, %.thread.us.outer.backedge ]
  %.2253.us.ph = phi ptr [ %.1252416.us, %.thread.us.preheader ], [ %.2253.us.ph.be, %.thread.us.outer.backedge ]
  %.1250.us.ph = phi ptr [ %.0249417.us, %.thread.us.preheader ], [ %.0255.us, %.thread.us.outer.backedge ]
  br label %.thread.us

.thread.us:                                       ; preds = %.thread.us.outer, %.thread345.thread.us
  %.2269.us = phi i32 [ %.3270.us, %.thread345.thread.us ], [ %.2269.us.ph564, %.thread.us.outer ]
  %.0265.us = phi i32 [ %.1266.us, %.thread345.thread.us ], [ %.0265.us.ph, %.thread.us.outer ]
  %.1261.us = phi ptr [ %.4264.us, %.thread345.thread.us ], [ %.1261.us.ph, %.thread.us.outer ]
  %.2258.us = phi ptr [ %.3259.us, %.thread345.thread.us ], [ %.2258.us.ph565, %.thread.us.outer ]
  %.1250.us = phi ptr [ %.0255.us, %.thread345.thread.us ], [ %.1250.us.ph, %.thread.us.outer ]
  %cond.us = icmp eq i32 %.2269.us, 0
  br i1 %cond.us, label %85, label %36

36:                                               ; preds = %.thread.us
  %37 = icmp eq i32 %.0265.us, 0
  %38 = icmp eq ptr %.2258.us, null
  %or.cond8.us = select i1 %37, i1 true, i1 %38
  br i1 %or.cond8.us, label %73, label %39

39:                                               ; preds = %36
  %40 = load ptr, ptr %18, align 8, !tbaa !14
  %41 = load ptr, ptr %40, align 8, !tbaa !18
  %42 = getelementptr inbounds i8, ptr %41, i64 32
  %43 = load i64, ptr %42, align 8, !tbaa !21
  %44 = sub i64 0, %43
  %45 = getelementptr inbounds i8, ptr %.1261.us, i64 %44
  %46 = getelementptr inbounds i8, ptr %.2258.us, i64 %44
  %47 = tail call i32 @by_unicode(ptr noundef %45, ptr noundef %46)
  %48 = icmp slt i32 %47, 1
  br i1 %48, label %61, label %49

49:                                               ; preds = %39
  %50 = getelementptr inbounds i8, ptr %.2258.us, i64 16
  %51 = load ptr, ptr %50, align 8, !tbaa !16
  %.not330.us = icmp eq ptr %51, null
  br i1 %.not330.us, label %58, label %52

52:                                               ; preds = %49
  %53 = load ptr, ptr %18, align 8, !tbaa !14
  %54 = load ptr, ptr %53, align 8, !tbaa !18
  %55 = getelementptr inbounds i8, ptr %54, i64 32
  %56 = load i64, ptr %55, align 8, !tbaa !21
  %57 = getelementptr inbounds i8, ptr %51, i64 %56
  br label %58

58:                                               ; preds = %52, %49
  %59 = phi ptr [ %57, %52 ], [ null, %49 ]
  %60 = add i32 %.0265.us, -1
  br label %100

61:                                               ; preds = %39
  %.not331.us = icmp eq ptr %.1261.us, null
  br i1 %.not331.us, label %71, label %62

62:                                               ; preds = %61
  %63 = getelementptr inbounds i8, ptr %.1261.us, i64 16
  %64 = load ptr, ptr %63, align 8, !tbaa !16
  %.not332.us = icmp eq ptr %64, null
  br i1 %.not332.us, label %71, label %65

65:                                               ; preds = %62
  %66 = load ptr, ptr %18, align 8, !tbaa !14
  %67 = load ptr, ptr %66, align 8, !tbaa !18
  %68 = getelementptr inbounds i8, ptr %67, i64 32
  %69 = load i64, ptr %68, align 8, !tbaa !21
  %70 = getelementptr inbounds i8, ptr %64, i64 %69
  br label %71

71:                                               ; preds = %65, %62, %61
  %.3263.us = phi ptr [ null, %61 ], [ %70, %65 ], [ null, %62 ]
  %72 = add i32 %.2269.us, -1
  br label %100

73:                                               ; preds = %36
  %.not333.us = icmp eq ptr %.1261.us, null
  br i1 %.not333.us, label %83, label %74

74:                                               ; preds = %73
  %75 = getelementptr inbounds i8, ptr %.1261.us, i64 16
  %76 = load ptr, ptr %75, align 8, !tbaa !16
  %.not334.us = icmp eq ptr %76, null
  br i1 %.not334.us, label %83, label %77

77:                                               ; preds = %74
  %78 = load ptr, ptr %18, align 8, !tbaa !14
  %79 = load ptr, ptr %78, align 8, !tbaa !18
  %80 = getelementptr inbounds i8, ptr %79, i64 32
  %81 = load i64, ptr %80, align 8, !tbaa !21
  %82 = getelementptr inbounds i8, ptr %76, i64 %81
  br label %83

83:                                               ; preds = %77, %74, %73
  %.2262.us = phi ptr [ null, %73 ], [ %82, %77 ], [ null, %74 ]
  %84 = add i32 %.2269.us, -1
  br label %100

85:                                               ; preds = %.thread.us
  %86 = icmp ne i32 %.0265.us, 0
  %87 = icmp ne ptr %.2258.us, null
  %88 = select i1 %86, i1 %87, i1 false
  br i1 %88, label %.critedge6.us, label %.loopexit382.us

.critedge6.us:                                    ; preds = %85
  %89 = getelementptr inbounds i8, ptr %.2258.us, i64 16
  %90 = load ptr, ptr %89, align 8, !tbaa !16
  %.not335.us = icmp eq ptr %90, null
  br i1 %.not335.us, label %97, label %91

91:                                               ; preds = %.critedge6.us
  %92 = load ptr, ptr %18, align 8, !tbaa !14
  %93 = load ptr, ptr %92, align 8, !tbaa !18
  %94 = getelementptr inbounds i8, ptr %93, i64 32
  %95 = load i64, ptr %94, align 8, !tbaa !21
  %96 = getelementptr inbounds i8, ptr %90, i64 %95
  br label %97

97:                                               ; preds = %91, %.critedge6.us
  %98 = phi ptr [ %96, %91 ], [ null, %.critedge6.us ]
  %99 = add i32 %.0265.us, -1
  br label %100

100:                                              ; preds = %97, %83, %71, %58
  %.3270.us = phi i32 [ 0, %97 ], [ %84, %83 ], [ %72, %71 ], [ %.2269.us, %58 ]
  %.1266.us = phi i32 [ %99, %97 ], [ %.0265.us, %83 ], [ %.0265.us, %71 ], [ %60, %58 ]
  %.4264.us = phi ptr [ %.1261.us, %97 ], [ %.2262.us, %83 ], [ %.3263.us, %71 ], [ %.1261.us, %58 ]
  %.3259.us = phi ptr [ %98, %97 ], [ %.2258.us, %83 ], [ %.2258.us, %71 ], [ %59, %58 ]
  %.0255.us = phi ptr [ %.2258.us, %97 ], [ %.1261.us, %83 ], [ %.1261.us, %71 ], [ %.2258.us, %58 ]
  %.not336.us = icmp eq ptr %.1250.us, null
  %.not338.us = icmp eq ptr %.0255.us, null
  br i1 %.not336.us, label %112, label %101

101:                                              ; preds = %100
  br i1 %.not338.us, label %.thread345.thread.us, label %102

102:                                              ; preds = %101
  %103 = load ptr, ptr %18, align 8, !tbaa !14
  %104 = load ptr, ptr %103, align 8, !tbaa !18
  %105 = getelementptr inbounds i8, ptr %104, i64 32
  %106 = load i64, ptr %105, align 8, !tbaa !21
  %107 = sub i64 0, %106
  %108 = getelementptr inbounds i8, ptr %.0255.us, i64 %107
  %109 = getelementptr inbounds i8, ptr %.1250.us, i64 16
  store ptr %108, ptr %109, align 8, !tbaa !16
  %110 = getelementptr inbounds i8, ptr %.1250.us, i64 %107
  br label %113

.thread345.thread.us:                             ; preds = %101
  %111 = getelementptr inbounds i8, ptr %.1250.us, i64 16
  store ptr null, ptr %111, align 8, !tbaa !16
  br label %.thread.us, !llvm.loop !26

112:                                              ; preds = %100
  br i1 %.not338.us, label %.thread.us.outer.backedge, label %113

113:                                              ; preds = %112, %102
  %.3254348353.us = phi ptr [ %.2253.us.ph, %102 ], [ %.0255.us, %112 ]
  %114 = phi ptr [ %110, %102 ], [ null, %112 ]
  %115 = getelementptr inbounds i8, ptr %.0255.us, i64 8
  store ptr %114, ptr %115, align 8, !tbaa !27
  br label %.thread.us.outer.backedge

.thread.us.outer.backedge:                        ; preds = %113, %112
  %.2253.us.ph.be = phi ptr [ null, %112 ], [ %.3254348353.us, %113 ]
  br label %.thread.us.outer, !llvm.loop !26

._crit_edge.us459:                                ; preds = %.loopexit382.us
  %.not327.us = icmp eq ptr %.1250.us, null
  br i1 %.not327.us, label %118, label %116

116:                                              ; preds = %._crit_edge.us459
  %117 = getelementptr inbounds i8, ptr %.1250.us, i64 16
  store ptr null, ptr %117, align 8, !tbaa !16
  br label %118

118:                                              ; preds = %116, %._crit_edge.us459
  %.0249.lcssa.us496 = phi ptr [ %.1250.us, %116 ], [ null, %._crit_edge.us459 ]
  %119 = icmp ult i32 %26, 2
  br i1 %119, label %.loopexit388.us.loopexit, label %.preheader383.us

.loopexit388.us.loopexit:                         ; preds = %.preheader383.us, %118
  %.1252.lcssa.us495501 = phi ptr [ %.2253.us.ph, %118 ], [ null, %.preheader383.us ]
  %.0249.lcssa.us496500 = phi ptr [ %.0249.lcssa.us496, %118 ], [ null, %.preheader383.us ]
  %120 = load ptr, ptr %18, align 8, !tbaa !14
  %121 = load ptr, ptr %120, align 8, !tbaa !18
  %122 = getelementptr inbounds i8, ptr %121, i64 24
  store ptr %.0249.lcssa.us496500, ptr %122, align 8, !tbaa !28
  %123 = getelementptr inbounds i8, ptr %121, i64 32
  %124 = load i64, ptr %123, align 8, !tbaa !21
  %125 = sub i64 0, %124
  %126 = getelementptr inbounds i8, ptr %.1252.lcssa.us495501, i64 %125
  store ptr %126, ptr %18, align 8, !tbaa !14
  br label %.loopexit388.us

.loopexit388.us:                                  ; preds = %.loopexit388.us.loopexit, %._crit_edge405.us
  %.not473 = icmp eq i16 %19, 0
  br i1 %.not473, label %._crit_edge427.us, label %.lr.ph426.us.preheader

.lr.ph426.us.preheader:                           ; preds = %.loopexit388.us
  %wide.trip.count484 = zext i16 %19 to i64
  br label %.lr.ph426.us

._crit_edge427.us:                                ; preds = %243, %.loopexit388.us
  %127 = getelementptr inbounds i8, ptr %18, i64 8
  %128 = load ptr, ptr %127, align 8, !tbaa !29
  %.not311.us = icmp eq ptr %128, null
  br i1 %.not311.us, label %.critedge, label %.lr.ph443.us

129:                                              ; preds = %.lr.ph443.us, %.loopexit.us
  %.0442.us = phi ptr [ null, %.lr.ph443.us ], [ %.1.us, %.loopexit.us ]
  %.1211441.us = phi ptr [ null, %.lr.ph443.us ], [ %.2.us.ph, %.loopexit.us ]
  %.0217440.us = phi ptr [ %.0210449.us540, %.lr.ph443.us ], [ %.2215.us, %.loopexit.us ]
  %.0228439.us = phi i32 [ 0, %.lr.ph443.us ], [ %130, %.loopexit.us ]
  %130 = add i32 %.0228439.us, 1
  br i1 %.not474, label %.thread354.us.preheader, label %.lr.ph432.us

.lr.ph432.us:                                     ; preds = %129, %134
  %.0213430.us = phi ptr [ %139, %134 ], [ %.0217440.us, %129 ]
  %.0223429.us = phi i32 [ %131, %134 ], [ 0, %129 ]
  %131 = add nuw i32 %.0223429.us, 1
  %132 = getelementptr inbounds i8, ptr %.0213430.us, i64 16
  %133 = load ptr, ptr %132, align 8, !tbaa !16
  %.not315.us = icmp eq ptr %133, null
  br i1 %.not315.us, label %.thread354.us.preheader, label %134

134:                                              ; preds = %.lr.ph432.us
  %135 = load ptr, ptr %127, align 8, !tbaa !29
  %136 = load ptr, ptr %135, align 8, !tbaa !30
  %137 = getelementptr inbounds i8, ptr %136, i64 32
  %138 = load i64, ptr %137, align 8, !tbaa !21
  %139 = getelementptr inbounds i8, ptr %133, i64 %138
  %exitcond486.not = icmp eq i32 %131, %.0227448.us541
  br i1 %exitcond486.not, label %.thread354.us.preheader, label %.lr.ph432.us, !llvm.loop !33

.thread354.us.preheader:                          ; preds = %134, %.lr.ph432.us, %129
  %.2225.us.ph = phi i32 [ 0, %129 ], [ %131, %.lr.ph432.us ], [ %.0227448.us541, %134 ]
  %.2215.us.ph = phi ptr [ %.0217440.us, %129 ], [ null, %.lr.ph432.us ], [ %139, %134 ]
  br label %.thread354.us.outer

.thread354.us.outer:                              ; preds = %.thread354.us.outer.backedge, %.thread354.us.preheader
  %.2225.us.ph542 = phi i32 [ %.2225.us.ph, %.thread354.us.preheader ], [ %.3226.us, %.thread354.us.outer.backedge ]
  %.0221.us.ph = phi i32 [ %.0227448.us541, %.thread354.us.preheader ], [ %.1222.us, %.thread354.us.outer.backedge ]
  %.1218.us.ph = phi ptr [ %.0217440.us, %.thread354.us.preheader ], [ %.4.us, %.thread354.us.outer.backedge ]
  %.2215.us.ph543 = phi ptr [ %.2215.us.ph, %.thread354.us.preheader ], [ %.3216.us, %.thread354.us.outer.backedge ]
  %.2.us.ph = phi ptr [ %.1211441.us, %.thread354.us.preheader ], [ %.2.us.ph.be, %.thread354.us.outer.backedge ]
  %.1.us.ph = phi ptr [ %.0442.us, %.thread354.us.preheader ], [ %.0212.us, %.thread354.us.outer.backedge ]
  br label %.thread354.us

.thread354.us:                                    ; preds = %.thread354.us.outer, %.thread355.thread.us
  %.2225.us = phi i32 [ %.3226.us, %.thread355.thread.us ], [ %.2225.us.ph542, %.thread354.us.outer ]
  %.0221.us = phi i32 [ %.1222.us, %.thread355.thread.us ], [ %.0221.us.ph, %.thread354.us.outer ]
  %.1218.us = phi ptr [ %.4.us, %.thread355.thread.us ], [ %.1218.us.ph, %.thread354.us.outer ]
  %.2215.us = phi ptr [ %.3216.us, %.thread355.thread.us ], [ %.2215.us.ph543, %.thread354.us.outer ]
  %.1.us = phi ptr [ %.0212.us, %.thread355.thread.us ], [ %.1.us.ph, %.thread354.us.outer ]
  %cond344.us = icmp eq i32 %.2225.us, 0
  br i1 %cond344.us, label %189, label %140

140:                                              ; preds = %.thread354.us
  %141 = icmp eq i32 %.0221.us, 0
  %142 = icmp eq ptr %.2215.us, null
  %or.cond12.us = select i1 %141, i1 true, i1 %142
  br i1 %or.cond12.us, label %177, label %143

143:                                              ; preds = %140
  %144 = load ptr, ptr %127, align 8, !tbaa !29
  %145 = load ptr, ptr %144, align 8, !tbaa !30
  %146 = getelementptr inbounds i8, ptr %145, i64 32
  %147 = load i64, ptr %146, align 8, !tbaa !21
  %148 = sub i64 0, %147
  %149 = getelementptr inbounds i8, ptr %.1218.us, i64 %148
  %150 = getelementptr inbounds i8, ptr %.2215.us, i64 %148
  %151 = tail call i32 @by_uvs_key(ptr noundef %149, ptr noundef %150)
  %152 = icmp slt i32 %151, 1
  br i1 %152, label %165, label %153

153:                                              ; preds = %143
  %154 = getelementptr inbounds i8, ptr %.2215.us, i64 16
  %155 = load ptr, ptr %154, align 8, !tbaa !16
  %.not317.us = icmp eq ptr %155, null
  br i1 %.not317.us, label %162, label %156

156:                                              ; preds = %153
  %157 = load ptr, ptr %127, align 8, !tbaa !29
  %158 = load ptr, ptr %157, align 8, !tbaa !30
  %159 = getelementptr inbounds i8, ptr %158, i64 32
  %160 = load i64, ptr %159, align 8, !tbaa !21
  %161 = getelementptr inbounds i8, ptr %155, i64 %160
  br label %162

162:                                              ; preds = %156, %153
  %163 = phi ptr [ %161, %156 ], [ null, %153 ]
  %164 = add i32 %.0221.us, -1
  br label %204

165:                                              ; preds = %143
  %.not318.us = icmp eq ptr %.1218.us, null
  br i1 %.not318.us, label %175, label %166

166:                                              ; preds = %165
  %167 = getelementptr inbounds i8, ptr %.1218.us, i64 16
  %168 = load ptr, ptr %167, align 8, !tbaa !16
  %.not319.us = icmp eq ptr %168, null
  br i1 %.not319.us, label %175, label %169

169:                                              ; preds = %166
  %170 = load ptr, ptr %127, align 8, !tbaa !29
  %171 = load ptr, ptr %170, align 8, !tbaa !30
  %172 = getelementptr inbounds i8, ptr %171, i64 32
  %173 = load i64, ptr %172, align 8, !tbaa !21
  %174 = getelementptr inbounds i8, ptr %168, i64 %173
  br label %175

175:                                              ; preds = %169, %166, %165
  %.3220.us = phi ptr [ null, %165 ], [ %174, %169 ], [ null, %166 ]
  %176 = add i32 %.2225.us, -1
  br label %204

177:                                              ; preds = %140
  %.not320.us = icmp eq ptr %.1218.us, null
  br i1 %.not320.us, label %187, label %178

178:                                              ; preds = %177
  %179 = getelementptr inbounds i8, ptr %.1218.us, i64 16
  %180 = load ptr, ptr %179, align 8, !tbaa !16
  %.not321.us = icmp eq ptr %180, null
  br i1 %.not321.us, label %187, label %181

181:                                              ; preds = %178
  %182 = load ptr, ptr %127, align 8, !tbaa !29
  %183 = load ptr, ptr %182, align 8, !tbaa !30
  %184 = getelementptr inbounds i8, ptr %183, i64 32
  %185 = load i64, ptr %184, align 8, !tbaa !21
  %186 = getelementptr inbounds i8, ptr %180, i64 %185
  br label %187

187:                                              ; preds = %181, %178, %177
  %.2219.us = phi ptr [ null, %177 ], [ %186, %181 ], [ null, %178 ]
  %188 = add i32 %.2225.us, -1
  br label %204

189:                                              ; preds = %.thread354.us
  %190 = icmp ne i32 %.0221.us, 0
  %191 = icmp ne ptr %.2215.us, null
  %192 = select i1 %190, i1 %191, i1 false
  br i1 %192, label %.critedge10.us, label %.loopexit.us

.critedge10.us:                                   ; preds = %189
  %193 = getelementptr inbounds i8, ptr %.2215.us, i64 16
  %194 = load ptr, ptr %193, align 8, !tbaa !16
  %.not322.us = icmp eq ptr %194, null
  br i1 %.not322.us, label %201, label %195

195:                                              ; preds = %.critedge10.us
  %196 = load ptr, ptr %127, align 8, !tbaa !29
  %197 = load ptr, ptr %196, align 8, !tbaa !30
  %198 = getelementptr inbounds i8, ptr %197, i64 32
  %199 = load i64, ptr %198, align 8, !tbaa !21
  %200 = getelementptr inbounds i8, ptr %194, i64 %199
  br label %201

201:                                              ; preds = %195, %.critedge10.us
  %202 = phi ptr [ %200, %195 ], [ null, %.critedge10.us ]
  %203 = add i32 %.0221.us, -1
  br label %204

204:                                              ; preds = %201, %187, %175, %162
  %.3226.us = phi i32 [ 0, %201 ], [ %188, %187 ], [ %176, %175 ], [ %.2225.us, %162 ]
  %.1222.us = phi i32 [ %203, %201 ], [ %.0221.us, %187 ], [ %.0221.us, %175 ], [ %164, %162 ]
  %.4.us = phi ptr [ %.1218.us, %201 ], [ %.2219.us, %187 ], [ %.3220.us, %175 ], [ %.1218.us, %162 ]
  %.3216.us = phi ptr [ %202, %201 ], [ %.2215.us, %187 ], [ %.2215.us, %175 ], [ %163, %162 ]
  %.0212.us = phi ptr [ %.2215.us, %201 ], [ %.1218.us, %187 ], [ %.1218.us, %175 ], [ %.2215.us, %162 ]
  %.not323.us = icmp eq ptr %.1.us, null
  %.not325.us = icmp eq ptr %.0212.us, null
  br i1 %.not323.us, label %216, label %205

205:                                              ; preds = %204
  br i1 %.not325.us, label %.thread355.thread.us, label %206

206:                                              ; preds = %205
  %207 = load ptr, ptr %127, align 8, !tbaa !29
  %208 = load ptr, ptr %207, align 8, !tbaa !30
  %209 = getelementptr inbounds i8, ptr %208, i64 32
  %210 = load i64, ptr %209, align 8, !tbaa !21
  %211 = sub i64 0, %210
  %212 = getelementptr inbounds i8, ptr %.0212.us, i64 %211
  %213 = getelementptr inbounds i8, ptr %.1.us, i64 16
  store ptr %212, ptr %213, align 8, !tbaa !16
  %214 = getelementptr inbounds i8, ptr %.1.us, i64 %211
  br label %217

.thread355.thread.us:                             ; preds = %205
  %215 = getelementptr inbounds i8, ptr %.1.us, i64 16
  store ptr null, ptr %215, align 8, !tbaa !16
  br label %.thread354.us, !llvm.loop !34

216:                                              ; preds = %204
  br i1 %.not325.us, label %.thread354.us.outer.backedge, label %217

217:                                              ; preds = %216, %206
  %.3358363.us = phi ptr [ %.2.us.ph, %206 ], [ %.0212.us, %216 ]
  %218 = phi ptr [ %214, %206 ], [ null, %216 ]
  %219 = getelementptr inbounds i8, ptr %.0212.us, i64 8
  store ptr %218, ptr %219, align 8, !tbaa !27
  br label %.thread354.us.outer.backedge

.thread354.us.outer.backedge:                     ; preds = %217, %216
  %.2.us.ph.be = phi ptr [ null, %216 ], [ %.3358363.us, %217 ]
  br label %.thread354.us.outer, !llvm.loop !34

._crit_edge444.us:                                ; preds = %.loopexit.us
  %.not314.us = icmp eq ptr %.1.us, null
  br i1 %.not314.us, label %222, label %220

220:                                              ; preds = %._crit_edge444.us
  %221 = getelementptr inbounds i8, ptr %.1.us, i64 16
  store ptr null, ptr %221, align 8, !tbaa !16
  br label %222

222:                                              ; preds = %220, %._crit_edge444.us
  %.0.lcssa.us511 = phi ptr [ %.1.us, %220 ], [ null, %._crit_edge444.us ]
  %223 = icmp ult i32 %130, 2
  br i1 %223, label %.loopexit386.us.loopexit, label %.preheader.us

.loopexit386.us.loopexit:                         ; preds = %.preheader.us, %222
  %.1211.lcssa.us510517 = phi ptr [ %.2.us.ph, %222 ], [ null, %.preheader.us ]
  %.0.lcssa.us511516 = phi ptr [ %.0.lcssa.us511, %222 ], [ null, %.preheader.us ]
  %224 = load ptr, ptr %127, align 8, !tbaa !29
  %225 = load ptr, ptr %224, align 8, !tbaa !30
  %226 = getelementptr inbounds i8, ptr %225, i64 24
  store ptr %.0.lcssa.us511516, ptr %226, align 8, !tbaa !28
  %227 = getelementptr inbounds i8, ptr %225, i64 32
  %228 = load i64, ptr %227, align 8, !tbaa !21
  %229 = sub i64 0, %228
  %230 = getelementptr inbounds i8, ptr %.1211.lcssa.us510517, i64 %229
  store ptr %230, ptr %127, align 8, !tbaa !29
  br label %.critedge

.lr.ph426.us:                                     ; preds = %.lr.ph426.us.preheader, %243
  %indvars.iv481 = phi i64 [ 0, %.lr.ph426.us.preheader ], [ %indvars.iv.next482, %243 ]
  %231 = shl nuw nsw i64 %indvars.iv481, 3
  %232 = getelementptr inbounds i8, ptr %14, i64 %231
  %233 = tail call zeroext i16 @read_16u(ptr noundef nonnull %232)
  %234 = getelementptr inbounds i8, ptr %232, i64 2
  %235 = tail call zeroext i16 @read_16u(ptr noundef nonnull %234)
  %236 = tail call zeroext i1 @isValidCmapEncoding(i16 noundef zeroext %233, i16 noundef zeroext %235)
  br i1 %236, label %237, label %243

237:                                              ; preds = %.lr.ph426.us
  %238 = getelementptr inbounds i8, ptr %232, i64 4
  %239 = tail call i32 @read_32u(ptr noundef nonnull %238)
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds i8, ptr %.sroa.5.0.copyload.le, i64 %240
  %242 = sub i32 %.sroa.4161.0.copyload.le, %239
  tail call void @readCmapMappingTableUVS(ptr noundef %241, i32 noundef %242, ptr noundef nonnull %18)
  br label %243

243:                                              ; preds = %237, %.lr.ph426.us
  %indvars.iv.next482 = add nuw nsw i64 %indvars.iv481, 1
  %exitcond485.not = icmp eq i64 %indvars.iv.next482, %wide.trip.count484
  br i1 %exitcond485.not, label %._crit_edge427.us, label %.lr.ph426.us, !llvm.loop !35

244:                                              ; preds = %16, %.preheader390.us
  %.3240.us = phi ptr [ null, %.preheader390.us ], [ %18, %16 ]
  %245 = load ptr, ptr %7, align 8, !tbaa !36
  %246 = getelementptr inbounds i8, ptr %245, i64 48
  %247 = load ptr, ptr %246, align 8, !tbaa !39
  %248 = tail call ptr @sdsempty() #4
  %249 = tail call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %248, ptr noundef nonnull @.str) #4
  tail call void %247(ptr noundef %245, i8 noundef zeroext 1, i32 noundef 1, ptr noundef %249) #4
  %.not339.us = icmp eq ptr %.3240.us, null
  br i1 %.not339.us, label %.critedge, label %250

250:                                              ; preds = %244
  tail call void @free(ptr noundef nonnull %.3240.us) #4
  br label %.critedge

.loopexit.us:                                     ; preds = %189
  %.not313.us = icmp eq ptr %.2215.us, null
  br i1 %.not313.us, label %._crit_edge444.us, label %129, !llvm.loop !41

.loopexit382.us:                                  ; preds = %85
  %.not326.us = icmp eq ptr %.2258.us, null
  br i1 %.not326.us, label %._crit_edge.us459, label %25, !llvm.loop !42

.preheader.us:                                    ; preds = %222
  %251 = shl i32 %.0227448.us541, 1
  %.not313438.us = icmp eq ptr %.2.us.ph, null
  br i1 %.not313438.us, label %.loopexit386.us.loopexit, label %.lr.ph443.us

.preheader383.us:                                 ; preds = %118
  %252 = shl i32 %.0271422.us539, 1
  %.not326413.us = icmp eq ptr %.2253.us.ph, null
  br i1 %.not326413.us, label %.loopexit388.us.loopexit, label %.lr.ph418.us

.preheader389.us:                                 ; preds = %16
  %.not471 = icmp eq i16 %19, 0
  %or.cond = or i1 %.not308403, %.not471
  br i1 %or.cond, label %._crit_edge405.us, label %.preheader384.us.us.preheader

.preheader384.us.us.preheader:                    ; preds = %.preheader389.us
  %wide.trip.count = zext i16 %19 to i64
  br label %.preheader384.us.us

.preheader384.us.us:                              ; preds = %.preheader384.us.us.preheader, %._crit_edge.us.us
  %253 = phi i16 [ %270, %._crit_edge.us.us ], [ %8, %.preheader384.us.us.preheader ]
  %.0287404.us.us = phi i64 [ %268, %._crit_edge.us.us ], [ 0, %.preheader384.us.us.preheader ]
  br label %254

254:                                              ; preds = %267, %.preheader384.us.us
  %indvars.iv = phi i64 [ %indvars.iv.next, %267 ], [ 0, %.preheader384.us.us ]
  %255 = shl nuw nsw i64 %indvars.iv, 3
  %256 = getelementptr inbounds i8, ptr %14, i64 %255
  %257 = tail call zeroext i16 @read_16u(ptr noundef nonnull %256)
  %258 = getelementptr inbounds i8, ptr %256, i64 2
  %259 = tail call zeroext i16 @read_16u(ptr noundef nonnull %258)
  %260 = tail call zeroext i1 @isValidCmapEncoding(i16 noundef zeroext %257, i16 noundef zeroext %259)
  br i1 %260, label %261, label %267

261:                                              ; preds = %254
  %262 = getelementptr inbounds i8, ptr %256, i64 4
  %263 = tail call i32 @read_32u(ptr noundef nonnull %262)
  %264 = zext i32 %263 to i64
  %265 = getelementptr inbounds i8, ptr %.sroa.5.0.copyload.le, i64 %264
  %266 = sub i32 %.sroa.4161.0.copyload.le, %263
  tail call void @readCmapMappingTable(ptr noundef %265, i32 noundef %266, ptr noundef %18, i16 noundef zeroext %253)
  br label %267

267:                                              ; preds = %261, %254
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us.us, label %254, !llvm.loop !43

._crit_edge.us.us:                                ; preds = %267
  %268 = add i64 %.0287404.us.us, 1
  %269 = getelementptr inbounds [3 x i16], ptr @formatPriorities, i64 0, i64 %268
  %270 = load i16, ptr %269, align 2, !tbaa !44
  %.not308.us.us = icmp eq i16 %270, 0
  br i1 %.not308.us.us, label %._crit_edge405.us, label %.preheader384.us.us, !llvm.loop !45

.lr.ph418.us:                                     ; preds = %._crit_edge405.us, %.preheader383.us
  %.0271422.us539 = phi i32 [ %252, %.preheader383.us ], [ 1, %._crit_edge405.us ]
  %.0251423.us538 = phi ptr [ %.2253.us.ph, %.preheader383.us ], [ %24, %._crit_edge405.us ]
  %.not472 = icmp eq i32 %.0271422.us539, 0
  br label %25

.lr.ph443.us:                                     ; preds = %._crit_edge427.us, %.preheader.us
  %.0227448.us541 = phi i32 [ %251, %.preheader.us ], [ 1, %._crit_edge427.us ]
  %.0210449.us540 = phi ptr [ %.2.us.ph, %.preheader.us ], [ %128, %._crit_edge427.us ]
  %.not474 = icmp eq i32 %.0227448.us541, 0
  br label %129

.thread371:                                       ; preds = %12
  %indvars.iv.next488 = add nuw nsw i64 %indvars.iv487, 1
  %271 = icmp ult i64 %indvars.iv.next488, %11
  br i1 %271, label %12, label %.critedge, !llvm.loop !46

.critedge:                                        ; preds = %.thread371, %244, %250, %.loopexit386.us.loopexit, %._crit_edge427.us, %2
  %272 = phi ptr [ null, %2 ], [ %18, %.loopexit386.us.loopexit ], [ %18, %._crit_edge427.us ], [ null, %250 ], [ null, %244 ], [ null, %.thread371 ]
  ret ptr %272
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @read_16u(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @isValidCmapEncoding(i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @read_32u(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @readCmapMappingTable(ptr noundef, i32 noundef, ptr noundef, i16 noundef zeroext) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
declare hidden void @readCmapMappingTableUVS(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

declare ptr @sdscatprintf(ptr noundef, ptr noundef, ...) local_unnamed_addr #3

declare ptr @sdsempty() local_unnamed_addr #3

attributes #0 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 = { inlinehint 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 #3 = { "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 }

!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, !11, i64 16}
!6 = !{!"", !7, i64 0, !10, i64 4, !10, i64 6, !10, i64 8, !10, i64 10, !11, i64 16}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!7, !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!15, !11, i64 0}
!15 = !{!"", !11, i64 0, !11, i64 8}
!16 = !{!17, !11, i64 16}
!17 = !{!"UT_hash_handle", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !7, i64 48, !7, i64 52}
!18 = !{!19, !11, i64 0}
!19 = !{!"", !17, i64 0, !7, i64 56, !20, i64 64}
!20 = !{!"otfcc_Handle", !7, i64 0, !10, i64 4, !11, i64 8}
!21 = !{!22, !23, i64 32}
!22 = !{!"UT_hash_table", !11, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !11, i64 24, !23, i64 32, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56}
!23 = !{!"long", !8, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!17, !11, i64 8}
!28 = !{!22, !11, i64 24}
!29 = !{!15, !11, i64 8}
!30 = !{!31, !11, i64 0}
!31 = !{!"", !17, i64 0, !32, i64 56, !20, i64 64}
!32 = !{!"", !7, i64 0, !7, i64 4}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = !{!37, !11, i64 32}
!37 = !{!"", !38, i64 0, !38, i64 1, !38, i64 2, !38, i64 3, !38, i64 4, !38, i64 5, !38, i64 6, !38, i64 7, !38, i64 8, !38, i64 9, !38, i64 10, !38, i64 11, !38, i64 12, !38, i64 13, !38, i64 14, !38, i64 15, !38, i64 16, !38, i64 17, !38, i64 18, !38, i64 19, !38, i64 20, !38, i64 21, !38, i64 22, !11, i64 24, !11, i64 32}
!38 = !{!"_Bool", !8, i64 0}
!39 = !{!40, !11, i64 48}
!40 = !{!"otfcc_ILogger", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !25}
!44 = !{!10, !10, i64 0}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}


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