; LLVM IR from caryll/otfcc :: src (otfccbuild)

; 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.option = type { ptr, i32, ptr, i32 }
%struct.__caryll_elementinterface_otfcc_Font = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.timespec = type { i64, i64 }
%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 }
%struct.otfcc_IFontBuilder = type { ptr, ptr }
%struct.otfcc_IFontSerializer = type { ptr, ptr }
%struct.caryll_Buffer = type { i64, i64, i64, ptr }

@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [6 x i8], align 1
@__const.main.longopts = external hidden unnamed_addr constant [25 x %struct.option], align 16
@.str.29 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [22 x i8], align 1
@optarg = external global ptr, align 8
@optind = external global i32, align 4
@.str.31 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [12 x i8], align 1
@otfcc_iFont = external constant %struct.__caryll_elementinterface_otfcc_Font, align 8
@.str.40 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [34 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @printInfo() #0

; Function Attrs: nounwind uwtable
declare dso_local void @printHelp() #0

; Function Attrs: nounwind uwtable
declare dso_local void @readEntireFile(ptr noundef, ptr noundef, ptr noundef) #0

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

declare noalias ptr @fopen(ptr noundef, ptr noundef) #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #3

declare i32 @fclose(ptr noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local void @readEntireStdin(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %struct.timespec, align 8
  %7 = alloca i8, align 1
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca [25 x %struct.option], align 16
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i8, align 1
  %31 = alloca ptr, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #8
  call void @time_now(ptr noundef %6)
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #8
  store i8 0, ptr %7, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #8
  store i8 0, ptr %8, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  store ptr null, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  store i32 0, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %32 = call ptr (...) @otfcc_newOptions()
  store ptr %32, ptr %13, align 8, !tbaa !9
  %33 = call ptr (...) @otfcc_newStdErrTarget()
  %34 = call ptr @otfcc_newLogger(ptr noundef %33)
  %35 = load ptr, ptr %13, align 8, !tbaa !9
  %36 = getelementptr inbounds %struct.otfcc_Options, ptr %35, i32 0, i32 24
  store ptr %34, ptr %36, align 8, !tbaa !13
  %37 = load ptr, ptr %13, align 8, !tbaa !9
  %38 = getelementptr inbounds %struct.otfcc_Options, ptr %37, i32 0, i32 24
  %39 = load ptr, ptr %38, align 8, !tbaa !13
  %40 = getelementptr inbounds %struct.otfcc_ILogger, ptr %39, i32 0, i32 1
  %41 = load ptr, ptr %40, align 8, !tbaa !15
  %42 = load ptr, ptr %13, align 8, !tbaa !9
  %43 = getelementptr inbounds %struct.otfcc_Options, ptr %42, i32 0, i32 24
  %44 = load ptr, ptr %43, align 8, !tbaa !13
  call void %41(ptr noundef %44, ptr noundef @.str.4)
  %45 = load ptr, ptr %13, align 8, !tbaa !9
  call void @otfcc_Options_optimizeTo(ptr noundef %45, i8 noundef zeroext 1)
  call void @llvm.lifetime.start.p0(i64 800, ptr %14) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %14, ptr align 16 @__const.main.longopts, i64 800, i1 false)
  br label %46

46:                                               ; preds = %315, %2
  %47 = load i32, ptr %4, align 4, !tbaa !5
  %48 = load ptr, ptr %5, align 8, !tbaa !9
  %49 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 0
  %50 = call i32 @getopt_long(i32 noundef %47, ptr noundef %48, ptr noundef @.str.29, ptr noundef %49, ptr noundef %11)
  store i32 %50, ptr %12, align 4, !tbaa !5
  %51 = icmp ne i32 %50, -1
  br i1 %51, label %52, label %316

52:                                               ; preds = %46
  %53 = load i32, ptr %12, align 4, !tbaa !5
  switch i32 %53, label %315 [
    i32 0, label %54
    i32 118, label %293
    i32 104, label %294
    i32 107, label %295
    i32 105, label %298
    i32 111, label %301
    i32 115, label %304
    i32 113, label %307
    i32 79, label %310
  ]

54:                                               ; preds = %52
  %55 = load i32, ptr %11, align 4, !tbaa !5
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %56
  %58 = getelementptr inbounds %struct.option, ptr %57, i32 0, i32 2
  %59 = load ptr, ptr %58, align 16, !tbaa !17
  %60 = icmp ne ptr %59, null
  br i1 %60, label %61, label %62

61:                                               ; preds = %54
  br label %315

62:                                               ; preds = %54
  %63 = load i32, ptr %11, align 4, !tbaa !5
  %64 = sext i32 %63 to i64
  %65 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %64
  %66 = getelementptr inbounds %struct.option, ptr %65, i32 0, i32 0
  %67 = load ptr, ptr %66, align 16, !tbaa !19
  %68 = call i32 @strcmp(ptr noundef %67, ptr noundef @.str.7) #9
  %69 = icmp eq i32 %68, 0
  br i1 %69, label %70, label %71

70:                                               ; preds = %62
  br label %291

71:                                               ; preds = %62
  %72 = load i32, ptr %11, align 4, !tbaa !5
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %73
  %75 = getelementptr inbounds %struct.option, ptr %74, i32 0, i32 0
  %76 = load ptr, ptr %75, align 16, !tbaa !19
  %77 = call i32 @strcmp(ptr noundef %76, ptr noundef @.str.11) #9
  %78 = icmp eq i32 %77, 0
  br i1 %78, label %79, label %82

79:                                               ; preds = %71
  %80 = load ptr, ptr %13, align 8, !tbaa !9
  %81 = getelementptr inbounds %struct.otfcc_Options, ptr %80, i32 0, i32 2
  store i8 1, ptr %81, align 2, !tbaa !20
  br label %290

82:                                               ; preds = %71
  %83 = load i32, ptr %11, align 4, !tbaa !5
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %84
  %86 = getelementptr inbounds %struct.option, ptr %85, i32 0, i32 0
  %87 = load ptr, ptr %86, align 16, !tbaa !19
  %88 = call i32 @strcmp(ptr noundef %87, ptr noundef @.str.12) #9
  %89 = icmp eq i32 %88, 0
  br i1 %89, label %90, label %93

90:                                               ; preds = %82
  %91 = load ptr, ptr %13, align 8, !tbaa !9
  %92 = getelementptr inbounds %struct.otfcc_Options, ptr %91, i32 0, i32 5
  store i8 1, ptr %92, align 1, !tbaa !21
  br label %289

93:                                               ; preds = %82
  %94 = load i32, ptr %11, align 4, !tbaa !5
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %95
  %97 = getelementptr inbounds %struct.option, ptr %96, i32 0, i32 0
  %98 = load ptr, ptr %97, align 16, !tbaa !19
  %99 = call i32 @strcmp(ptr noundef %98, ptr noundef @.str.13) #9
  %100 = icmp eq i32 %99, 0
  br i1 %100, label %101, label %104

101:                                              ; preds = %93
  %102 = load ptr, ptr %13, align 8, !tbaa !9
  %103 = getelementptr inbounds %struct.otfcc_Options, ptr %102, i32 0, i32 6
  store i8 1, ptr %103, align 2, !tbaa !22
  br label %288

104:                                              ; preds = %93
  %105 = load i32, ptr %11, align 4, !tbaa !5
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %106
  %108 = getelementptr inbounds %struct.option, ptr %107, i32 0, i32 0
  %109 = load ptr, ptr %108, align 16, !tbaa !19
  %110 = call i32 @strcmp(ptr noundef %109, ptr noundef @.str.14) #9
  %111 = icmp eq i32 %110, 0
  br i1 %111, label %112, label %115

112:                                              ; preds = %104
  %113 = load ptr, ptr %13, align 8, !tbaa !9
  %114 = getelementptr inbounds %struct.otfcc_Options, ptr %113, i32 0, i32 9
  store i8 1, ptr %114, align 1, !tbaa !23
  br label %287

115:                                              ; preds = %104
  %116 = load i32, ptr %11, align 4, !tbaa !5
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %117
  %119 = getelementptr inbounds %struct.option, ptr %118, i32 0, i32 0
  %120 = load ptr, ptr %119, align 16, !tbaa !19
  %121 = call i32 @strcmp(ptr noundef %120, ptr noundef @.str.16) #9
  %122 = icmp eq i32 %121, 0
  br i1 %122, label %123, label %126

123:                                              ; preds = %115
  %124 = load ptr, ptr %13, align 8, !tbaa !9
  %125 = getelementptr inbounds %struct.otfcc_Options, ptr %124, i32 0, i32 15
  store i8 1, ptr %125, align 1, !tbaa !24
  br label %286

126:                                              ; preds = %115
  %127 = load i32, ptr %11, align 4, !tbaa !5
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %128
  %130 = getelementptr inbounds %struct.option, ptr %129, i32 0, i32 0
  %131 = load ptr, ptr %130, align 16, !tbaa !19
  %132 = call i32 @strcmp(ptr noundef %131, ptr noundef @.str.15) #9
  %133 = icmp eq i32 %132, 0
  br i1 %133, label %134, label %137

134:                                              ; preds = %126
  %135 = load ptr, ptr %13, align 8, !tbaa !9
  %136 = getelementptr inbounds %struct.otfcc_Options, ptr %135, i32 0, i32 14
  store i8 1, ptr %136, align 2, !tbaa !25
  br label %285

137:                                              ; preds = %126
  %138 = load i32, ptr %11, align 4, !tbaa !5
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %139
  %141 = getelementptr inbounds %struct.option, ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %141, align 16, !tbaa !19
  %143 = call i32 @strcmp(ptr noundef %142, ptr noundef @.str.18) #9
  %144 = icmp eq i32 %143, 0
  br i1 %144, label %145, label %148

145:                                              ; preds = %137
  %146 = load ptr, ptr %13, align 8, !tbaa !9
  %147 = getelementptr inbounds %struct.otfcc_Options, ptr %146, i32 0, i32 15
  store i8 0, ptr %147, align 1, !tbaa !24
  br label %284

148:                                              ; preds = %137
  %149 = load i32, ptr %11, align 4, !tbaa !5
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %150
  %152 = getelementptr inbounds %struct.option, ptr %151, i32 0, i32 0
  %153 = load ptr, ptr %152, align 16, !tbaa !19
  %154 = call i32 @strcmp(ptr noundef %153, ptr noundef @.str.17) #9
  %155 = icmp eq i32 %154, 0
  br i1 %155, label %156, label %159

156:                                              ; preds = %148
  %157 = load ptr, ptr %13, align 8, !tbaa !9
  %158 = getelementptr inbounds %struct.otfcc_Options, ptr %157, i32 0, i32 14
  store i8 0, ptr %158, align 2, !tbaa !25
  br label %283

159:                                              ; preds = %148
  %160 = load i32, ptr %11, align 4, !tbaa !5
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %161
  %163 = getelementptr inbounds %struct.option, ptr %162, i32 0, i32 0
  %164 = load ptr, ptr %163, align 16, !tbaa !19
  %165 = call i32 @strcmp(ptr noundef %164, ptr noundef @.str.8) #9
  %166 = icmp eq i32 %165, 0
  br i1 %166, label %167, label %170

167:                                              ; preds = %159
  %168 = load ptr, ptr %13, align 8, !tbaa !9
  %169 = getelementptr inbounds %struct.otfcc_Options, ptr %168, i32 0, i32 1
  store i8 1, ptr %169, align 1, !tbaa !26
  br label %282

170:                                              ; preds = %159
  %171 = load i32, ptr %11, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %172
  %174 = getelementptr inbounds %struct.option, ptr %173, i32 0, i32 0
  %175 = load ptr, ptr %174, align 16, !tbaa !19
  %176 = call i32 @strcmp(ptr noundef %175, ptr noundef @.str.9) #9
  %177 = icmp eq i32 %176, 0
  br i1 %177, label %178, label %181

178:                                              ; preds = %170
  %179 = load ptr, ptr %13, align 8, !tbaa !9
  %180 = getelementptr inbounds %struct.otfcc_Options, ptr %179, i32 0, i32 1
  store i8 0, ptr %180, align 1, !tbaa !26
  br label %281

181:                                              ; preds = %170
  %182 = load i32, ptr %11, align 4, !tbaa !5
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %183
  %185 = getelementptr inbounds %struct.option, ptr %184, i32 0, i32 0
  %186 = load ptr, ptr %185, align 16, !tbaa !19
  %187 = call i32 @strcmp(ptr noundef %186, ptr noundef @.str.30) #9
  %188 = icmp eq i32 %187, 0
  br i1 %188, label %189, label %192

189:                                              ; preds = %181
  %190 = load ptr, ptr %13, align 8, !tbaa !9
  %191 = getelementptr inbounds %struct.otfcc_Options, ptr %190, i32 0, i32 1
  store i8 0, ptr %191, align 1, !tbaa !26
  br label %280

192:                                              ; preds = %181
  %193 = load i32, ptr %11, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %194
  %196 = getelementptr inbounds %struct.option, ptr %195, i32 0, i32 0
  %197 = load ptr, ptr %196, align 16, !tbaa !19
  %198 = call i32 @strcmp(ptr noundef %197, ptr noundef @.str.19) #9
  %199 = icmp eq i32 %198, 0
  br i1 %199, label %200, label %203

200:                                              ; preds = %192
  %201 = load ptr, ptr %13, align 8, !tbaa !9
  %202 = getelementptr inbounds %struct.otfcc_Options, ptr %201, i32 0, i32 7
  store i8 1, ptr %202, align 1, !tbaa !27
  br label %279

203:                                              ; preds = %192
  %204 = load i32, ptr %11, align 4, !tbaa !5
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %205
  %207 = getelementptr inbounds %struct.option, ptr %206, i32 0, i32 0
  %208 = load ptr, ptr %207, align 16, !tbaa !19
  %209 = call i32 @strcmp(ptr noundef %208, ptr noundef @.str.20) #9
  %210 = icmp eq i32 %209, 0
  br i1 %210, label %211, label %214

211:                                              ; preds = %203
  %212 = load ptr, ptr %13, align 8, !tbaa !9
  %213 = getelementptr inbounds %struct.otfcc_Options, ptr %212, i32 0, i32 16
  store i8 1, ptr %213, align 8, !tbaa !28
  br label %278

214:                                              ; preds = %203
  %215 = load i32, ptr %11, align 4, !tbaa !5
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %216
  %218 = getelementptr inbounds %struct.option, ptr %217, i32 0, i32 0
  %219 = load ptr, ptr %218, align 16, !tbaa !19
  %220 = call i32 @strcmp(ptr noundef %219, ptr noundef @.str.21) #9
  %221 = icmp eq i32 %220, 0
  br i1 %221, label %222, label %225

222:                                              ; preds = %214
  %223 = load ptr, ptr %13, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.otfcc_Options, ptr %223, i32 0, i32 18
  store i8 1, ptr %224, align 2, !tbaa !29
  br label %277

225:                                              ; preds = %214
  %226 = load i32, ptr %11, align 4, !tbaa !5
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %227
  %229 = getelementptr inbounds %struct.option, ptr %228, i32 0, i32 0
  %230 = load ptr, ptr %229, align 16, !tbaa !19
  %231 = call i32 @strcmp(ptr noundef %230, ptr noundef @.str.22) #9
  %232 = icmp eq i32 %231, 0
  br i1 %232, label %233, label %236

233:                                              ; preds = %225
  %234 = load ptr, ptr %13, align 8, !tbaa !9
  %235 = getelementptr inbounds %struct.otfcc_Options, ptr %234, i32 0, i32 19
  store i8 1, ptr %235, align 1, !tbaa !30
  br label %276

236:                                              ; preds = %225
  %237 = load i32, ptr %11, align 4, !tbaa !5
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %238
  %240 = getelementptr inbounds %struct.option, ptr %239, i32 0, i32 0
  %241 = load ptr, ptr %240, align 16, !tbaa !19
  %242 = call i32 @strcmp(ptr noundef %241, ptr noundef @.str.24) #9
  %243 = icmp eq i32 %242, 0
  br i1 %243, label %244, label %251

244:                                              ; preds = %236
  %245 = load ptr, ptr %13, align 8, !tbaa !9
  %246 = getelementptr inbounds %struct.otfcc_Options, ptr %245, i32 0, i32 1
  store i8 1, ptr %246, align 1, !tbaa !26
  %247 = load ptr, ptr %13, align 8, !tbaa !9
  %248 = getelementptr inbounds %struct.otfcc_Options, ptr %247, i32 0, i32 7
  store i8 1, ptr %248, align 1, !tbaa !27
  %249 = load ptr, ptr %13, align 8, !tbaa !9
  %250 = getelementptr inbounds %struct.otfcc_Options, ptr %249, i32 0, i32 8
  store i8 1, ptr %250, align 8, !tbaa !31
  br label %275

251:                                              ; preds = %236
  %252 = load i32, ptr %11, align 4, !tbaa !5
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %253
  %255 = getelementptr inbounds %struct.option, ptr %254, i32 0, i32 0
  %256 = load ptr, ptr %255, align 16, !tbaa !19
  %257 = call i32 @strcmp(ptr noundef %256, ptr noundef @.str.25) #9
  %258 = icmp eq i32 %257, 0
  br i1 %258, label %259, label %262

259:                                              ; preds = %251
  %260 = load ptr, ptr %13, align 8, !tbaa !9
  %261 = getelementptr inbounds %struct.otfcc_Options, ptr %260, i32 0, i32 11
  store i8 1, ptr %261, align 1, !tbaa !32
  br label %274

262:                                              ; preds = %251
  %263 = load i32, ptr %11, align 4, !tbaa !5
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds [25 x %struct.option], ptr %14, i64 0, i64 %264
  %266 = getelementptr inbounds %struct.option, ptr %265, i32 0, i32 0
  %267 = load ptr, ptr %266, align 16, !tbaa !19
  %268 = call i32 @strcmp(ptr noundef %267, ptr noundef @.str.26) #9
  %269 = icmp eq i32 %268, 0
  br i1 %269, label %270, label %273

270:                                              ; preds = %262
  %271 = load ptr, ptr %13, align 8, !tbaa !9
  %272 = getelementptr inbounds %struct.otfcc_Options, ptr %271, i32 0, i32 12
  store i8 1, ptr %272, align 4, !tbaa !33
  br label %273

273:                                              ; preds = %270, %262
  br label %274

274:                                              ; preds = %273, %259
  br label %275

275:                                              ; preds = %274, %244
  br label %276

276:                                              ; preds = %275, %233
  br label %277

277:                                              ; preds = %276, %222
  br label %278

278:                                              ; preds = %277, %211
  br label %279

279:                                              ; preds = %278, %200
  br label %280

280:                                              ; preds = %279, %189
  br label %281

281:                                              ; preds = %280, %178
  br label %282

282:                                              ; preds = %281, %167
  br label %283

283:                                              ; preds = %282, %156
  br label %284

284:                                              ; preds = %283, %145
  br label %285

285:                                              ; preds = %284, %134
  br label %286

286:                                              ; preds = %285, %123
  br label %287

287:                                              ; preds = %286, %112
  br label %288

288:                                              ; preds = %287, %101
  br label %289

289:                                              ; preds = %288, %90
  br label %290

290:                                              ; preds = %289, %79
  br label %291

291:                                              ; preds = %290, %70
  br label %292

292:                                              ; preds = %291
  br label %315

293:                                              ; preds = %52
  store i8 1, ptr %8, align 1, !tbaa !11
  br label %315

294:                                              ; preds = %52
  store i8 1, ptr %7, align 1, !tbaa !11
  br label %315

295:                                              ; preds = %52
  %296 = load ptr, ptr %13, align 8, !tbaa !9
  %297 = getelementptr inbounds %struct.otfcc_Options, ptr %296, i32 0, i32 1
  store i8 0, ptr %297, align 1, !tbaa !26
  br label %315

298:                                              ; preds = %52
  %299 = load ptr, ptr %13, align 8, !tbaa !9
  %300 = getelementptr inbounds %struct.otfcc_Options, ptr %299, i32 0, i32 1
  store i8 1, ptr %300, align 1, !tbaa !26
  br label %315

301:                                              ; preds = %52
  %302 = load ptr, ptr @optarg, align 8, !tbaa !9
  %303 = call ptr @sdsnew(ptr noundef %302)
  store ptr %303, ptr %9, align 8, !tbaa !9
  br label %315

304:                                              ; preds = %52
  %305 = load ptr, ptr %13, align 8, !tbaa !9
  %306 = getelementptr inbounds %struct.otfcc_Options, ptr %305, i32 0, i32 8
  store i8 1, ptr %306, align 8, !tbaa !31
  br label %315

307:                                              ; preds = %52
  %308 = load ptr, ptr %13, align 8, !tbaa !9
  %309 = getelementptr inbounds %struct.otfcc_Options, ptr %308, i32 0, i32 12
  store i8 1, ptr %309, align 4, !tbaa !33
  br label %315

310:                                              ; preds = %52
  %311 = load ptr, ptr %13, align 8, !tbaa !9
  %312 = load ptr, ptr @optarg, align 8, !tbaa !9
  %313 = call i32 @atoi(ptr noundef %312) #9
  %314 = trunc i32 %313 to i8
  call void @otfcc_Options_optimizeTo(ptr noundef %311, i8 noundef zeroext %314)
  br label %315

315:                                              ; preds = %310, %307, %304, %301, %298, %295, %294, %293, %292, %61, %52
  br label %46, !llvm.loop !34

316:                                              ; preds = %46
  %317 = load ptr, ptr %13, align 8, !tbaa !9
  %318 = getelementptr inbounds %struct.otfcc_Options, ptr %317, i32 0, i32 24
  %319 = load ptr, ptr %318, align 8, !tbaa !13
  %320 = getelementptr inbounds %struct.otfcc_ILogger, ptr %319, i32 0, i32 10
  %321 = load ptr, ptr %320, align 8, !tbaa !36
  %322 = load ptr, ptr %13, align 8, !tbaa !9
  %323 = getelementptr inbounds %struct.otfcc_Options, ptr %322, i32 0, i32 24
  %324 = load ptr, ptr %323, align 8, !tbaa !13
  %325 = load ptr, ptr %13, align 8, !tbaa !9
  %326 = getelementptr inbounds %struct.otfcc_Options, ptr %325, i32 0, i32 12
  %327 = load i8, ptr %326, align 4, !tbaa !33, !range !37, !noundef !38
  %328 = trunc i8 %327 to i1
  br i1 %328, label %329, label %330

329:                                              ; preds = %316
  br label %337

330:                                              ; preds = %316
  %331 = load ptr, ptr %13, align 8, !tbaa !9
  %332 = getelementptr inbounds %struct.otfcc_Options, ptr %331, i32 0, i32 11
  %333 = load i8, ptr %332, align 1, !tbaa !32, !range !37, !noundef !38
  %334 = trunc i8 %333 to i1
  %335 = zext i1 %334 to i64
  %336 = select i1 %334, i32 255, i32 1
  br label %337

337:                                              ; preds = %330, %329
  %338 = phi i32 [ 0, %329 ], [ %336, %330 ]
  %339 = trunc i32 %338 to i8
  call void %321(ptr noundef %324, i8 noundef zeroext %339)
  %340 = load i8, ptr %7, align 1, !tbaa !11, !range !37, !noundef !38
  %341 = trunc i8 %340 to i1
  br i1 %341, label %342, label %343

342:                                              ; preds = %337
  call void @printInfo()
  call void @printHelp()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %15, align 4
  br label %718

343:                                              ; preds = %337
  %344 = load i8, ptr %8, align 1, !tbaa !11, !range !37, !noundef !38
  %345 = trunc i8 %344 to i1
  br i1 %345, label %346, label %347

346:                                              ; preds = %343
  call void @printInfo()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %15, align 4
  br label %718

347:                                              ; preds = %343
  %348 = load i32, ptr @optind, align 4, !tbaa !5
  %349 = load i32, ptr %4, align 4, !tbaa !5
  %350 = icmp sge i32 %348, %349
  br i1 %350, label %351, label %352

351:                                              ; preds = %347
  store ptr null, ptr %10, align 8, !tbaa !9
  br label %359

352:                                              ; preds = %347
  %353 = load ptr, ptr %5, align 8, !tbaa !9
  %354 = load i32, ptr @optind, align 4, !tbaa !5
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds ptr, ptr %353, i64 %355
  %357 = load ptr, ptr %356, align 8, !tbaa !9
  %358 = call ptr @sdsnew(ptr noundef %357)
  store ptr %358, ptr %10, align 8, !tbaa !9
  br label %359

359:                                              ; preds = %352, %351
  %360 = load ptr, ptr %9, align 8, !tbaa !9
  %361 = icmp ne ptr %360, null
  br i1 %361, label %373, label %362

362:                                              ; preds = %359
  %363 = load ptr, ptr %13, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct.otfcc_Options, ptr %363, i32 0, i32 24
  %365 = load ptr, ptr %364, align 8, !tbaa !13
  %366 = getelementptr inbounds %struct.otfcc_ILogger, ptr %365, i32 0, i32 6
  %367 = load ptr, ptr %366, align 8, !tbaa !39
  %368 = load ptr, ptr %13, align 8, !tbaa !9
  %369 = getelementptr inbounds %struct.otfcc_Options, ptr %368, i32 0, i32 24
  %370 = load ptr, ptr %369, align 8, !tbaa !13
  %371 = call ptr @sdsempty()
  %372 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %371, ptr noundef @.str.31)
  call void %367(ptr noundef %370, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %372)
  call void @printHelp()
  call void @exit(i32 noundef 1) #10
  unreachable

373:                                              ; preds = %359
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #8
  %374 = load ptr, ptr %13, align 8, !tbaa !9
  %375 = getelementptr inbounds %struct.otfcc_Options, ptr %374, i32 0, i32 24
  %376 = load ptr, ptr %375, align 8, !tbaa !13
  %377 = getelementptr inbounds %struct.otfcc_ILogger, ptr %376, i32 0, i32 4
  %378 = load ptr, ptr %377, align 8, !tbaa !40
  %379 = load ptr, ptr %13, align 8, !tbaa !9
  %380 = getelementptr inbounds %struct.otfcc_Options, ptr %379, i32 0, i32 24
  %381 = load ptr, ptr %380, align 8, !tbaa !13
  %382 = call ptr @sdsempty()
  %383 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %382, ptr noundef @.str.32)
  call void %378(ptr noundef %381, ptr noundef %383)
  store i8 1, ptr %18, align 1, !tbaa !11
  br label %384

384:                                              ; preds = %456, %373
  %385 = load i8, ptr %18, align 1, !tbaa !11, !range !37, !noundef !38
  %386 = trunc i8 %385 to i1
  br i1 %386, label %388, label %387

387:                                              ; preds = %384
  store i32 5, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  br label %465

388:                                              ; preds = %384
  %389 = load ptr, ptr %10, align 8, !tbaa !9
  %390 = icmp ne ptr %389, null
  br i1 %390, label %391, label %420

391:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #8
  %392 = load ptr, ptr %13, align 8, !tbaa !9
  %393 = getelementptr inbounds %struct.otfcc_Options, ptr %392, i32 0, i32 24
  %394 = load ptr, ptr %393, align 8, !tbaa !13
  %395 = getelementptr inbounds %struct.otfcc_ILogger, ptr %394, i32 0, i32 4
  %396 = load ptr, ptr %395, align 8, !tbaa !40
  %397 = load ptr, ptr %13, align 8, !tbaa !9
  %398 = getelementptr inbounds %struct.otfcc_Options, ptr %397, i32 0, i32 24
  %399 = load ptr, ptr %398, align 8, !tbaa !13
  %400 = call ptr @sdsempty()
  %401 = load ptr, ptr %10, align 8, !tbaa !9
  %402 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %400, ptr noundef @.str.33, ptr noundef %401)
  call void %396(ptr noundef %399, ptr noundef %402)
  store i8 1, ptr %19, align 1, !tbaa !11
  br label %403

403:                                              ; preds = %410, %391
  %404 = load i8, ptr %19, align 1, !tbaa !11, !range !37, !noundef !38
  %405 = trunc i8 %404 to i1
  br i1 %405, label %407, label %406

406:                                              ; preds = %403
  store i32 8, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  br label %419

407:                                              ; preds = %403
  %408 = load ptr, ptr %10, align 8, !tbaa !9
  call void @readEntireFile(ptr noundef %408, ptr noundef %16, ptr noundef %17)
  %409 = load ptr, ptr %10, align 8, !tbaa !9
  call void @sdsfree(ptr noundef %409)
  br label %410

410:                                              ; preds = %407
  store i8 0, ptr %19, align 1, !tbaa !11
  %411 = load ptr, ptr %13, align 8, !tbaa !9
  %412 = getelementptr inbounds %struct.otfcc_Options, ptr %411, i32 0, i32 24
  %413 = load ptr, ptr %412, align 8, !tbaa !13
  %414 = getelementptr inbounds %struct.otfcc_ILogger, ptr %413, i32 0, i32 8
  %415 = load ptr, ptr %414, align 8, !tbaa !41
  %416 = load ptr, ptr %13, align 8, !tbaa !9
  %417 = getelementptr inbounds %struct.otfcc_Options, ptr %416, i32 0, i32 24
  %418 = load ptr, ptr %417, align 8, !tbaa !13
  call void %415(ptr noundef %418)
  br label %403, !llvm.loop !42

419:                                              ; preds = %406
  br label %446

420:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #8
  %421 = load ptr, ptr %13, align 8, !tbaa !9
  %422 = getelementptr inbounds %struct.otfcc_Options, ptr %421, i32 0, i32 24
  %423 = load ptr, ptr %422, align 8, !tbaa !13
  %424 = getelementptr inbounds %struct.otfcc_ILogger, ptr %423, i32 0, i32 4
  %425 = load ptr, ptr %424, align 8, !tbaa !40
  %426 = load ptr, ptr %13, align 8, !tbaa !9
  %427 = getelementptr inbounds %struct.otfcc_Options, ptr %426, i32 0, i32 24
  %428 = load ptr, ptr %427, align 8, !tbaa !13
  %429 = call ptr @sdsempty()
  %430 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %429, ptr noundef @.str.34)
  call void %425(ptr noundef %428, ptr noundef %430)
  store i8 1, ptr %20, align 1, !tbaa !11
  br label %431

431:                                              ; preds = %436, %420
  %432 = load i8, ptr %20, align 1, !tbaa !11, !range !37, !noundef !38
  %433 = trunc i8 %432 to i1
  br i1 %433, label %435, label %434

434:                                              ; preds = %431
  store i32 11, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #8
  br label %445

435:                                              ; preds = %431
  call void @readEntireStdin(ptr noundef %16, ptr noundef %17)
  br label %436

436:                                              ; preds = %435
  store i8 0, ptr %20, align 1, !tbaa !11
  %437 = load ptr, ptr %13, align 8, !tbaa !9
  %438 = getelementptr inbounds %struct.otfcc_Options, ptr %437, i32 0, i32 24
  %439 = load ptr, ptr %438, align 8, !tbaa !13
  %440 = getelementptr inbounds %struct.otfcc_ILogger, ptr %439, i32 0, i32 8
  %441 = load ptr, ptr %440, align 8, !tbaa !41
  %442 = load ptr, ptr %13, align 8, !tbaa !9
  %443 = getelementptr inbounds %struct.otfcc_Options, ptr %442, i32 0, i32 24
  %444 = load ptr, ptr %443, align 8, !tbaa !13
  call void %441(ptr noundef %444)
  br label %431, !llvm.loop !43

445:                                              ; preds = %434
  br label %446

446:                                              ; preds = %445, %419
  %447 = load ptr, ptr %13, align 8, !tbaa !9
  %448 = getelementptr inbounds %struct.otfcc_Options, ptr %447, i32 0, i32 24
  %449 = load ptr, ptr %448, align 8, !tbaa !13
  %450 = getelementptr inbounds %struct.otfcc_ILogger, ptr %449, i32 0, i32 6
  %451 = load ptr, ptr %450, align 8, !tbaa !39
  %452 = load ptr, ptr %13, align 8, !tbaa !9
  %453 = getelementptr inbounds %struct.otfcc_Options, ptr %452, i32 0, i32 24
  %454 = load ptr, ptr %453, align 8, !tbaa !13
  %455 = call ptr @push_stopwatch(ptr noundef %6)
  call void %451(ptr noundef %454, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %455)
  br label %456

456:                                              ; preds = %446
  store i8 0, ptr %18, align 1, !tbaa !11
  %457 = load ptr, ptr %13, align 8, !tbaa !9
  %458 = getelementptr inbounds %struct.otfcc_Options, ptr %457, i32 0, i32 24
  %459 = load ptr, ptr %458, align 8, !tbaa !13
  %460 = getelementptr inbounds %struct.otfcc_ILogger, ptr %459, i32 0, i32 8
  %461 = load ptr, ptr %460, align 8, !tbaa !41
  %462 = load ptr, ptr %13, align 8, !tbaa !9
  %463 = getelementptr inbounds %struct.otfcc_Options, ptr %462, i32 0, i32 24
  %464 = load ptr, ptr %463, align 8, !tbaa !13
  call void %461(ptr noundef %464)
  br label %384, !llvm.loop !44

465:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store ptr null, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #8
  %466 = load ptr, ptr %13, align 8, !tbaa !9
  %467 = getelementptr inbounds %struct.otfcc_Options, ptr %466, i32 0, i32 24
  %468 = load ptr, ptr %467, align 8, !tbaa !13
  %469 = getelementptr inbounds %struct.otfcc_ILogger, ptr %468, i32 0, i32 4
  %470 = load ptr, ptr %469, align 8, !tbaa !40
  %471 = load ptr, ptr %13, align 8, !tbaa !9
  %472 = getelementptr inbounds %struct.otfcc_Options, ptr %471, i32 0, i32 24
  %473 = load ptr, ptr %472, align 8, !tbaa !13
  %474 = call ptr @sdsempty()
  %475 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %474, ptr noundef @.str.35)
  call void %470(ptr noundef %473, ptr noundef %475)
  store i8 1, ptr %22, align 1, !tbaa !11
  br label %476

476:                                              ; preds = %509, %465
  %477 = load i8, ptr %22, align 1, !tbaa !11, !range !37, !noundef !38
  %478 = trunc i8 %477 to i1
  br i1 %478, label %480, label %479

479:                                              ; preds = %476
  store i32 14, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  br label %518

480:                                              ; preds = %476
  %481 = load ptr, ptr %16, align 8, !tbaa !9
  %482 = load i64, ptr %17, align 8, !tbaa !45
  %483 = call ptr @json_parse(ptr noundef %481, i64 noundef %482)
  store ptr %483, ptr %21, align 8, !tbaa !9
  %484 = load ptr, ptr %16, align 8, !tbaa !9
  call void @free(ptr noundef %484) #8
  %485 = load ptr, ptr %13, align 8, !tbaa !9
  %486 = getelementptr inbounds %struct.otfcc_Options, ptr %485, i32 0, i32 24
  %487 = load ptr, ptr %486, align 8, !tbaa !13
  %488 = getelementptr inbounds %struct.otfcc_ILogger, ptr %487, i32 0, i32 6
  %489 = load ptr, ptr %488, align 8, !tbaa !39
  %490 = load ptr, ptr %13, align 8, !tbaa !9
  %491 = getelementptr inbounds %struct.otfcc_Options, ptr %490, i32 0, i32 24
  %492 = load ptr, ptr %491, align 8, !tbaa !13
  %493 = call ptr @push_stopwatch(ptr noundef %6)
  call void %489(ptr noundef %492, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %493)
  %494 = load ptr, ptr %21, align 8, !tbaa !9
  %495 = icmp ne ptr %494, null
  br i1 %495, label %508, label %496

496:                                              ; preds = %480
  %497 = load ptr, ptr %13, align 8, !tbaa !9
  %498 = getelementptr inbounds %struct.otfcc_Options, ptr %497, i32 0, i32 24
  %499 = load ptr, ptr %498, align 8, !tbaa !13
  %500 = getelementptr inbounds %struct.otfcc_ILogger, ptr %499, i32 0, i32 6
  %501 = load ptr, ptr %500, align 8, !tbaa !39
  %502 = load ptr, ptr %13, align 8, !tbaa !9
  %503 = getelementptr inbounds %struct.otfcc_Options, ptr %502, i32 0, i32 24
  %504 = load ptr, ptr %503, align 8, !tbaa !13
  %505 = call ptr @sdsempty()
  %506 = load ptr, ptr %10, align 8, !tbaa !9
  %507 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %505, ptr noundef @.str.36, ptr noundef %506)
  call void %501(ptr noundef %504, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %507)
  call void @exit(i32 noundef 1) #10
  unreachable

508:                                              ; preds = %480
  br label %509

509:                                              ; preds = %508
  store i8 0, ptr %22, align 1, !tbaa !11
  %510 = load ptr, ptr %13, align 8, !tbaa !9
  %511 = getelementptr inbounds %struct.otfcc_Options, ptr %510, i32 0, i32 24
  %512 = load ptr, ptr %511, align 8, !tbaa !13
  %513 = getelementptr inbounds %struct.otfcc_ILogger, ptr %512, i32 0, i32 8
  %514 = load ptr, ptr %513, align 8, !tbaa !41
  %515 = load ptr, ptr %13, align 8, !tbaa !9
  %516 = getelementptr inbounds %struct.otfcc_Options, ptr %515, i32 0, i32 24
  %517 = load ptr, ptr %516, align 8, !tbaa !13
  call void %514(ptr noundef %517)
  br label %476, !llvm.loop !47

518:                                              ; preds = %479
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #8
  %519 = load ptr, ptr %13, align 8, !tbaa !9
  %520 = getelementptr inbounds %struct.otfcc_Options, ptr %519, i32 0, i32 24
  %521 = load ptr, ptr %520, align 8, !tbaa !13
  %522 = getelementptr inbounds %struct.otfcc_ILogger, ptr %521, i32 0, i32 4
  %523 = load ptr, ptr %522, align 8, !tbaa !40
  %524 = load ptr, ptr %13, align 8, !tbaa !9
  %525 = getelementptr inbounds %struct.otfcc_Options, ptr %524, i32 0, i32 24
  %526 = load ptr, ptr %525, align 8, !tbaa !13
  %527 = call ptr @sdsempty()
  %528 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %527, ptr noundef @.str.37)
  call void %523(ptr noundef %526, ptr noundef %528)
  store i8 1, ptr %24, align 1, !tbaa !11
  br label %529

529:                                              ; preds = %570, %518
  %530 = load i8, ptr %24, align 1, !tbaa !11, !range !37, !noundef !38
  %531 = trunc i8 %530 to i1
  br i1 %531, label %533, label %532

532:                                              ; preds = %529
  store i32 17, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  br label %579

533:                                              ; preds = %529
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %534 = call ptr (...) @otfcc_newJsonReader()
  store ptr %534, ptr %25, align 8, !tbaa !9
  %535 = load ptr, ptr %25, align 8, !tbaa !9
  %536 = getelementptr inbounds %struct.otfcc_IFontBuilder, ptr %535, i32 0, i32 0
  %537 = load ptr, ptr %536, align 8, !tbaa !48
  %538 = load ptr, ptr %21, align 8, !tbaa !9
  %539 = load ptr, ptr %13, align 8, !tbaa !9
  %540 = call ptr %537(ptr noundef %538, i32 noundef 0, ptr noundef %539)
  store ptr %540, ptr %23, align 8, !tbaa !9
  %541 = load ptr, ptr %23, align 8, !tbaa !9
  %542 = icmp ne ptr %541, null
  br i1 %542, label %555, label %543

543:                                              ; preds = %533
  %544 = load ptr, ptr %13, align 8, !tbaa !9
  %545 = getelementptr inbounds %struct.otfcc_Options, ptr %544, i32 0, i32 24
  %546 = load ptr, ptr %545, align 8, !tbaa !13
  %547 = getelementptr inbounds %struct.otfcc_ILogger, ptr %546, i32 0, i32 6
  %548 = load ptr, ptr %547, align 8, !tbaa !39
  %549 = load ptr, ptr %13, align 8, !tbaa !9
  %550 = getelementptr inbounds %struct.otfcc_Options, ptr %549, i32 0, i32 24
  %551 = load ptr, ptr %550, align 8, !tbaa !13
  %552 = call ptr @sdsempty()
  %553 = load ptr, ptr %10, align 8, !tbaa !9
  %554 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %552, ptr noundef @.str.38, ptr noundef %553)
  call void %548(ptr noundef %551, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %554)
  call void @exit(i32 noundef 1) #10
  unreachable

555:                                              ; preds = %533
  %556 = load ptr, ptr %25, align 8, !tbaa !9
  %557 = getelementptr inbounds %struct.otfcc_IFontBuilder, ptr %556, i32 0, i32 1
  %558 = load ptr, ptr %557, align 8, !tbaa !50
  %559 = load ptr, ptr %25, align 8, !tbaa !9
  call void %558(ptr noundef %559)
  %560 = load ptr, ptr %21, align 8, !tbaa !9
  call void @json_value_free(ptr noundef %560)
  %561 = load ptr, ptr %13, align 8, !tbaa !9
  %562 = getelementptr inbounds %struct.otfcc_Options, ptr %561, i32 0, i32 24
  %563 = load ptr, ptr %562, align 8, !tbaa !13
  %564 = getelementptr inbounds %struct.otfcc_ILogger, ptr %563, i32 0, i32 6
  %565 = load ptr, ptr %564, align 8, !tbaa !39
  %566 = load ptr, ptr %13, align 8, !tbaa !9
  %567 = getelementptr inbounds %struct.otfcc_Options, ptr %566, i32 0, i32 24
  %568 = load ptr, ptr %567, align 8, !tbaa !13
  %569 = call ptr @push_stopwatch(ptr noundef %6)
  call void %565(ptr noundef %568, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %569)
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %570

570:                                              ; preds = %555
  store i8 0, ptr %24, align 1, !tbaa !11
  %571 = load ptr, ptr %13, align 8, !tbaa !9
  %572 = getelementptr inbounds %struct.otfcc_Options, ptr %571, i32 0, i32 24
  %573 = load ptr, ptr %572, align 8, !tbaa !13
  %574 = getelementptr inbounds %struct.otfcc_ILogger, ptr %573, i32 0, i32 8
  %575 = load ptr, ptr %574, align 8, !tbaa !41
  %576 = load ptr, ptr %13, align 8, !tbaa !9
  %577 = getelementptr inbounds %struct.otfcc_Options, ptr %576, i32 0, i32 24
  %578 = load ptr, ptr %577, align 8, !tbaa !13
  call void %575(ptr noundef %578)
  br label %529, !llvm.loop !51

579:                                              ; preds = %532
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #8
  %580 = load ptr, ptr %13, align 8, !tbaa !9
  %581 = getelementptr inbounds %struct.otfcc_Options, ptr %580, i32 0, i32 24
  %582 = load ptr, ptr %581, align 8, !tbaa !13
  %583 = getelementptr inbounds %struct.otfcc_ILogger, ptr %582, i32 0, i32 4
  %584 = load ptr, ptr %583, align 8, !tbaa !40
  %585 = load ptr, ptr %13, align 8, !tbaa !9
  %586 = getelementptr inbounds %struct.otfcc_Options, ptr %585, i32 0, i32 24
  %587 = load ptr, ptr %586, align 8, !tbaa !13
  %588 = call ptr @sdsempty()
  %589 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %588, ptr noundef @.str.39)
  call void %584(ptr noundef %587, ptr noundef %589)
  store i8 1, ptr %26, align 1, !tbaa !11
  br label %590

590:                                              ; preds = %607, %579
  %591 = load i8, ptr %26, align 1, !tbaa !11, !range !37, !noundef !38
  %592 = trunc i8 %591 to i1
  br i1 %592, label %594, label %593

593:                                              ; preds = %590
  store i32 20, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  br label %616

594:                                              ; preds = %590
  %595 = load ptr, ptr getelementptr inbounds (%struct.__caryll_elementinterface_otfcc_Font, ptr @otfcc_iFont, i32 0, i32 8), align 8, !tbaa !52
  %596 = load ptr, ptr %23, align 8, !tbaa !9
  %597 = load ptr, ptr %13, align 8, !tbaa !9
  call void %595(ptr noundef %596, ptr noundef %597)
  %598 = load ptr, ptr %13, align 8, !tbaa !9
  %599 = getelementptr inbounds %struct.otfcc_Options, ptr %598, i32 0, i32 24
  %600 = load ptr, ptr %599, align 8, !tbaa !13
  %601 = getelementptr inbounds %struct.otfcc_ILogger, ptr %600, i32 0, i32 6
  %602 = load ptr, ptr %601, align 8, !tbaa !39
  %603 = load ptr, ptr %13, align 8, !tbaa !9
  %604 = getelementptr inbounds %struct.otfcc_Options, ptr %603, i32 0, i32 24
  %605 = load ptr, ptr %604, align 8, !tbaa !13
  %606 = call ptr @push_stopwatch(ptr noundef %6)
  call void %602(ptr noundef %605, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %606)
  br label %607

607:                                              ; preds = %594
  store i8 0, ptr %26, align 1, !tbaa !11
  %608 = load ptr, ptr %13, align 8, !tbaa !9
  %609 = getelementptr inbounds %struct.otfcc_Options, ptr %608, i32 0, i32 24
  %610 = load ptr, ptr %609, align 8, !tbaa !13
  %611 = getelementptr inbounds %struct.otfcc_ILogger, ptr %610, i32 0, i32 8
  %612 = load ptr, ptr %611, align 8, !tbaa !41
  %613 = load ptr, ptr %13, align 8, !tbaa !9
  %614 = getelementptr inbounds %struct.otfcc_Options, ptr %613, i32 0, i32 24
  %615 = load ptr, ptr %614, align 8, !tbaa !13
  call void %612(ptr noundef %615)
  br label %590, !llvm.loop !54

616:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #8
  %617 = load ptr, ptr %13, align 8, !tbaa !9
  %618 = getelementptr inbounds %struct.otfcc_Options, ptr %617, i32 0, i32 24
  %619 = load ptr, ptr %618, align 8, !tbaa !13
  %620 = getelementptr inbounds %struct.otfcc_ILogger, ptr %619, i32 0, i32 4
  %621 = load ptr, ptr %620, align 8, !tbaa !40
  %622 = load ptr, ptr %13, align 8, !tbaa !9
  %623 = getelementptr inbounds %struct.otfcc_Options, ptr %622, i32 0, i32 24
  %624 = load ptr, ptr %623, align 8, !tbaa !13
  %625 = call ptr @sdsempty()
  %626 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %625, ptr noundef @.str.40)
  call void %621(ptr noundef %624, ptr noundef %626)
  store i8 1, ptr %27, align 1, !tbaa !11
  br label %627

627:                                              ; preds = %707, %616
  %628 = load i8, ptr %27, align 1, !tbaa !11, !range !37, !noundef !38
  %629 = trunc i8 %628 to i1
  br i1 %629, label %631, label %630

630:                                              ; preds = %627
  store i32 23, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #8
  br label %716

631:                                              ; preds = %627
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %632 = call ptr (...) @otfcc_newOTFWriter()
  store ptr %632, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %633 = load ptr, ptr %28, align 8, !tbaa !9
  %634 = getelementptr inbounds %struct.otfcc_IFontSerializer, ptr %633, i32 0, i32 0
  %635 = load ptr, ptr %634, align 8, !tbaa !55
  %636 = load ptr, ptr %23, align 8, !tbaa !9
  %637 = load ptr, ptr %13, align 8, !tbaa !9
  %638 = call ptr %635(ptr noundef %636, ptr noundef %637)
  store ptr %638, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #8
  %639 = load ptr, ptr %13, align 8, !tbaa !9
  %640 = getelementptr inbounds %struct.otfcc_Options, ptr %639, i32 0, i32 24
  %641 = load ptr, ptr %640, align 8, !tbaa !13
  %642 = getelementptr inbounds %struct.otfcc_ILogger, ptr %641, i32 0, i32 4
  %643 = load ptr, ptr %642, align 8, !tbaa !40
  %644 = load ptr, ptr %13, align 8, !tbaa !9
  %645 = getelementptr inbounds %struct.otfcc_Options, ptr %644, i32 0, i32 24
  %646 = load ptr, ptr %645, align 8, !tbaa !13
  %647 = call ptr @sdsempty()
  %648 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %647, ptr noundef @.str.41)
  call void %643(ptr noundef %646, ptr noundef %648)
  store i8 1, ptr %30, align 1, !tbaa !11
  br label %649

649:                                              ; preds = %680, %631
  %650 = load i8, ptr %30, align 1, !tbaa !11, !range !37, !noundef !38
  %651 = trunc i8 %650 to i1
  br i1 %651, label %653, label %652

652:                                              ; preds = %649
  store i32 26, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #8
  br label %689

653:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %654 = load ptr, ptr %9, align 8, !tbaa !9
  %655 = call noalias ptr @fopen(ptr noundef %654, ptr noundef @.str.42)
  store ptr %655, ptr %31, align 8, !tbaa !9
  %656 = load ptr, ptr %31, align 8, !tbaa !9
  %657 = icmp ne ptr %656, null
  br i1 %657, label %670, label %658

658:                                              ; preds = %653
  %659 = load ptr, ptr %13, align 8, !tbaa !9
  %660 = getelementptr inbounds %struct.otfcc_Options, ptr %659, i32 0, i32 24
  %661 = load ptr, ptr %660, align 8, !tbaa !13
  %662 = getelementptr inbounds %struct.otfcc_ILogger, ptr %661, i32 0, i32 6
  %663 = load ptr, ptr %662, align 8, !tbaa !39
  %664 = load ptr, ptr %13, align 8, !tbaa !9
  %665 = getelementptr inbounds %struct.otfcc_Options, ptr %664, i32 0, i32 24
  %666 = load ptr, ptr %665, align 8, !tbaa !13
  %667 = call ptr @sdsempty()
  %668 = load ptr, ptr %9, align 8, !tbaa !9
  %669 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %667, ptr noundef @.str.43, ptr noundef %668)
  call void %663(ptr noundef %666, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %669)
  call void @exit(i32 noundef 1) #10
  unreachable

670:                                              ; preds = %653
  %671 = load ptr, ptr %29, align 8, !tbaa !9
  %672 = getelementptr inbounds %struct.caryll_Buffer, ptr %671, i32 0, i32 3
  %673 = load ptr, ptr %672, align 8, !tbaa !57
  %674 = load ptr, ptr %29, align 8, !tbaa !9
  %675 = call i64 @buflen(ptr noundef %674)
  %676 = load ptr, ptr %31, align 8, !tbaa !9
  %677 = call i64 @fwrite(ptr noundef %673, i64 noundef 1, i64 noundef %675, ptr noundef %676)
  %678 = load ptr, ptr %31, align 8, !tbaa !9
  %679 = call i32 @fclose(ptr noundef %678)
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %680

680:                                              ; preds = %670
  store i8 0, ptr %30, align 1, !tbaa !11
  %681 = load ptr, ptr %13, align 8, !tbaa !9
  %682 = getelementptr inbounds %struct.otfcc_Options, ptr %681, i32 0, i32 24
  %683 = load ptr, ptr %682, align 8, !tbaa !13
  %684 = getelementptr inbounds %struct.otfcc_ILogger, ptr %683, i32 0, i32 8
  %685 = load ptr, ptr %684, align 8, !tbaa !41
  %686 = load ptr, ptr %13, align 8, !tbaa !9
  %687 = getelementptr inbounds %struct.otfcc_Options, ptr %686, i32 0, i32 24
  %688 = load ptr, ptr %687, align 8, !tbaa !13
  call void %685(ptr noundef %688)
  br label %649, !llvm.loop !59

689:                                              ; preds = %652
  %690 = load ptr, ptr %13, align 8, !tbaa !9
  %691 = getelementptr inbounds %struct.otfcc_Options, ptr %690, i32 0, i32 24
  %692 = load ptr, ptr %691, align 8, !tbaa !13
  %693 = getelementptr inbounds %struct.otfcc_ILogger, ptr %692, i32 0, i32 6
  %694 = load ptr, ptr %693, align 8, !tbaa !39
  %695 = load ptr, ptr %13, align 8, !tbaa !9
  %696 = getelementptr inbounds %struct.otfcc_Options, ptr %695, i32 0, i32 24
  %697 = load ptr, ptr %696, align 8, !tbaa !13
  %698 = call ptr @push_stopwatch(ptr noundef %6)
  call void %694(ptr noundef %697, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %698)
  %699 = load ptr, ptr %29, align 8, !tbaa !9
  call void @buffree(ptr noundef %699)
  %700 = load ptr, ptr %28, align 8, !tbaa !9
  %701 = getelementptr inbounds %struct.otfcc_IFontSerializer, ptr %700, i32 0, i32 1
  %702 = load ptr, ptr %701, align 8, !tbaa !60
  %703 = load ptr, ptr %28, align 8, !tbaa !9
  call void %702(ptr noundef %703)
  %704 = load ptr, ptr getelementptr inbounds (%struct.__caryll_elementinterface_otfcc_Font, ptr @otfcc_iFont, i32 0, i32 7), align 8, !tbaa !61
  %705 = load ptr, ptr %23, align 8, !tbaa !9
  call void %704(ptr noundef %705)
  %706 = load ptr, ptr %9, align 8, !tbaa !9
  call void @sdsfree(ptr noundef %706)
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %707

707:                                              ; preds = %689
  store i8 0, ptr %27, align 1, !tbaa !11
  %708 = load ptr, ptr %13, align 8, !tbaa !9
  %709 = getelementptr inbounds %struct.otfcc_Options, ptr %708, i32 0, i32 24
  %710 = load ptr, ptr %709, align 8, !tbaa !13
  %711 = getelementptr inbounds %struct.otfcc_ILogger, ptr %710, i32 0, i32 8
  %712 = load ptr, ptr %711, align 8, !tbaa !41
  %713 = load ptr, ptr %13, align 8, !tbaa !9
  %714 = getelementptr inbounds %struct.otfcc_Options, ptr %713, i32 0, i32 24
  %715 = load ptr, ptr %714, align 8, !tbaa !13
  call void %712(ptr noundef %715)
  br label %627, !llvm.loop !62

716:                                              ; preds = %630
  %717 = load ptr, ptr %13, align 8, !tbaa !9
  call void @otfcc_deleteOptions(ptr noundef %717)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %718

718:                                              ; preds = %716, %346, %342
  call void @llvm.lifetime.end.p0(i64 800, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #8
  %719 = load i32, ptr %3, align 4
  ret i32 %719
}

declare void @time_now(ptr noundef) #2

declare ptr @otfcc_newOptions(...) #2

declare ptr @otfcc_newLogger(ptr noundef) #2

declare ptr @otfcc_newStdErrTarget(...) #2

declare void @otfcc_Options_optimizeTo(ptr noundef, i8 noundef zeroext) #2

; 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) #4

declare i32 @getopt_long(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #5

declare ptr @sdsnew(ptr noundef) #2

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #6

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

declare ptr @sdsempty() #2

declare void @sdsfree(ptr noundef) #2

declare ptr @push_stopwatch(ptr noundef) #2

declare ptr @json_parse(ptr noundef, i64 noundef) #2

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

declare ptr @otfcc_newJsonReader(...) #2

declare void @json_value_free(ptr noundef) #2

declare ptr @otfcc_newOTFWriter(...) #2

declare i64 @fwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

declare i64 @buflen(ptr noundef) #2

declare void @buffree(ptr noundef) #2

declare void @otfcc_deleteOptions(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{!14, !10, i64 32}
!14 = !{!"", !12, i64 0, !12, i64 1, !12, i64 2, !12, i64 3, !12, i64 4, !12, i64 5, !12, i64 6, !12, i64 7, !12, i64 8, !12, i64 9, !12, i64 10, !12, i64 11, !12, i64 12, !12, i64 13, !12, i64 14, !12, i64 15, !12, i64 16, !12, i64 17, !12, i64 18, !12, i64 19, !12, i64 20, !12, i64 21, !12, i64 22, !10, i64 24, !10, i64 32}
!15 = !{!16, !10, i64 8}
!16 = !{!"otfcc_ILogger", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88}
!17 = !{!18, !10, i64 16}
!18 = !{!"option", !10, i64 0, !6, i64 8, !10, i64 16, !6, i64 24}
!19 = !{!18, !10, i64 0}
!20 = !{!14, !12, i64 2}
!21 = !{!14, !12, i64 5}
!22 = !{!14, !12, i64 6}
!23 = !{!14, !12, i64 9}
!24 = !{!14, !12, i64 15}
!25 = !{!14, !12, i64 14}
!26 = !{!14, !12, i64 1}
!27 = !{!14, !12, i64 7}
!28 = !{!14, !12, i64 16}
!29 = !{!14, !12, i64 18}
!30 = !{!14, !12, i64 19}
!31 = !{!14, !12, i64 8}
!32 = !{!14, !12, i64 11}
!33 = !{!14, !12, i64 12}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!16, !10, i64 80}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!16, !10, i64 48}
!40 = !{!16, !10, i64 32}
!41 = !{!16, !10, i64 64}
!42 = distinct !{!42, !35}
!43 = distinct !{!43, !35}
!44 = distinct !{!44, !35}
!45 = !{!46, !46, i64 0}
!46 = !{!"long", !7, i64 0}
!47 = distinct !{!47, !35}
!48 = !{!49, !10, i64 0}
!49 = !{!"otfcc_IFontBuilder", !10, i64 0, !10, i64 8}
!50 = !{!49, !10, i64 8}
!51 = distinct !{!51, !35}
!52 = !{!53, !10, i64 64}
!53 = !{!"__caryll_elementinterface_otfcc_Font", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80}
!54 = distinct !{!54, !35}
!55 = !{!56, !10, i64 0}
!56 = !{!"otfcc_IFontSerializer", !10, i64 0, !10, i64 8}
!57 = !{!58, !10, i64 24}
!58 = !{!"caryll_Buffer", !46, i64 0, !46, i64 8, !46, i64 16, !10, i64 24}
!59 = distinct !{!59, !35}
!60 = !{!56, !10, i64 8}
!61 = !{!53, !10, i64 56}
!62 = distinct !{!62, !35}


; 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.option = type { ptr, i32, ptr, i32 }
%struct.__caryll_elementinterface_otfcc_Font = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.timespec = type { i64, i64 }

@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [6 x i8], align 1
@__const.main.longopts = external hidden unnamed_addr constant [25 x %struct.option], align 16
@.str.29 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [22 x i8], align 1
@optarg = external local_unnamed_addr global ptr, align 8
@optind = external local_unnamed_addr global i32, align 4
@.str.31 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [12 x i8], align 1
@otfcc_iFont = external local_unnamed_addr constant %struct.__caryll_elementinterface_otfcc_Font, align 8
@.str.40 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [34 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @printInfo() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @printHelp() local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @readEntireFile(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local void @readEntireStdin(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca %struct.timespec, align 8
  %4 = alloca i32, align 4
  %5 = alloca [25 x %struct.option], align 16
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #9
  call void @time_now(ptr noundef nonnull %3) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #9
  store i32 0, ptr %4, align 4, !tbaa !5
  %8 = call ptr (...) @otfcc_newOptions() #9
  %9 = call ptr (...) @otfcc_newStdErrTarget() #9
  %10 = call ptr @otfcc_newLogger(ptr noundef %9) #9
  %11 = getelementptr inbounds i8, ptr %8, i64 32
  store ptr %10, ptr %11, align 8, !tbaa !9
  %12 = getelementptr inbounds i8, ptr %10, i64 8
  %13 = load ptr, ptr %12, align 8, !tbaa !13
  call void %13(ptr noundef %10, ptr noundef nonnull @.str.4) #9
  call void @otfcc_Options_optimizeTo(ptr noundef %8, i8 noundef zeroext 1) #9
  call void @llvm.lifetime.start.p0(i64 800, ptr nonnull %5) #9
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(800) %5, ptr noundef nonnull align 16 dereferenceable(800) @__const.main.longopts, i64 800, i1 false)
  %14 = getelementptr inbounds i8, ptr %8, i64 12
  %15 = getelementptr inbounds i8, ptr %8, i64 8
  %16 = getelementptr inbounds i8, ptr %8, i64 1
  %17 = getelementptr inbounds i8, ptr %8, i64 11
  %18 = getelementptr inbounds i8, ptr %8, i64 7
  %19 = getelementptr inbounds i8, ptr %8, i64 19
  %20 = getelementptr inbounds i8, ptr %8, i64 18
  %21 = getelementptr inbounds i8, ptr %8, i64 16
  %22 = getelementptr inbounds i8, ptr %8, i64 14
  %23 = getelementptr inbounds i8, ptr %8, i64 15
  %24 = getelementptr inbounds i8, ptr %8, i64 9
  %25 = getelementptr inbounds i8, ptr %8, i64 6
  %26 = getelementptr inbounds i8, ptr %8, i64 5
  %27 = getelementptr inbounds i8, ptr %8, i64 2
  br label %28

28:                                               ; preds = %.backedge, %2
  %.0137 = phi ptr [ null, %2 ], [ %.0137.be, %.backedge ]
  %.0133 = phi i1 [ false, %2 ], [ %.0133.be, %.backedge ]
  %.0132 = phi i1 [ false, %2 ], [ %.0132.be, %.backedge ]
  %29 = call i32 @getopt_long(i32 noundef %0, ptr noundef %1, ptr noundef nonnull @.str.29, ptr noundef nonnull %5, ptr noundef nonnull %4) #9
  switch i32 %29, label %.backedge [
    i32 -1, label %125
    i32 0, label %30
    i32 118, label %112
    i32 104, label %113
    i32 107, label %114
    i32 105, label %115
    i32 111, label %116
    i32 115, label %119
    i32 113, label %120
    i32 79, label %121
  ]

.backedge:                                        ; preds = %28, %43, %51, %59, %67, %75, %83, %91, %99, %107, %111, %108, %103, %95, %87, %79, %71, %63, %55, %47, %36, %30, %121, %120, %119, %116, %115, %114, %113, %112
  %.0137.be = phi ptr [ %.0137, %121 ], [ %.0137, %120 ], [ %.0137, %119 ], [ %118, %116 ], [ %.0137, %115 ], [ %.0137, %114 ], [ %.0137, %113 ], [ %.0137, %112 ], [ %.0137, %30 ], [ %.0137, %36 ], [ %.0137, %43 ], [ %.0137, %47 ], [ %.0137, %51 ], [ %.0137, %55 ], [ %.0137, %59 ], [ %.0137, %63 ], [ %.0137, %67 ], [ %.0137, %71 ], [ %.0137, %75 ], [ %.0137, %79 ], [ %.0137, %83 ], [ %.0137, %87 ], [ %.0137, %91 ], [ %.0137, %95 ], [ %.0137, %99 ], [ %.0137, %103 ], [ %.0137, %107 ], [ %.0137, %111 ], [ %.0137, %108 ], [ %.0137, %28 ]
  %.0133.be = phi i1 [ %.0133, %121 ], [ %.0133, %120 ], [ %.0133, %119 ], [ %.0133, %116 ], [ %.0133, %115 ], [ %.0133, %114 ], [ %.0133, %113 ], [ true, %112 ], [ %.0133, %30 ], [ %.0133, %36 ], [ %.0133, %43 ], [ %.0133, %47 ], [ %.0133, %51 ], [ %.0133, %55 ], [ %.0133, %59 ], [ %.0133, %63 ], [ %.0133, %67 ], [ %.0133, %71 ], [ %.0133, %75 ], [ %.0133, %79 ], [ %.0133, %83 ], [ %.0133, %87 ], [ %.0133, %91 ], [ %.0133, %95 ], [ %.0133, %99 ], [ %.0133, %103 ], [ %.0133, %107 ], [ %.0133, %111 ], [ %.0133, %108 ], [ %.0133, %28 ]
  %.0132.be = phi i1 [ %.0132, %121 ], [ %.0132, %120 ], [ %.0132, %119 ], [ %.0132, %116 ], [ %.0132, %115 ], [ %.0132, %114 ], [ true, %113 ], [ %.0132, %112 ], [ %.0132, %30 ], [ %.0132, %36 ], [ %.0132, %43 ], [ %.0132, %47 ], [ %.0132, %51 ], [ %.0132, %55 ], [ %.0132, %59 ], [ %.0132, %63 ], [ %.0132, %67 ], [ %.0132, %71 ], [ %.0132, %75 ], [ %.0132, %79 ], [ %.0132, %83 ], [ %.0132, %87 ], [ %.0132, %91 ], [ %.0132, %95 ], [ %.0132, %99 ], [ %.0132, %103 ], [ %.0132, %107 ], [ %.0132, %111 ], [ %.0132, %108 ], [ %.0132, %28 ]
  br label %28, !llvm.loop !15

30:                                               ; preds = %28
  %31 = load i32, ptr %4, align 4, !tbaa !5
  %32 = sext i32 %31 to i64
  %33 = getelementptr inbounds [25 x %struct.option], ptr %5, i64 0, i64 %32
  %34 = getelementptr inbounds i8, ptr %33, i64 16
  %35 = load ptr, ptr %34, align 16, !tbaa !17
  %.not157 = icmp eq ptr %35, null
  br i1 %.not157, label %36, label %.backedge

36:                                               ; preds = %30
  %37 = load ptr, ptr %33, align 16, !tbaa !19
  %38 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.7) #10
  %39 = icmp eq i32 %38, 0
  br i1 %39, label %.backedge, label %40

40:                                               ; preds = %36
  %41 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.11) #10
  %42 = icmp eq i32 %41, 0
  br i1 %42, label %43, label %44

43:                                               ; preds = %40
  store i8 1, ptr %27, align 2, !tbaa !20
  br label %.backedge

44:                                               ; preds = %40
  %45 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.12) #10
  %46 = icmp eq i32 %45, 0
  br i1 %46, label %47, label %48

47:                                               ; preds = %44
  store i8 1, ptr %26, align 1, !tbaa !21
  br label %.backedge

48:                                               ; preds = %44
  %49 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.13) #10
  %50 = icmp eq i32 %49, 0
  br i1 %50, label %51, label %52

51:                                               ; preds = %48
  store i8 1, ptr %25, align 2, !tbaa !22
  br label %.backedge

52:                                               ; preds = %48
  %53 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.14) #10
  %54 = icmp eq i32 %53, 0
  br i1 %54, label %55, label %56

55:                                               ; preds = %52
  store i8 1, ptr %24, align 1, !tbaa !23
  br label %.backedge

56:                                               ; preds = %52
  %57 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.16) #10
  %58 = icmp eq i32 %57, 0
  br i1 %58, label %59, label %60

59:                                               ; preds = %56
  store i8 1, ptr %23, align 1, !tbaa !24
  br label %.backedge

60:                                               ; preds = %56
  %61 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.15) #10
  %62 = icmp eq i32 %61, 0
  br i1 %62, label %63, label %64

63:                                               ; preds = %60
  store i8 1, ptr %22, align 2, !tbaa !25
  br label %.backedge

64:                                               ; preds = %60
  %65 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.18) #10
  %66 = icmp eq i32 %65, 0
  br i1 %66, label %67, label %68

67:                                               ; preds = %64
  store i8 0, ptr %23, align 1, !tbaa !24
  br label %.backedge

68:                                               ; preds = %64
  %69 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.17) #10
  %70 = icmp eq i32 %69, 0
  br i1 %70, label %71, label %72

71:                                               ; preds = %68
  store i8 0, ptr %22, align 2, !tbaa !25
  br label %.backedge

72:                                               ; preds = %68
  %73 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.8) #10
  %74 = icmp eq i32 %73, 0
  br i1 %74, label %75, label %76

75:                                               ; preds = %72
  store i8 1, ptr %16, align 1, !tbaa !26
  br label %.backedge

76:                                               ; preds = %72
  %77 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.9) #10
  %78 = icmp eq i32 %77, 0
  br i1 %78, label %79, label %80

79:                                               ; preds = %76
  store i8 0, ptr %16, align 1, !tbaa !26
  br label %.backedge

80:                                               ; preds = %76
  %81 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.30) #10
  %82 = icmp eq i32 %81, 0
  br i1 %82, label %83, label %84

83:                                               ; preds = %80
  store i8 0, ptr %16, align 1, !tbaa !26
  br label %.backedge

84:                                               ; preds = %80
  %85 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.19) #10
  %86 = icmp eq i32 %85, 0
  br i1 %86, label %87, label %88

87:                                               ; preds = %84
  store i8 1, ptr %18, align 1, !tbaa !27
  br label %.backedge

88:                                               ; preds = %84
  %89 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.20) #10
  %90 = icmp eq i32 %89, 0
  br i1 %90, label %91, label %92

91:                                               ; preds = %88
  store i8 1, ptr %21, align 8, !tbaa !28
  br label %.backedge

92:                                               ; preds = %88
  %93 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.21) #10
  %94 = icmp eq i32 %93, 0
  br i1 %94, label %95, label %96

95:                                               ; preds = %92
  store i8 1, ptr %20, align 2, !tbaa !29
  br label %.backedge

96:                                               ; preds = %92
  %97 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.22) #10
  %98 = icmp eq i32 %97, 0
  br i1 %98, label %99, label %100

99:                                               ; preds = %96
  store i8 1, ptr %19, align 1, !tbaa !30
  br label %.backedge

100:                                              ; preds = %96
  %101 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.24) #10
  %102 = icmp eq i32 %101, 0
  br i1 %102, label %103, label %104

103:                                              ; preds = %100
  store i8 1, ptr %16, align 1, !tbaa !26
  store i8 1, ptr %18, align 1, !tbaa !27
  store i8 1, ptr %15, align 8, !tbaa !31
  br label %.backedge

104:                                              ; preds = %100
  %105 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.25) #10
  %106 = icmp eq i32 %105, 0
  br i1 %106, label %107, label %108

107:                                              ; preds = %104
  store i8 1, ptr %17, align 1, !tbaa !32
  br label %.backedge

108:                                              ; preds = %104
  %109 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.26) #10
  %110 = icmp eq i32 %109, 0
  br i1 %110, label %111, label %.backedge

111:                                              ; preds = %108
  store i8 1, ptr %14, align 4, !tbaa !33
  br label %.backedge

112:                                              ; preds = %28
  br label %.backedge

113:                                              ; preds = %28
  br label %.backedge

114:                                              ; preds = %28
  store i8 0, ptr %16, align 1, !tbaa !26
  br label %.backedge

115:                                              ; preds = %28
  store i8 1, ptr %16, align 1, !tbaa !26
  br label %.backedge

116:                                              ; preds = %28
  %117 = load ptr, ptr @optarg, align 8, !tbaa !34
  %118 = call ptr @sdsnew(ptr noundef %117) #9
  br label %.backedge

119:                                              ; preds = %28
  store i8 1, ptr %15, align 8, !tbaa !31
  br label %.backedge

120:                                              ; preds = %28
  store i8 1, ptr %14, align 4, !tbaa !33
  br label %.backedge

121:                                              ; preds = %28
  %122 = load ptr, ptr @optarg, align 8, !tbaa !34
  %123 = call i32 @atoi(ptr nocapture noundef %122) #10
  %124 = trunc i32 %123 to i8
  call void @otfcc_Options_optimizeTo(ptr noundef %8, i8 noundef zeroext %124) #9
  br label %.backedge

125:                                              ; preds = %28
  %126 = load ptr, ptr %11, align 8, !tbaa !9
  %127 = getelementptr inbounds i8, ptr %126, i64 80
  %128 = load ptr, ptr %127, align 8, !tbaa !35
  %129 = load i8, ptr %14, align 4, !tbaa !33, !range !36, !noundef !37
  %130 = trunc nuw i8 %129 to i1
  br i1 %130, label %135, label %131

131:                                              ; preds = %125
  %132 = load i8, ptr %17, align 1, !tbaa !32, !range !36, !noundef !37
  %133 = trunc nuw i8 %132 to i1
  %134 = select i1 %133, i8 -1, i8 1
  br label %135

135:                                              ; preds = %125, %131
  %136 = phi i8 [ %134, %131 ], [ 0, %125 ]
  call void %128(ptr noundef nonnull %126, i8 noundef zeroext %136) #9
  br i1 %.0132, label %137, label %138

137:                                              ; preds = %135
  call void @printInfo()
  call void @printHelp()
  br label %273

138:                                              ; preds = %135
  br i1 %.0133, label %139, label %140

139:                                              ; preds = %138
  call void @printInfo()
  br label %273

140:                                              ; preds = %138
  %141 = load i32, ptr @optind, align 4, !tbaa !5
  %.not151 = icmp slt i32 %141, %0
  br i1 %.not151, label %142, label %147

142:                                              ; preds = %140
  %143 = sext i32 %141 to i64
  %144 = getelementptr inbounds ptr, ptr %1, i64 %143
  %145 = load ptr, ptr %144, align 8, !tbaa !34
  %146 = call ptr @sdsnew(ptr noundef %145) #9
  br label %147

147:                                              ; preds = %140, %142
  %.0146 = phi ptr [ %146, %142 ], [ null, %140 ]
  %.not152 = icmp eq ptr %.0137, null
  br i1 %.not152, label %148, label %.critedge

148:                                              ; preds = %147
  %149 = load ptr, ptr %11, align 8, !tbaa !9
  %150 = getelementptr inbounds i8, ptr %149, i64 48
  %151 = load ptr, ptr %150, align 8, !tbaa !38
  %152 = call ptr @sdsempty() #9
  %153 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %152, ptr noundef nonnull @.str.31) #9
  call void %151(ptr noundef %149, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %153) #9
  call void @printHelp()
  call void @exit(i32 noundef 1) #11
  unreachable

.critedge:                                        ; preds = %147
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #9
  %154 = load ptr, ptr %11, align 8, !tbaa !9
  %155 = getelementptr inbounds i8, ptr %154, i64 32
  %156 = load ptr, ptr %155, align 8, !tbaa !39
  %157 = call ptr @sdsempty() #9
  %158 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %157, ptr noundef nonnull @.str.32) #9
  call void %156(ptr noundef %154, ptr noundef %158) #9
  %.not156 = icmp eq ptr %.0146, null
  %159 = load ptr, ptr %11, align 8, !tbaa !9
  %160 = getelementptr inbounds i8, ptr %159, i64 32
  %161 = load ptr, ptr %160, align 8, !tbaa !39
  %162 = call ptr @sdsempty() #9
  br i1 %.not156, label %.critedge161, label %.critedge159

.critedge159:                                     ; preds = %.critedge
  %163 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %162, ptr noundef nonnull @.str.33, ptr noundef nonnull %.0146) #9
  call void %161(ptr noundef %159, ptr noundef %163) #9
  call void @readEntireFile(ptr noundef nonnull %.0146, ptr noundef nonnull %6, ptr noundef nonnull %7)
  call void @sdsfree(ptr noundef nonnull %.0146) #9
  br label %165

.critedge161:                                     ; preds = %.critedge
  %164 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %162, ptr noundef nonnull @.str.34) #9
  call void %161(ptr noundef %159, ptr noundef %164) #9
  call void @readEntireStdin(ptr noundef nonnull %6, ptr noundef nonnull %7)
  br label %165

165:                                              ; preds = %.critedge161, %.critedge159
  %166 = load ptr, ptr %11, align 8, !tbaa !9
  %167 = getelementptr inbounds i8, ptr %166, i64 64
  %168 = load ptr, ptr %167, align 8, !tbaa !40
  call void %168(ptr noundef %166) #9
  %169 = load ptr, ptr %11, align 8, !tbaa !9
  %170 = getelementptr inbounds i8, ptr %169, i64 48
  %171 = load ptr, ptr %170, align 8, !tbaa !38
  %172 = call ptr @push_stopwatch(ptr noundef nonnull %3) #9
  call void %171(ptr noundef %169, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %172) #9
  %173 = load ptr, ptr %11, align 8, !tbaa !9
  %174 = getelementptr inbounds i8, ptr %173, i64 64
  %175 = load ptr, ptr %174, align 8, !tbaa !40
  call void %175(ptr noundef %173) #9
  %176 = load ptr, ptr %11, align 8, !tbaa !9
  %177 = getelementptr inbounds i8, ptr %176, i64 32
  %178 = load ptr, ptr %177, align 8, !tbaa !39
  %179 = call ptr @sdsempty() #9
  %180 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %179, ptr noundef nonnull @.str.35) #9
  call void %178(ptr noundef %176, ptr noundef %180) #9
  %181 = load ptr, ptr %6, align 8, !tbaa !34
  %182 = load i64, ptr %7, align 8, !tbaa !41
  %183 = call ptr @json_parse(ptr noundef %181, i64 noundef %182) #9
  %184 = load ptr, ptr %6, align 8, !tbaa !34
  call void @free(ptr noundef %184) #9
  %185 = load ptr, ptr %11, align 8, !tbaa !9
  %186 = getelementptr inbounds i8, ptr %185, i64 48
  %187 = load ptr, ptr %186, align 8, !tbaa !38
  %188 = call ptr @push_stopwatch(ptr noundef nonnull %3) #9
  call void %187(ptr noundef %185, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %188) #9
  %.not155 = icmp eq ptr %183, null
  %189 = load ptr, ptr %11, align 8, !tbaa !9
  br i1 %.not155, label %190, label %195

190:                                              ; preds = %165
  %191 = getelementptr inbounds i8, ptr %189, i64 48
  %192 = load ptr, ptr %191, align 8, !tbaa !38
  %193 = call ptr @sdsempty() #9
  %194 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %193, ptr noundef nonnull @.str.36, ptr noundef %.0146) #9
  call void %192(ptr noundef %189, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %194) #9
  call void @exit(i32 noundef 1) #11
  unreachable

195:                                              ; preds = %165
  %196 = getelementptr inbounds i8, ptr %189, i64 64
  %197 = load ptr, ptr %196, align 8, !tbaa !40
  call void %197(ptr noundef %189) #9
  %198 = load ptr, ptr %11, align 8, !tbaa !9
  %199 = getelementptr inbounds i8, ptr %198, i64 32
  %200 = load ptr, ptr %199, align 8, !tbaa !39
  %201 = call ptr @sdsempty() #9
  %202 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %201, ptr noundef nonnull @.str.37) #9
  call void %200(ptr noundef %198, ptr noundef %202) #9
  %203 = call ptr (...) @otfcc_newJsonReader() #9
  %204 = load ptr, ptr %203, align 8, !tbaa !43
  %205 = call ptr %204(ptr noundef nonnull %183, i32 noundef 0, ptr noundef nonnull %8) #9
  %.not154 = icmp eq ptr %205, null
  br i1 %.not154, label %206, label %.critedge163

206:                                              ; preds = %195
  %207 = load ptr, ptr %11, align 8, !tbaa !9
  %208 = getelementptr inbounds i8, ptr %207, i64 48
  %209 = load ptr, ptr %208, align 8, !tbaa !38
  %210 = call ptr @sdsempty() #9
  %211 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %210, ptr noundef nonnull @.str.38, ptr noundef %.0146) #9
  call void %209(ptr noundef %207, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %211) #9
  call void @exit(i32 noundef 1) #11
  unreachable

.critedge163:                                     ; preds = %195
  %212 = getelementptr inbounds i8, ptr %203, i64 8
  %213 = load ptr, ptr %212, align 8, !tbaa !45
  call void %213(ptr noundef nonnull %203) #9
  call void @json_value_free(ptr noundef nonnull %183) #9
  %214 = load ptr, ptr %11, align 8, !tbaa !9
  %215 = getelementptr inbounds i8, ptr %214, i64 48
  %216 = load ptr, ptr %215, align 8, !tbaa !38
  %217 = call ptr @push_stopwatch(ptr noundef nonnull %3) #9
  call void %216(ptr noundef %214, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %217) #9
  %218 = load ptr, ptr %11, align 8, !tbaa !9
  %219 = getelementptr inbounds i8, ptr %218, i64 64
  %220 = load ptr, ptr %219, align 8, !tbaa !40
  call void %220(ptr noundef %218) #9
  %221 = load ptr, ptr %11, align 8, !tbaa !9
  %222 = getelementptr inbounds i8, ptr %221, i64 32
  %223 = load ptr, ptr %222, align 8, !tbaa !39
  %224 = call ptr @sdsempty() #9
  %225 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %224, ptr noundef nonnull @.str.39) #9
  call void %223(ptr noundef %221, ptr noundef %225) #9
  %226 = load ptr, ptr getelementptr inbounds (i8, ptr @otfcc_iFont, i64 64), align 8, !tbaa !46
  call void %226(ptr noundef nonnull %205, ptr noundef nonnull %8) #9
  %227 = load ptr, ptr %11, align 8, !tbaa !9
  %228 = getelementptr inbounds i8, ptr %227, i64 48
  %229 = load ptr, ptr %228, align 8, !tbaa !38
  %230 = call ptr @push_stopwatch(ptr noundef nonnull %3) #9
  call void %229(ptr noundef %227, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %230) #9
  %231 = load ptr, ptr %11, align 8, !tbaa !9
  %232 = getelementptr inbounds i8, ptr %231, i64 64
  %233 = load ptr, ptr %232, align 8, !tbaa !40
  call void %233(ptr noundef %231) #9
  %234 = load ptr, ptr %11, align 8, !tbaa !9
  %235 = getelementptr inbounds i8, ptr %234, i64 32
  %236 = load ptr, ptr %235, align 8, !tbaa !39
  %237 = call ptr @sdsempty() #9
  %238 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %237, ptr noundef nonnull @.str.40) #9
  call void %236(ptr noundef %234, ptr noundef %238) #9
  %239 = call ptr (...) @otfcc_newOTFWriter() #9
  %240 = load ptr, ptr %239, align 8, !tbaa !48
  %241 = call ptr %240(ptr noundef nonnull %205, ptr noundef nonnull %8) #9
  %242 = load ptr, ptr %11, align 8, !tbaa !9
  %243 = getelementptr inbounds i8, ptr %242, i64 32
  %244 = load ptr, ptr %243, align 8, !tbaa !39
  %245 = call ptr @sdsempty() #9
  %246 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %245, ptr noundef nonnull @.str.41) #9
  call void %244(ptr noundef %242, ptr noundef %246) #9
  %247 = call noalias ptr @fopen(ptr noundef nonnull %.0137, ptr noundef nonnull @.str.42)
  %.not153 = icmp eq ptr %247, null
  br i1 %.not153, label %248, label %254

248:                                              ; preds = %.critedge163
  %249 = load ptr, ptr %11, align 8, !tbaa !9
  %250 = getelementptr inbounds i8, ptr %249, i64 48
  %251 = load ptr, ptr %250, align 8, !tbaa !38
  %252 = call ptr @sdsempty() #9
  %253 = call ptr (ptr, ptr, ...) @sdscatprintf(ptr noundef %252, ptr noundef nonnull @.str.43, ptr noundef nonnull %.0137) #9
  call void %251(ptr noundef %249, i8 noundef zeroext 0, i32 noundef 0, ptr noundef %253) #9
  call void @exit(i32 noundef 1) #11
  unreachable

254:                                              ; preds = %.critedge163
  %255 = getelementptr inbounds i8, ptr %241, i64 24
  %256 = load ptr, ptr %255, align 8, !tbaa !50
  %257 = call i64 @buflen(ptr noundef %241) #9
  %258 = call i64 @fwrite(ptr noundef %256, i64 noundef 1, i64 noundef %257, ptr noundef nonnull %247)
  %259 = call i32 @fclose(ptr noundef nonnull %247)
  %260 = load ptr, ptr %11, align 8, !tbaa !9
  %261 = getelementptr inbounds i8, ptr %260, i64 64
  %262 = load ptr, ptr %261, align 8, !tbaa !40
  call void %262(ptr noundef %260) #9
  %263 = load ptr, ptr %11, align 8, !tbaa !9
  %264 = getelementptr inbounds i8, ptr %263, i64 48
  %265 = load ptr, ptr %264, align 8, !tbaa !38
  %266 = call ptr @push_stopwatch(ptr noundef nonnull %3) #9
  call void %265(ptr noundef %263, i8 noundef zeroext 10, i32 noundef 3, ptr noundef %266) #9
  call void @buffree(ptr noundef %241) #9
  %267 = getelementptr inbounds i8, ptr %239, i64 8
  %268 = load ptr, ptr %267, align 8, !tbaa !52
  call void %268(ptr noundef nonnull %239) #9
  %269 = load ptr, ptr getelementptr inbounds (i8, ptr @otfcc_iFont, i64 56), align 8, !tbaa !53
  call void %269(ptr noundef nonnull %205) #9
  call void @sdsfree(ptr noundef nonnull %.0137) #9
  %270 = load ptr, ptr %11, align 8, !tbaa !9
  %271 = getelementptr inbounds i8, ptr %270, i64 64
  %272 = load ptr, ptr %271, align 8, !tbaa !40
  call void %272(ptr noundef %270) #9
  call void @otfcc_deleteOptions(ptr noundef nonnull %8) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #9
  br label %273

273:                                              ; preds = %254, %139, %137
  call void @llvm.lifetime.end.p0(i64 800, ptr nonnull %5) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #9
  ret i32 0
}

declare void @time_now(ptr noundef) local_unnamed_addr #4

declare ptr @otfcc_newOptions(...) local_unnamed_addr #4

declare ptr @otfcc_newLogger(ptr noundef) local_unnamed_addr #4

declare ptr @otfcc_newStdErrTarget(...) local_unnamed_addr #4

declare void @otfcc_Options_optimizeTo(ptr noundef, i8 noundef zeroext) local_unnamed_addr #4

; Function Attrs: mustprogress 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) #5

declare i32 @getopt_long(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #6

declare ptr @sdsnew(ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #7

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

declare ptr @sdsempty() local_unnamed_addr #4

declare void @sdsfree(ptr noundef) local_unnamed_addr #4

declare ptr @push_stopwatch(ptr noundef) local_unnamed_addr #4

declare ptr @json_parse(ptr noundef, i64 noundef) local_unnamed_addr #4

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

declare ptr @otfcc_newJsonReader(...) local_unnamed_addr #4

declare void @json_value_free(ptr noundef) local_unnamed_addr #4

declare ptr @otfcc_newOTFWriter(...) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i64 @fwrite(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #2

declare i64 @buflen(ptr noundef) local_unnamed_addr #4

declare void @buffree(ptr noundef) local_unnamed_addr #4

declare void @otfcc_deleteOptions(ptr noundef) local_unnamed_addr #4

attributes #0 = { 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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nofree 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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 #7 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #8 = { 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 #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !12, i64 32}
!10 = !{!"", !11, i64 0, !11, i64 1, !11, i64 2, !11, i64 3, !11, i64 4, !11, i64 5, !11, i64 6, !11, i64 7, !11, i64 8, !11, i64 9, !11, i64 10, !11, i64 11, !11, i64 12, !11, i64 13, !11, i64 14, !11, i64 15, !11, i64 16, !11, i64 17, !11, i64 18, !11, i64 19, !11, i64 20, !11, i64 21, !11, i64 22, !12, i64 24, !12, i64 32}
!11 = !{!"_Bool", !7, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!14, !12, i64 8}
!14 = !{!"otfcc_ILogger", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !12, i64 16}
!18 = !{!"option", !12, i64 0, !6, i64 8, !12, i64 16, !6, i64 24}
!19 = !{!18, !12, i64 0}
!20 = !{!10, !11, i64 2}
!21 = !{!10, !11, i64 5}
!22 = !{!10, !11, i64 6}
!23 = !{!10, !11, i64 9}
!24 = !{!10, !11, i64 15}
!25 = !{!10, !11, i64 14}
!26 = !{!10, !11, i64 1}
!27 = !{!10, !11, i64 7}
!28 = !{!10, !11, i64 16}
!29 = !{!10, !11, i64 18}
!30 = !{!10, !11, i64 19}
!31 = !{!10, !11, i64 8}
!32 = !{!10, !11, i64 11}
!33 = !{!10, !11, i64 12}
!34 = !{!12, !12, i64 0}
!35 = !{!14, !12, i64 80}
!36 = !{i8 0, i8 2}
!37 = !{}
!38 = !{!14, !12, i64 48}
!39 = !{!14, !12, i64 32}
!40 = !{!14, !12, i64 64}
!41 = !{!42, !42, i64 0}
!42 = !{!"long", !7, i64 0}
!43 = !{!44, !12, i64 0}
!44 = !{!"otfcc_IFontBuilder", !12, i64 0, !12, i64 8}
!45 = !{!44, !12, i64 8}
!46 = !{!47, !12, i64 64}
!47 = !{!"__caryll_elementinterface_otfcc_Font", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80}
!48 = !{!49, !12, i64 0}
!49 = !{!"otfcc_IFontSerializer", !12, i64 0, !12, i64 8}
!50 = !{!51, !12, i64 24}
!51 = !{!"caryll_Buffer", !42, i64 0, !42, i64 8, !42, i64 16, !12, i64 24}
!52 = !{!49, !12, i64 8}
!53 = !{!47, !12, i64 56}


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