; LLVM IR from caryll/otfcc :: lib/table/otl/subtables (gpos-pair)

; 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.__otfcc_ICoverage = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.otl_PositionValue = type { double, double, double, double }
%struct.subtable_gpos_pair = type { ptr, ptr, ptr, ptr }
%struct.otl_ClassDef = type { i16, i32, i16, ptr, ptr }
%struct.otl_Coverage = type { i16, i32, ptr }
%struct.otfcc_Handle = type { i32, i16, ptr }
%struct.IndividualGposPair = type { i16, ptr, ptr }

@otl_iCoverage = external constant %struct.__otfcc_ICoverage, align 8

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @__caryll_allocate_clean(i64 noundef, i64 noundef) #1

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

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

declare zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8) #3

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

45:                                               ; preds = %97, %1
  %46 = load i16, ptr %8, align 2, !tbaa !9
  %47 = zext i16 %46 to i32
  %48 = load i16, ptr %6, align 2, !tbaa !9
  %49 = zext i16 %48 to i32
  %50 = icmp slt i32 %47, %49
  br i1 %50, label %52, label %51

51:                                               ; preds = %45
  store i32 2, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #5
  br label %100

52:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #5
  store i16 0, ptr %10, align 2, !tbaa !9
  br label %53

53:                                               ; preds = %93, %52
  %54 = load i16, ptr %10, align 2, !tbaa !9
  %55 = zext i16 %54 to i32
  %56 = load i16, ptr %7, align 2, !tbaa !9
  %57 = zext i16 %56 to i32
  %58 = icmp slt i32 %55, %57
  br i1 %58, label %60, label %59

59:                                               ; preds = %53
  store i32 5, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #5
  br label %96

60:                                               ; preds = %53
  %61 = load ptr, ptr %3, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %61, i32 0, i32 2
  %63 = load ptr, ptr %62, align 8, !tbaa !17
  %64 = load i16, ptr %8, align 2, !tbaa !9
  %65 = zext i16 %64 to i64
  %66 = getelementptr inbounds ptr, ptr %63, i64 %65
  %67 = load ptr, ptr %66, align 8, !tbaa !5
  %68 = load i16, ptr %10, align 2, !tbaa !9
  %69 = zext i16 %68 to i64
  %70 = getelementptr inbounds %struct.otl_PositionValue, ptr %67, i64 %69
  %71 = call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %70)
  %72 = zext i8 %71 to i32
  %73 = load i16, ptr %4, align 2, !tbaa !9
  %74 = zext i16 %73 to i32
  %75 = or i32 %74, %72
  %76 = trunc i32 %75 to i16
  store i16 %76, ptr %4, align 2, !tbaa !9
  %77 = load ptr, ptr %3, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %77, i32 0, i32 3
  %79 = load ptr, ptr %78, align 8, !tbaa !18
  %80 = load i16, ptr %8, align 2, !tbaa !9
  %81 = zext i16 %80 to i64
  %82 = getelementptr inbounds ptr, ptr %79, i64 %81
  %83 = load ptr, ptr %82, align 8, !tbaa !5
  %84 = load i16, ptr %10, align 2, !tbaa !9
  %85 = zext i16 %84 to i64
  %86 = getelementptr inbounds %struct.otl_PositionValue, ptr %83, i64 %85
  %87 = call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %86)
  %88 = zext i8 %87 to i32
  %89 = load i16, ptr %5, align 2, !tbaa !9
  %90 = zext i16 %89 to i32
  %91 = or i32 %90, %88
  %92 = trunc i32 %91 to i16
  store i16 %92, ptr %5, align 2, !tbaa !9
  br label %93

93:                                               ; preds = %60
  %94 = load i16, ptr %10, align 2, !tbaa !9
  %95 = add i16 %94, 1
  store i16 %95, ptr %10, align 2, !tbaa !9
  br label %53, !llvm.loop !19

96:                                               ; preds = %59
  br label %97

97:                                               ; preds = %96
  %98 = load i16, ptr %8, align 2, !tbaa !9
  %99 = add i16 %98, 1
  store i16 %99, ptr %8, align 2, !tbaa !9
  br label %45, !llvm.loop !21

100:                                              ; preds = %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %101 = load ptr, ptr %3, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %101, i32 0, i32 0
  %103 = load ptr, ptr %102, align 8, !tbaa !11
  %104 = getelementptr inbounds %struct.otl_ClassDef, ptr %103, i32 0, i32 0
  %105 = load i16, ptr %104, align 8, !tbaa !22
  %106 = zext i16 %105 to i64
  %107 = mul i64 2, %106
  %108 = call ptr @__caryll_allocate_clean(i64 noundef %107, i64 noundef 290)
  store ptr %108, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #5
  store i16 0, ptr %12, align 2, !tbaa !9
  br label %109

109:                                              ; preds = %195, %100
  %110 = load i16, ptr %12, align 2, !tbaa !9
  %111 = zext i16 %110 to i32
  %112 = load ptr, ptr %3, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %112, i32 0, i32 0
  %114 = load ptr, ptr %113, align 8, !tbaa !11
  %115 = getelementptr inbounds %struct.otl_ClassDef, ptr %114, i32 0, i32 0
  %116 = load i16, ptr %115, align 8, !tbaa !22
  %117 = zext i16 %116 to i32
  %118 = icmp slt i32 %111, %117
  br i1 %118, label %120, label %119

119:                                              ; preds = %109
  store i32 8, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #5
  br label %198

120:                                              ; preds = %109
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = load i16, ptr %12, align 2, !tbaa !9
  %123 = zext i16 %122 to i64
  %124 = getelementptr inbounds i16, ptr %121, i64 %123
  store i16 0, ptr %124, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #5
  store i16 0, ptr %13, align 2, !tbaa !9
  br label %125

125:                                              ; preds = %191, %120
  %126 = load i16, ptr %13, align 2, !tbaa !9
  %127 = zext i16 %126 to i32
  %128 = load ptr, ptr %3, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %128, i32 0, i32 1
  %130 = load ptr, ptr %129, align 8, !tbaa !16
  %131 = getelementptr inbounds %struct.otl_ClassDef, ptr %130, i32 0, i32 0
  %132 = load i16, ptr %131, align 8, !tbaa !22
  %133 = zext i16 %132 to i32
  %134 = icmp slt i32 %127, %133
  br i1 %134, label %136, label %135

135:                                              ; preds = %125
  store i32 11, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #5
  br label %194

136:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #5
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %137, i32 0, i32 0
  %139 = load ptr, ptr %138, align 8, !tbaa !11
  %140 = getelementptr inbounds %struct.otl_ClassDef, ptr %139, i32 0, i32 4
  %141 = load ptr, ptr %140, align 8, !tbaa !23
  %142 = load i16, ptr %12, align 2, !tbaa !9
  %143 = zext i16 %142 to i64
  %144 = getelementptr inbounds i16, ptr %141, i64 %143
  %145 = load i16, ptr %144, align 2, !tbaa !9
  store i16 %145, ptr %14, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #5
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %146, i32 0, i32 1
  %148 = load ptr, ptr %147, align 8, !tbaa !16
  %149 = getelementptr inbounds %struct.otl_ClassDef, ptr %148, i32 0, i32 4
  %150 = load ptr, ptr %149, align 8, !tbaa !23
  %151 = load i16, ptr %13, align 2, !tbaa !9
  %152 = zext i16 %151 to i64
  %153 = getelementptr inbounds i16, ptr %150, i64 %152
  %154 = load i16, ptr %153, align 2, !tbaa !9
  store i16 %154, ptr %15, align 2, !tbaa !9
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %155, i32 0, i32 2
  %157 = load ptr, ptr %156, align 8, !tbaa !17
  %158 = load i16, ptr %14, align 2, !tbaa !9
  %159 = zext i16 %158 to i64
  %160 = getelementptr inbounds ptr, ptr %157, i64 %159
  %161 = load ptr, ptr %160, align 8, !tbaa !5
  %162 = load i16, ptr %15, align 2, !tbaa !9
  %163 = zext i16 %162 to i64
  %164 = getelementptr inbounds %struct.otl_PositionValue, ptr %161, i64 %163
  %165 = call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %164)
  %166 = zext i8 %165 to i32
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %167, i32 0, i32 3
  %169 = load ptr, ptr %168, align 8, !tbaa !18
  %170 = load i16, ptr %14, align 2, !tbaa !9
  %171 = zext i16 %170 to i64
  %172 = getelementptr inbounds ptr, ptr %169, i64 %171
  %173 = load ptr, ptr %172, align 8, !tbaa !5
  %174 = load i16, ptr %15, align 2, !tbaa !9
  %175 = zext i16 %174 to i64
  %176 = getelementptr inbounds %struct.otl_PositionValue, ptr %173, i64 %175
  %177 = call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %176)
  %178 = zext i8 %177 to i32
  %179 = or i32 %166, %178
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %190

181:                                              ; preds = %136
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = load i16, ptr %12, align 2, !tbaa !9
  %184 = zext i16 %183 to i64
  %185 = getelementptr inbounds i16, ptr %182, i64 %184
  %186 = load i16, ptr %185, align 2, !tbaa !9
  %187 = zext i16 %186 to i32
  %188 = add nsw i32 %187, 1
  %189 = trunc i32 %188 to i16
  store i16 %189, ptr %185, align 2, !tbaa !9
  br label %190

190:                                              ; preds = %181, %136
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #5
  br label %191

191:                                              ; preds = %190
  %192 = load i16, ptr %13, align 2, !tbaa !9
  %193 = add i16 %192, 1
  store i16 %193, ptr %13, align 2, !tbaa !9
  br label %125, !llvm.loop !24

194:                                              ; preds = %135
  br label %195

195:                                              ; preds = %194
  %196 = load i16, ptr %12, align 2, !tbaa !9
  %197 = add i16 %196, 1
  store i16 %197, ptr %12, align 2, !tbaa !9
  br label %109, !llvm.loop !25

198:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %199, i32 0, i32 0
  %201 = load ptr, ptr %200, align 8, !tbaa !11
  %202 = call ptr @covFromCD(ptr noundef %201)
  store ptr %202, ptr %16, align 8, !tbaa !5
  %203 = load ptr, ptr getelementptr inbounds (%struct.__otfcc_ICoverage, ptr @otl_iCoverage, i32 0, i32 14), align 8, !tbaa !26
  %204 = load ptr, ptr %16, align 8, !tbaa !5
  call void %203(ptr noundef %204, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %205 = load ptr, ptr getelementptr inbounds (%struct.__otfcc_ICoverage, ptr @otl_iCoverage, i32 0, i32 12), align 8, !tbaa !28
  %206 = load ptr, ptr %16, align 8, !tbaa !5
  %207 = call ptr %205(ptr noundef %206)
  %208 = call ptr @bk_newBlockFromBuffer(ptr noundef %207)
  %209 = load i16, ptr %4, align 2, !tbaa !9
  %210 = zext i16 %209 to i32
  %211 = load i16, ptr %5, align 2, !tbaa !9
  %212 = zext i16 %211 to i32
  %213 = load ptr, ptr %3, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !11
  %216 = getelementptr inbounds %struct.otl_ClassDef, ptr %215, i32 0, i32 0
  %217 = load i16, ptr %216, align 8, !tbaa !22
  %218 = zext i16 %217 to i32
  %219 = call ptr (i32, ...) @bk_new_Block(i32 noundef 2, i32 noundef 1, i32 noundef 16, ptr noundef %208, i32 noundef 2, i32 noundef %210, i32 noundef 2, i32 noundef %212, i32 noundef 2, i32 noundef %218, i32 noundef 0)
  store ptr %219, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #5
  store i16 0, ptr %18, align 2, !tbaa !9
  br label %220

220:                                              ; preds = %427, %198
  %221 = load i16, ptr %18, align 2, !tbaa !9
  %222 = zext i16 %221 to i32
  %223 = load ptr, ptr %16, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.otl_Coverage, ptr %223, i32 0, i32 0
  %225 = load i16, ptr %224, align 8, !tbaa !29
  %226 = zext i16 %225 to i32
  %227 = icmp slt i32 %222, %226
  br i1 %227, label %229, label %228

228:                                              ; preds = %220
  store i32 14, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #5
  br label %430

229:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #5
  store i16 0, ptr %19, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #5
  store i16 0, ptr %20, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #5
  store i16 0, ptr %21, align 2, !tbaa !9
  br label %230

230:                                              ; preds = %279, %229
  %231 = load i16, ptr %21, align 2, !tbaa !9
  %232 = zext i16 %231 to i32
  %233 = load ptr, ptr %3, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %233, i32 0, i32 0
  %235 = load ptr, ptr %234, align 8, !tbaa !11
  %236 = getelementptr inbounds %struct.otl_ClassDef, ptr %235, i32 0, i32 0
  %237 = load i16, ptr %236, align 8, !tbaa !22
  %238 = zext i16 %237 to i32
  %239 = icmp slt i32 %232, %238
  br i1 %239, label %241, label %240

240:                                              ; preds = %230
  store i32 17, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #5
  br label %282

241:                                              ; preds = %230
  %242 = load ptr, ptr %3, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %242, i32 0, i32 0
  %244 = load ptr, ptr %243, align 8, !tbaa !11
  %245 = getelementptr inbounds %struct.otl_ClassDef, ptr %244, i32 0, i32 3
  %246 = load ptr, ptr %245, align 8, !tbaa !31
  %247 = load i16, ptr %21, align 2, !tbaa !9
  %248 = zext i16 %247 to i64
  %249 = getelementptr inbounds %struct.otfcc_Handle, ptr %246, i64 %248
  %250 = getelementptr inbounds %struct.otfcc_Handle, ptr %249, i32 0, i32 1
  %251 = load i16, ptr %250, align 4, !tbaa !32
  %252 = zext i16 %251 to i32
  %253 = load ptr, ptr %16, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.otl_Coverage, ptr %253, i32 0, i32 2
  %255 = load ptr, ptr %254, align 8, !tbaa !34
  %256 = load i16, ptr %18, align 2, !tbaa !9
  %257 = zext i16 %256 to i64
  %258 = getelementptr inbounds %struct.otfcc_Handle, ptr %255, i64 %257
  %259 = getelementptr inbounds %struct.otfcc_Handle, ptr %258, i32 0, i32 1
  %260 = load i16, ptr %259, align 4, !tbaa !32
  %261 = zext i16 %260 to i32
  %262 = icmp eq i32 %252, %261
  br i1 %262, label %263, label %278

263:                                              ; preds = %241
  %264 = load ptr, ptr %3, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %264, i32 0, i32 0
  %266 = load ptr, ptr %265, align 8, !tbaa !11
  %267 = getelementptr inbounds %struct.otl_ClassDef, ptr %266, i32 0, i32 4
  %268 = load ptr, ptr %267, align 8, !tbaa !23
  %269 = load i16, ptr %21, align 2, !tbaa !9
  %270 = zext i16 %269 to i64
  %271 = getelementptr inbounds i16, ptr %268, i64 %270
  %272 = load i16, ptr %271, align 2, !tbaa !9
  store i16 %272, ptr %20, align 2, !tbaa !9
  %273 = load ptr, ptr %11, align 8, !tbaa !5
  %274 = load i16, ptr %21, align 2, !tbaa !9
  %275 = zext i16 %274 to i64
  %276 = getelementptr inbounds i16, ptr %273, i64 %275
  %277 = load i16, ptr %276, align 2, !tbaa !9
  store i16 %277, ptr %19, align 2, !tbaa !9
  br label %278

278:                                              ; preds = %263, %241
  br label %279

279:                                              ; preds = %278
  %280 = load i16, ptr %21, align 2, !tbaa !9
  %281 = add i16 %280, 1
  store i16 %281, ptr %21, align 2, !tbaa !9
  br label %230, !llvm.loop !35

282:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %283 = load i16, ptr %19, align 2, !tbaa !9
  %284 = zext i16 %283 to i32
  %285 = call ptr (i32, ...) @bk_new_Block(i32 noundef 2, i32 noundef %284, i32 noundef 0)
  store ptr %285, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %286 = load i16, ptr %19, align 2, !tbaa !9
  %287 = zext i16 %286 to i64
  %288 = mul i64 24, %287
  %289 = call ptr @__caryll_allocate_clean(i64 noundef %288, i64 noundef 324)
  store ptr %289, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store i64 0, ptr %24, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #5
  store i16 0, ptr %25, align 2, !tbaa !9
  br label %290

290:                                              ; preds = %383, %282
  %291 = load i16, ptr %25, align 2, !tbaa !9
  %292 = zext i16 %291 to i32
  %293 = load ptr, ptr %3, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %293, i32 0, i32 1
  %295 = load ptr, ptr %294, align 8, !tbaa !16
  %296 = getelementptr inbounds %struct.otl_ClassDef, ptr %295, i32 0, i32 0
  %297 = load i16, ptr %296, align 8, !tbaa !22
  %298 = zext i16 %297 to i32
  %299 = icmp slt i32 %292, %298
  br i1 %299, label %301, label %300

300:                                              ; preds = %290
  store i32 20, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #5
  br label %386

301:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #5
  %302 = load ptr, ptr %3, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %302, i32 0, i32 1
  %304 = load ptr, ptr %303, align 8, !tbaa !16
  %305 = getelementptr inbounds %struct.otl_ClassDef, ptr %304, i32 0, i32 4
  %306 = load ptr, ptr %305, align 8, !tbaa !23
  %307 = load i16, ptr %25, align 2, !tbaa !9
  %308 = zext i16 %307 to i64
  %309 = getelementptr inbounds i16, ptr %306, i64 %308
  %310 = load i16, ptr %309, align 2, !tbaa !9
  store i16 %310, ptr %26, align 2, !tbaa !9
  %311 = load ptr, ptr %3, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %311, i32 0, i32 2
  %313 = load ptr, ptr %312, align 8, !tbaa !17
  %314 = load i16, ptr %20, align 2, !tbaa !9
  %315 = zext i16 %314 to i64
  %316 = getelementptr inbounds ptr, ptr %313, i64 %315
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = load i16, ptr %26, align 2, !tbaa !9
  %319 = zext i16 %318 to i64
  %320 = getelementptr inbounds %struct.otl_PositionValue, ptr %317, i64 %319
  %321 = call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %320)
  %322 = zext i8 %321 to i32
  %323 = load ptr, ptr %3, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %323, i32 0, i32 3
  %325 = load ptr, ptr %324, align 8, !tbaa !18
  %326 = load i16, ptr %20, align 2, !tbaa !9
  %327 = zext i16 %326 to i64
  %328 = getelementptr inbounds ptr, ptr %325, i64 %327
  %329 = load ptr, ptr %328, align 8, !tbaa !5
  %330 = load i16, ptr %26, align 2, !tbaa !9
  %331 = zext i16 %330 to i64
  %332 = getelementptr inbounds %struct.otl_PositionValue, ptr %329, i64 %331
  %333 = call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %332)
  %334 = zext i8 %333 to i32
  %335 = or i32 %322, %334
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %337, label %382

337:                                              ; preds = %301
  %338 = load ptr, ptr %3, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %338, i32 0, i32 1
  %340 = load ptr, ptr %339, align 8, !tbaa !16
  %341 = getelementptr inbounds %struct.otl_ClassDef, ptr %340, i32 0, i32 3
  %342 = load ptr, ptr %341, align 8, !tbaa !31
  %343 = load i16, ptr %25, align 2, !tbaa !9
  %344 = zext i16 %343 to i64
  %345 = getelementptr inbounds %struct.otfcc_Handle, ptr %342, i64 %344
  %346 = getelementptr inbounds %struct.otfcc_Handle, ptr %345, i32 0, i32 1
  %347 = load i16, ptr %346, align 4, !tbaa !32
  %348 = load ptr, ptr %23, align 8, !tbaa !5
  %349 = load i64, ptr %24, align 8, !tbaa !36
  %350 = getelementptr inbounds %struct.IndividualGposPair, ptr %348, i64 %349
  %351 = getelementptr inbounds %struct.IndividualGposPair, ptr %350, i32 0, i32 0
  store i16 %347, ptr %351, align 8, !tbaa !38
  %352 = load ptr, ptr %3, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %352, i32 0, i32 2
  %354 = load ptr, ptr %353, align 8, !tbaa !17
  %355 = load i16, ptr %20, align 2, !tbaa !9
  %356 = zext i16 %355 to i64
  %357 = getelementptr inbounds ptr, ptr %354, i64 %356
  %358 = load ptr, ptr %357, align 8, !tbaa !5
  %359 = load i16, ptr %26, align 2, !tbaa !9
  %360 = zext i16 %359 to i64
  %361 = getelementptr inbounds %struct.otl_PositionValue, ptr %358, i64 %360
  %362 = load ptr, ptr %23, align 8, !tbaa !5
  %363 = load i64, ptr %24, align 8, !tbaa !36
  %364 = getelementptr inbounds %struct.IndividualGposPair, ptr %362, i64 %363
  %365 = getelementptr inbounds %struct.IndividualGposPair, ptr %364, i32 0, i32 1
  store ptr %361, ptr %365, align 8, !tbaa !40
  %366 = load ptr, ptr %3, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.subtable_gpos_pair, ptr %366, i32 0, i32 3
  %368 = load ptr, ptr %367, align 8, !tbaa !18
  %369 = load i16, ptr %20, align 2, !tbaa !9
  %370 = zext i16 %369 to i64
  %371 = getelementptr inbounds ptr, ptr %368, i64 %370
  %372 = load ptr, ptr %371, align 8, !tbaa !5
  %373 = load i16, ptr %26, align 2, !tbaa !9
  %374 = zext i16 %373 to i64
  %375 = getelementptr inbounds %struct.otl_PositionValue, ptr %372, i64 %374
  %376 = load ptr, ptr %23, align 8, !tbaa !5
  %377 = load i64, ptr %24, align 8, !tbaa !36
  %378 = getelementptr inbounds %struct.IndividualGposPair, ptr %376, i64 %377
  %379 = getelementptr inbounds %struct.IndividualGposPair, ptr %378, i32 0, i32 2
  store ptr %375, ptr %379, align 8, !tbaa !41
  %380 = load i64, ptr %24, align 8, !tbaa !36
  %381 = add i64 %380, 1
  store i64 %381, ptr %24, align 8, !tbaa !36
  br label %382

382:                                              ; preds = %337, %301
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #5
  br label %383

383:                                              ; preds = %382
  %384 = load i16, ptr %25, align 2, !tbaa !9
  %385 = add i16 %384, 1
  store i16 %385, ptr %25, align 2, !tbaa !9
  br label %290, !llvm.loop !42

386:                                              ; preds = %300
  %387 = load ptr, ptr %23, align 8, !tbaa !5
  %388 = load i16, ptr %19, align 2, !tbaa !9
  %389 = zext i16 %388 to i64
  call void @qsort(ptr noundef %387, i64 noundef %389, i64 noundef 24, ptr noundef @by_pairSecondGlyph)
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  store i64 0, ptr %27, align 8, !tbaa !36
  br label %390

390:                                              ; preds = %419, %386
  %391 = load i64, ptr %27, align 8, !tbaa !36
  %392 = load i16, ptr %19, align 2, !tbaa !9
  %393 = zext i16 %392 to i64
  %394 = icmp ult i64 %391, %393
  br i1 %394, label %396, label %395

395:                                              ; preds = %390
  store i32 23, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %422

396:                                              ; preds = %390
  %397 = load ptr, ptr %22, align 8, !tbaa !5
  %398 = load ptr, ptr %23, align 8, !tbaa !5
  %399 = load i64, ptr %27, align 8, !tbaa !36
  %400 = getelementptr inbounds %struct.IndividualGposPair, ptr %398, i64 %399
  %401 = getelementptr inbounds %struct.IndividualGposPair, ptr %400, i32 0, i32 0
  %402 = load i16, ptr %401, align 8, !tbaa !38
  %403 = zext i16 %402 to i32
  %404 = load ptr, ptr %23, align 8, !tbaa !5
  %405 = load i64, ptr %27, align 8, !tbaa !36
  %406 = getelementptr inbounds %struct.IndividualGposPair, ptr %404, i64 %405
  %407 = getelementptr inbounds %struct.IndividualGposPair, ptr %406, i32 0, i32 1
  %408 = load ptr, ptr %407, align 8, !tbaa !40
  %409 = load i16, ptr %4, align 2, !tbaa !9
  %410 = call ptr @bk_gpos_value(ptr noundef byval(%struct.otl_PositionValue) align 8 %408, i16 noundef zeroext %409)
  %411 = load ptr, ptr %23, align 8, !tbaa !5
  %412 = load i64, ptr %27, align 8, !tbaa !36
  %413 = getelementptr inbounds %struct.IndividualGposPair, ptr %411, i64 %412
  %414 = getelementptr inbounds %struct.IndividualGposPair, ptr %413, i32 0, i32 2
  %415 = load ptr, ptr %414, align 8, !tbaa !41
  %416 = load i16, ptr %5, align 2, !tbaa !9
  %417 = call ptr @bk_gpos_value(ptr noundef byval(%struct.otl_PositionValue) align 8 %415, i16 noundef zeroext %416)
  %418 = call ptr (ptr, i32, ...) @bk_push(ptr noundef %397, i32 noundef 2, i32 noundef %403, i32 noundef 255, ptr noundef %410, i32 noundef 255, ptr noundef %417, i32 noundef 0)
  br label %419

419:                                              ; preds = %396
  %420 = load i64, ptr %27, align 8, !tbaa !36
  %421 = add i64 %420, 1
  store i64 %421, ptr %27, align 8, !tbaa !36
  br label %390, !llvm.loop !43

422:                                              ; preds = %395
  %423 = load ptr, ptr %23, align 8, !tbaa !5
  call void @free(ptr noundef %423) #5
  store ptr null, ptr %23, align 8, !tbaa !5
  %424 = load ptr, ptr %17, align 8, !tbaa !5
  %425 = load ptr, ptr %22, align 8, !tbaa !5
  %426 = call ptr (ptr, i32, ...) @bk_push(ptr noundef %424, i32 noundef 16, ptr noundef %425, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #5
  br label %427

427:                                              ; preds = %422
  %428 = load i16, ptr %18, align 2, !tbaa !9
  %429 = add i16 %428, 1
  store i16 %429, ptr %18, align 2, !tbaa !9
  br label %220, !llvm.loop !44

430:                                              ; preds = %228
  %431 = load ptr, ptr getelementptr inbounds (%struct.__otfcc_ICoverage, ptr @otl_iCoverage, i32 0, i32 7), align 8, !tbaa !45
  %432 = load ptr, ptr %16, align 8, !tbaa !5
  call void %431(ptr noundef %432)
  store ptr null, ptr %16, align 8, !tbaa !5
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free(ptr noundef %433) #5
  store ptr null, ptr %11, align 8, !tbaa !5
  %434 = load ptr, ptr %17, align 8, !tbaa !5
  store i32 1, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  ret ptr %434
}

; Function Attrs: nounwind uwtable
declare hidden ptr @covFromCD(ptr noundef) #4

declare ptr @bk_new_Block(i32 noundef, ...) #3

declare ptr @bk_newBlockFromBuffer(ptr noundef) #3

declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #3

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

declare ptr @bk_push(ptr noundef, i32 noundef, ...) #3

declare ptr @bk_gpos_value(ptr noundef byval(%struct.otl_PositionValue) align 8, i16 noundef zeroext) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { "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 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 = { 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 = !{!"short", !7, i64 0}
!11 = !{!12, !6, i64 0}
!12 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!13 = !{!14, !10, i64 8}
!14 = !{!"", !10, i64 0, !15, i64 4, !10, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!"int", !7, i64 0}
!16 = !{!12, !6, i64 8}
!17 = !{!12, !6, i64 16}
!18 = !{!12, !6, i64 24}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = !{!14, !10, i64 0}
!23 = !{!14, !6, i64 24}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = !{!27, !6, i64 112}
!27 = !{!"__otfcc_ICoverage", !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}
!28 = !{!27, !6, i64 96}
!29 = !{!30, !10, i64 0}
!30 = !{!"", !10, i64 0, !15, i64 4, !6, i64 8}
!31 = !{!14, !6, i64 16}
!32 = !{!33, !10, i64 4}
!33 = !{!"otfcc_Handle", !15, i64 0, !10, i64 4, !6, i64 8}
!34 = !{!30, !6, i64 8}
!35 = distinct !{!35, !20}
!36 = !{!37, !37, i64 0}
!37 = !{!"long", !7, i64 0}
!38 = !{!39, !10, i64 0}
!39 = !{!"", !10, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!39, !6, i64 8}
!41 = !{!39, !6, i64 16}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}
!45 = !{!27, !6, i64 56}


; 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.__otfcc_ICoverage = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.otl_PositionValue = type { double, double, double, double }
%struct.otfcc_Handle = type { i32, i16, ptr }
%struct.IndividualGposPair = type { i16, ptr, ptr }

@otl_iCoverage = external local_unnamed_addr constant %struct.__otfcc_ICoverage, align 8

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @__caryll_allocate_clean(i64 noundef, i64 noundef) local_unnamed_addr #0

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

declare zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local ptr @otfcc_build_gpos_pair_individual(ptr nocapture noundef readonly %0) local_unnamed_addr #3 {
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = getelementptr inbounds i8, ptr %2, i64 8
  %4 = load i16, ptr %3, align 8, !tbaa !10
  %5 = add i16 %4, 1
  %6 = getelementptr inbounds i8, ptr %0, i64 8
  %7 = load ptr, ptr %6, align 8, !tbaa !14
  %8 = getelementptr inbounds i8, ptr %7, i64 8
  %9 = load i16, ptr %8, align 8, !tbaa !10
  %10 = add i16 %9, 1
  %.not157 = icmp eq i16 %5, 0
  br i1 %.not157, label %._crit_edge130, label %.preheader122.lr.ph

.preheader122.lr.ph:                              ; preds = %1
  %.not158 = icmp eq i16 %10, 0
  %11 = getelementptr inbounds i8, ptr %0, i64 16
  %12 = getelementptr inbounds i8, ptr %0, i64 24
  br i1 %.not158, label %._crit_edge130, label %.preheader122.us.preheader

.preheader122.us.preheader:                       ; preds = %.preheader122.lr.ph
  %wide.trip.count173 = zext i16 %5 to i64
  %wide.trip.count = zext i16 %10 to i64
  br label %.preheader122.us

.preheader122.us:                                 ; preds = %.preheader122.us.preheader, %._crit_edge.us
  %indvars.iv170 = phi i64 [ 0, %.preheader122.us.preheader ], [ %indvars.iv.next171, %._crit_edge.us ]
  %.0105129.us = phi i16 [ 0, %.preheader122.us.preheader ], [ %20, %._crit_edge.us ]
  %.0109128.us = phi i16 [ 0, %.preheader122.us.preheader ], [ %27, %._crit_edge.us ]
  br label %13

13:                                               ; preds = %.preheader122.us, %13
  %indvars.iv = phi i64 [ 0, %.preheader122.us ], [ %indvars.iv.next, %13 ]
  %.1125.us = phi i16 [ %.0105129.us, %.preheader122.us ], [ %20, %13 ]
  %.1110124.us = phi i16 [ %.0109128.us, %.preheader122.us ], [ %27, %13 ]
  %14 = load ptr, ptr %11, align 8, !tbaa !15
  %15 = getelementptr inbounds ptr, ptr %14, i64 %indvars.iv170
  %16 = load ptr, ptr %15, align 8, !tbaa !16
  %17 = getelementptr inbounds %struct.otl_PositionValue, ptr %16, i64 %indvars.iv
  %18 = tail call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %17) #5
  %19 = zext i8 %18 to i16
  %20 = or i16 %.1125.us, %19
  %21 = load ptr, ptr %12, align 8, !tbaa !17
  %22 = getelementptr inbounds ptr, ptr %21, i64 %indvars.iv170
  %23 = load ptr, ptr %22, align 8, !tbaa !16
  %24 = getelementptr inbounds %struct.otl_PositionValue, ptr %23, i64 %indvars.iv
  %25 = tail call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %24) #5
  %26 = zext i8 %25 to i16
  %27 = or i16 %.1110124.us, %26
  %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, label %13, !llvm.loop !18

._crit_edge.us:                                   ; preds = %13
  %indvars.iv.next171 = add nuw nsw i64 %indvars.iv170, 1
  %exitcond174.not = icmp eq i64 %indvars.iv.next171, %wide.trip.count173
  br i1 %exitcond174.not, label %._crit_edge130.loopexit165, label %.preheader122.us, !llvm.loop !20

._crit_edge130.loopexit165:                       ; preds = %._crit_edge.us
  %.pre = load ptr, ptr %0, align 8, !tbaa !5
  br label %._crit_edge130

._crit_edge130:                                   ; preds = %.preheader122.lr.ph, %._crit_edge130.loopexit165, %1
  %28 = phi ptr [ %2, %1 ], [ %.pre, %._crit_edge130.loopexit165 ], [ %2, %.preheader122.lr.ph ]
  %.0109.lcssa = phi i16 [ 0, %1 ], [ %27, %._crit_edge130.loopexit165 ], [ 0, %.preheader122.lr.ph ]
  %.0105.lcssa = phi i16 [ 0, %1 ], [ %20, %._crit_edge130.loopexit165 ], [ 0, %.preheader122.lr.ph ]
  %29 = load i16, ptr %28, align 8, !tbaa !21
  %30 = zext i16 %29 to i64
  %31 = shl nuw nsw i64 %30, 1
  %32 = tail call ptr @__caryll_allocate_clean(i64 noundef %31, i64 noundef 290)
  %33 = load ptr, ptr %0, align 8, !tbaa !5
  %34 = load i16, ptr %33, align 8, !tbaa !21
  %.not159 = icmp eq i16 %34, 0
  br i1 %.not159, label %._crit_edge138, label %.lr.ph137

.lr.ph137:                                        ; preds = %._crit_edge130
  %35 = getelementptr inbounds i8, ptr %0, i64 16
  %36 = getelementptr inbounds i8, ptr %0, i64 24
  %.pre193 = load ptr, ptr %6, align 8, !tbaa !14
  br label %52

._crit_edge138:                                   ; preds = %._crit_edge, %._crit_edge130
  %.lcssa = phi ptr [ %33, %._crit_edge130 ], [ %57, %._crit_edge ]
  %37 = tail call ptr @covFromCD(ptr noundef nonnull %.lcssa)
  %38 = load ptr, ptr getelementptr inbounds (i8, ptr @otl_iCoverage, i64 112), align 8, !tbaa !22
  tail call void %38(ptr noundef %37, i1 noundef zeroext true) #5
  %39 = load ptr, ptr getelementptr inbounds (i8, ptr @otl_iCoverage, i64 96), align 8, !tbaa !24
  %40 = tail call ptr %39(ptr noundef %37) #5
  %41 = tail call ptr @bk_newBlockFromBuffer(ptr noundef %40) #5
  %42 = zext nneg i16 %.0105.lcssa to i32
  %43 = zext nneg i16 %.0109.lcssa to i32
  %44 = load ptr, ptr %0, align 8, !tbaa !5
  %45 = load i16, ptr %44, align 8, !tbaa !21
  %46 = zext i16 %45 to i32
  %47 = tail call ptr (i32, ...) @bk_new_Block(i32 noundef 2, i32 noundef 1, i32 noundef 16, ptr noundef %41, i32 noundef 2, i32 noundef %42, i32 noundef 2, i32 noundef %43, i32 noundef 2, i32 noundef %46, i32 noundef 0) #5
  %48 = load i16, ptr %37, align 8, !tbaa !25
  %.not161 = icmp eq i16 %48, 0
  br i1 %.not161, label %._crit_edge156, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %._crit_edge138
  %49 = getelementptr inbounds i8, ptr %37, i64 8
  %50 = getelementptr inbounds i8, ptr %0, i64 16
  %51 = getelementptr inbounds i8, ptr %0, i64 24
  br label %.preheader

52:                                               ; preds = %.lr.ph137, %._crit_edge
  %53 = phi ptr [ %33, %.lr.ph137 ], [ %57, %._crit_edge ]
  %54 = phi ptr [ %.pre193, %.lr.ph137 ], [ %58, %._crit_edge ]
  %indvars.iv178 = phi i64 [ 0, %.lr.ph137 ], [ %indvars.iv.next179, %._crit_edge ]
  %55 = getelementptr inbounds i16, ptr %32, i64 %indvars.iv178
  store i16 0, ptr %55, align 2, !tbaa !27
  %56 = load i16, ptr %54, align 8, !tbaa !21
  %.not160 = icmp eq i16 %56, 0
  br i1 %.not160, label %._crit_edge, label %.lr.ph

._crit_edge.loopexit:                             ; preds = %88
  %.pre194 = load ptr, ptr %0, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %52
  %57 = phi ptr [ %.pre194, %._crit_edge.loopexit ], [ %53, %52 ]
  %58 = phi ptr [ %89, %._crit_edge.loopexit ], [ %54, %52 ]
  %indvars.iv.next179 = add nuw nsw i64 %indvars.iv178, 1
  %59 = load i16, ptr %57, align 8, !tbaa !21
  %60 = zext i16 %59 to i64
  %61 = icmp ult i64 %indvars.iv.next179, %60
  br i1 %61, label %52, label %._crit_edge138, !llvm.loop !28

.lr.ph:                                           ; preds = %52, %88
  %indvars.iv175 = phi i64 [ %indvars.iv.next176, %88 ], [ 0, %52 ]
  %62 = phi ptr [ %89, %88 ], [ %54, %52 ]
  %63 = load ptr, ptr %0, align 8, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %63, i64 24
  %65 = load ptr, ptr %64, align 8, !tbaa !29
  %66 = getelementptr inbounds i16, ptr %65, i64 %indvars.iv178
  %67 = load i16, ptr %66, align 2, !tbaa !27
  %68 = getelementptr inbounds i8, ptr %62, i64 24
  %69 = load ptr, ptr %68, align 8, !tbaa !29
  %70 = getelementptr inbounds i16, ptr %69, i64 %indvars.iv175
  %71 = load i16, ptr %70, align 2, !tbaa !27
  %72 = load ptr, ptr %35, align 8, !tbaa !15
  %73 = zext i16 %67 to i64
  %74 = getelementptr inbounds ptr, ptr %72, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !16
  %76 = zext i16 %71 to i64
  %77 = getelementptr inbounds %struct.otl_PositionValue, ptr %75, i64 %76
  %78 = tail call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %77) #5
  %79 = load ptr, ptr %36, align 8, !tbaa !17
  %80 = getelementptr inbounds ptr, ptr %79, i64 %73
  %81 = load ptr, ptr %80, align 8, !tbaa !16
  %82 = getelementptr inbounds %struct.otl_PositionValue, ptr %81, i64 %76
  %83 = tail call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %82) #5
  %84 = or i8 %83, %78
  %.not121 = icmp eq i8 %84, 0
  br i1 %.not121, label %88, label %85

85:                                               ; preds = %.lr.ph
  %86 = load i16, ptr %55, align 2, !tbaa !27
  %87 = add i16 %86, 1
  store i16 %87, ptr %55, align 2, !tbaa !27
  br label %88

88:                                               ; preds = %85, %.lr.ph
  %indvars.iv.next176 = add nuw nsw i64 %indvars.iv175, 1
  %89 = load ptr, ptr %6, align 8, !tbaa !14
  %90 = load i16, ptr %89, align 8, !tbaa !21
  %91 = zext i16 %90 to i64
  %92 = icmp ult i64 %indvars.iv.next176, %91
  br i1 %92, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !30

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge154
  %indvars.iv190 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next191, %._crit_edge154 ]
  %93 = load ptr, ptr %0, align 8, !tbaa !5
  %94 = load i16, ptr %93, align 8, !tbaa !21
  %.not162 = icmp eq i16 %94, 0
  br i1 %.not162, label %._crit_edge143, label %.lr.ph142

.lr.ph142:                                        ; preds = %.preheader
  %95 = getelementptr inbounds i8, ptr %93, i64 16
  %96 = load ptr, ptr %95, align 8, !tbaa !31
  %97 = load ptr, ptr %49, align 8, !tbaa !32
  %98 = getelementptr inbounds %struct.otfcc_Handle, ptr %97, i64 %indvars.iv190, i32 1
  %99 = load i16, ptr %98, align 4, !tbaa !33
  %100 = getelementptr inbounds i8, ptr %93, i64 24
  %wide.trip.count184 = zext i16 %94 to i64
  %xtraiter = and i64 %wide.trip.count184, 1
  %101 = icmp eq i16 %94, 1
  br i1 %101, label %._crit_edge143.loopexit.unr-lcssa, label %.lr.ph142.new

.lr.ph142.new:                                    ; preds = %.lr.ph142
  %unroll_iter = and i64 %wide.trip.count184, 65534
  br label %120

._crit_edge156:                                   ; preds = %._crit_edge154, %._crit_edge138
  %102 = load ptr, ptr getelementptr inbounds (i8, ptr @otl_iCoverage, i64 56), align 8, !tbaa !35
  tail call void %102(ptr noundef nonnull %37) #5
  tail call void @free(ptr noundef %32) #5
  ret ptr %47

._crit_edge143.loopexit.unr-lcssa:                ; preds = %140, %.lr.ph142
  %.1115.lcssa.ph = phi i16 [ poison, %.lr.ph142 ], [ %.1115.1, %140 ]
  %.1113.lcssa.ph = phi i16 [ poison, %.lr.ph142 ], [ %.1113.1, %140 ]
  %indvars.iv181.unr = phi i64 [ 0, %.lr.ph142 ], [ %indvars.iv.next182.1, %140 ]
  %.0112140.unr = phi i16 [ 0, %.lr.ph142 ], [ %.1113.1, %140 ]
  %.0114139.unr = phi i16 [ 0, %.lr.ph142 ], [ %.1115.1, %140 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge143, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge143.loopexit.unr-lcssa
  %103 = getelementptr inbounds %struct.otfcc_Handle, ptr %96, i64 %indvars.iv181.unr, i32 1
  %104 = load i16, ptr %103, align 4, !tbaa !33
  %105 = icmp eq i16 %104, %99
  br i1 %105, label %106, label %._crit_edge143

106:                                              ; preds = %.epil.preheader
  %107 = load ptr, ptr %100, align 8, !tbaa !29
  %108 = getelementptr inbounds i16, ptr %107, i64 %indvars.iv181.unr
  %109 = load i16, ptr %108, align 2, !tbaa !27
  %110 = getelementptr inbounds i16, ptr %32, i64 %indvars.iv181.unr
  %111 = load i16, ptr %110, align 2, !tbaa !27
  br label %._crit_edge143

._crit_edge143:                                   ; preds = %._crit_edge143.loopexit.unr-lcssa, %106, %.epil.preheader, %.preheader
  %.0114.lcssa = phi i16 [ 0, %.preheader ], [ %.1115.lcssa.ph, %._crit_edge143.loopexit.unr-lcssa ], [ %111, %106 ], [ %.0114139.unr, %.epil.preheader ]
  %.0112.lcssa = phi i16 [ 0, %.preheader ], [ %.1113.lcssa.ph, %._crit_edge143.loopexit.unr-lcssa ], [ %109, %106 ], [ %.0112140.unr, %.epil.preheader ]
  %112 = zext i16 %.0114.lcssa to i32
  %113 = tail call ptr (i32, ...) @bk_new_Block(i32 noundef 2, i32 noundef %112, i32 noundef 0) #5
  %114 = zext i16 %.0114.lcssa to i64
  %115 = mul nuw nsw i64 %114, 24
  %116 = tail call ptr @__caryll_allocate_clean(i64 noundef %115, i64 noundef 324)
  %117 = load ptr, ptr %6, align 8, !tbaa !14
  %118 = load i16, ptr %117, align 8, !tbaa !21
  %.not163 = icmp eq i16 %118, 0
  br i1 %.not163, label %._crit_edge150, label %.lr.ph149

.lr.ph149:                                        ; preds = %._crit_edge143
  %119 = zext i16 %.0112.lcssa to i64
  br label %141

120:                                              ; preds = %140, %.lr.ph142.new
  %indvars.iv181 = phi i64 [ 0, %.lr.ph142.new ], [ %indvars.iv.next182.1, %140 ]
  %.0112140 = phi i16 [ 0, %.lr.ph142.new ], [ %.1113.1, %140 ]
  %.0114139 = phi i16 [ 0, %.lr.ph142.new ], [ %.1115.1, %140 ]
  %niter = phi i64 [ 0, %.lr.ph142.new ], [ %niter.next.1, %140 ]
  %121 = getelementptr inbounds %struct.otfcc_Handle, ptr %96, i64 %indvars.iv181, i32 1
  %122 = load i16, ptr %121, align 4, !tbaa !33
  %123 = icmp eq i16 %122, %99
  br i1 %123, label %124, label %130

124:                                              ; preds = %120
  %125 = load ptr, ptr %100, align 8, !tbaa !29
  %126 = getelementptr inbounds i16, ptr %125, i64 %indvars.iv181
  %127 = load i16, ptr %126, align 2, !tbaa !27
  %128 = getelementptr inbounds i16, ptr %32, i64 %indvars.iv181
  %129 = load i16, ptr %128, align 2, !tbaa !27
  br label %130

130:                                              ; preds = %120, %124
  %.1115 = phi i16 [ %129, %124 ], [ %.0114139, %120 ]
  %.1113 = phi i16 [ %127, %124 ], [ %.0112140, %120 ]
  %indvars.iv.next182 = or disjoint i64 %indvars.iv181, 1
  %131 = getelementptr inbounds %struct.otfcc_Handle, ptr %96, i64 %indvars.iv.next182, i32 1
  %132 = load i16, ptr %131, align 4, !tbaa !33
  %133 = icmp eq i16 %132, %99
  br i1 %133, label %134, label %140

134:                                              ; preds = %130
  %135 = load ptr, ptr %100, align 8, !tbaa !29
  %136 = getelementptr inbounds i16, ptr %135, i64 %indvars.iv.next182
  %137 = load i16, ptr %136, align 2, !tbaa !27
  %138 = getelementptr inbounds i16, ptr %32, i64 %indvars.iv.next182
  %139 = load i16, ptr %138, align 2, !tbaa !27
  br label %140

140:                                              ; preds = %134, %130
  %.1115.1 = phi i16 [ %139, %134 ], [ %.1115, %130 ]
  %.1113.1 = phi i16 [ %137, %134 ], [ %.1113, %130 ]
  %indvars.iv.next182.1 = add nuw nsw i64 %indvars.iv181, 2
  %niter.next.1 = add nuw i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge143.loopexit.unr-lcssa, label %120, !llvm.loop !36

._crit_edge150:                                   ; preds = %176, %._crit_edge143
  tail call void @qsort(ptr noundef %116, i64 noundef %114, i64 noundef 24, ptr noundef nonnull @by_pairSecondGlyph) #5
  %.not164 = icmp eq i16 %.0114.lcssa, 0
  br i1 %.not164, label %._crit_edge154, label %.lr.ph153

141:                                              ; preds = %.lr.ph149, %176
  %indvars.iv186 = phi i64 [ 0, %.lr.ph149 ], [ %indvars.iv.next187, %176 ]
  %142 = phi ptr [ %117, %.lr.ph149 ], [ %.pre195, %176 ]
  %.0107146 = phi i64 [ 0, %.lr.ph149 ], [ %.1108, %176 ]
  %143 = getelementptr inbounds i8, ptr %142, i64 24
  %144 = load ptr, ptr %143, align 8, !tbaa !29
  %145 = getelementptr inbounds i16, ptr %144, i64 %indvars.iv186
  %146 = load i16, ptr %145, align 2, !tbaa !27
  %147 = load ptr, ptr %50, align 8, !tbaa !15
  %148 = getelementptr inbounds ptr, ptr %147, i64 %119
  %149 = load ptr, ptr %148, align 8, !tbaa !16
  %150 = zext i16 %146 to i64
  %151 = getelementptr inbounds %struct.otl_PositionValue, ptr %149, i64 %150
  %152 = tail call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %151) #5
  %153 = load ptr, ptr %51, align 8, !tbaa !17
  %154 = getelementptr inbounds ptr, ptr %153, i64 %119
  %155 = load ptr, ptr %154, align 8, !tbaa !16
  %156 = getelementptr inbounds %struct.otl_PositionValue, ptr %155, i64 %150
  %157 = tail call zeroext i8 @required_position_format(ptr noundef byval(%struct.otl_PositionValue) align 8 %156) #5
  %158 = or i8 %157, %152
  %.not = icmp eq i8 %158, 0
  %.pre195 = load ptr, ptr %6, align 8, !tbaa !14
  br i1 %.not, label %176, label %159

159:                                              ; preds = %141
  %160 = getelementptr inbounds i8, ptr %.pre195, i64 16
  %161 = load ptr, ptr %160, align 8, !tbaa !31
  %162 = getelementptr inbounds %struct.otfcc_Handle, ptr %161, i64 %indvars.iv186, i32 1
  %163 = load i16, ptr %162, align 4, !tbaa !33
  %164 = getelementptr inbounds %struct.IndividualGposPair, ptr %116, i64 %.0107146
  store i16 %163, ptr %164, align 8, !tbaa !37
  %165 = load ptr, ptr %50, align 8, !tbaa !15
  %166 = getelementptr inbounds ptr, ptr %165, i64 %119
  %167 = load ptr, ptr %166, align 8, !tbaa !16
  %168 = getelementptr inbounds %struct.otl_PositionValue, ptr %167, i64 %150
  %169 = getelementptr inbounds i8, ptr %164, i64 8
  store ptr %168, ptr %169, align 8, !tbaa !39
  %170 = load ptr, ptr %51, align 8, !tbaa !17
  %171 = getelementptr inbounds ptr, ptr %170, i64 %119
  %172 = load ptr, ptr %171, align 8, !tbaa !16
  %173 = getelementptr inbounds %struct.otl_PositionValue, ptr %172, i64 %150
  %174 = getelementptr inbounds i8, ptr %164, i64 16
  store ptr %173, ptr %174, align 8, !tbaa !40
  %175 = add i64 %.0107146, 1
  br label %176

176:                                              ; preds = %159, %141
  %.1108 = phi i64 [ %175, %159 ], [ %.0107146, %141 ]
  %indvars.iv.next187 = add nuw nsw i64 %indvars.iv186, 1
  %177 = load i16, ptr %.pre195, align 8, !tbaa !21
  %178 = zext i16 %177 to i64
  %179 = icmp ult i64 %indvars.iv.next187, %178
  br i1 %179, label %141, label %._crit_edge150, !llvm.loop !41

._crit_edge154:                                   ; preds = %.lr.ph153, %._crit_edge150
  tail call void @free(ptr noundef %116) #5
  %180 = tail call ptr (ptr, i32, ...) @bk_push(ptr noundef %47, i32 noundef 16, ptr noundef %113, i32 noundef 0) #5
  %indvars.iv.next191 = add nuw nsw i64 %indvars.iv190, 1
  %181 = load i16, ptr %37, align 8, !tbaa !25
  %182 = zext i16 %181 to i64
  %183 = icmp ult i64 %indvars.iv.next191, %182
  br i1 %183, label %.preheader, label %._crit_edge156, !llvm.loop !42

.lr.ph153:                                        ; preds = %._crit_edge150, %.lr.ph153
  %.0151 = phi i64 [ %194, %.lr.ph153 ], [ 0, %._crit_edge150 ]
  %184 = getelementptr inbounds %struct.IndividualGposPair, ptr %116, i64 %.0151
  %185 = load i16, ptr %184, align 8, !tbaa !37
  %186 = zext i16 %185 to i32
  %187 = getelementptr inbounds i8, ptr %184, i64 8
  %188 = load ptr, ptr %187, align 8, !tbaa !39
  %189 = tail call ptr @bk_gpos_value(ptr noundef byval(%struct.otl_PositionValue) align 8 %188, i16 noundef zeroext %.0105.lcssa) #5
  %190 = getelementptr inbounds i8, ptr %184, i64 16
  %191 = load ptr, ptr %190, align 8, !tbaa !40
  %192 = tail call ptr @bk_gpos_value(ptr noundef byval(%struct.otl_PositionValue) align 8 %191, i16 noundef zeroext %.0109.lcssa) #5
  %193 = tail call ptr (ptr, i32, ...) @bk_push(ptr noundef %113, i32 noundef 2, i32 noundef %186, i32 noundef 255, ptr noundef %189, i32 noundef 255, ptr noundef %192, i32 noundef 0) #5
  %194 = add nuw nsw i64 %.0151, 1
  %exitcond189.not = icmp eq i64 %194, %114
  br i1 %exitcond189.not, label %._crit_edge154, label %.lr.ph153, !llvm.loop !43
}

; Function Attrs: nounwind uwtable
declare hidden ptr @covFromCD(ptr noundef) local_unnamed_addr #3

declare ptr @bk_new_Block(i32 noundef, ...) local_unnamed_addr #2

declare ptr @bk_newBlockFromBuffer(ptr noundef) local_unnamed_addr #2

; Function Attrs: nofree
declare void @qsort(ptr noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #4

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

declare ptr @bk_push(ptr noundef, i32 noundef, ...) local_unnamed_addr #2

declare ptr @bk_gpos_value(ptr noundef byval(%struct.otl_PositionValue) align 8, i16 noundef zeroext) local_unnamed_addr #2

attributes #0 = { 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 #1 = { 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 #2 = { "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 = { nofree "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 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !12, i64 8}
!11 = !{!"", !12, i64 0, !13, i64 4, !12, i64 8, !7, i64 16, !7, i64 24}
!12 = !{!"short", !8, i64 0}
!13 = !{!"int", !8, i64 0}
!14 = !{!6, !7, i64 8}
!15 = !{!6, !7, i64 16}
!16 = !{!7, !7, i64 0}
!17 = !{!6, !7, i64 24}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = !{!11, !12, i64 0}
!22 = !{!23, !7, i64 112}
!23 = !{!"__otfcc_ICoverage", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120}
!24 = !{!23, !7, i64 96}
!25 = !{!26, !12, i64 0}
!26 = !{!"", !12, i64 0, !13, i64 4, !7, i64 8}
!27 = !{!12, !12, i64 0}
!28 = distinct !{!28, !19}
!29 = !{!11, !7, i64 24}
!30 = distinct !{!30, !19}
!31 = !{!11, !7, i64 16}
!32 = !{!26, !7, i64 8}
!33 = !{!34, !12, i64 4}
!34 = !{!"otfcc_Handle", !13, i64 0, !12, i64 4, !7, i64 8}
!35 = !{!23, !7, i64 56}
!36 = distinct !{!36, !19}
!37 = !{!38, !12, i64 0}
!38 = !{!"", !12, i64 0, !7, i64 8, !7, i64 16}
!39 = !{!38, !7, i64 8}
!40 = !{!38, !7, i64 16}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}


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