; LLVM IR from lionsoul2014/friso :: src (friso)

; 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.friso_config_struct = type { i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i32, i32, ptr, ptr, [13 x i8] }
%struct.friso_entry = type { ptr, i32 }

@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [13 x i8], align 1
@stderr = external global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [63 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @friso_init_from_ifile(ptr noundef %0, ptr noundef %1, ptr noundef %2) #1 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca [256 x i8], align 16
  %10 = alloca [128 x i8], align 16
  %11 = alloca ptr, align 8
  %12 = alloca [160 x i8], align 16
  %13 = alloca [160 x i8], align 16
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 256, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 160, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 160, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  store ptr null, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !9
  %21 = load ptr, ptr %7, align 8, !tbaa !5
  %22 = call ptr @strrchr(ptr noundef %21, i32 noundef 47) #8
  store ptr %22, ptr %18, align 8, !tbaa !5
  %23 = icmp ne ptr %22, null
  br i1 %23, label %24, label %32

24:                                               ; preds = %3
  %25 = load ptr, ptr %18, align 8, !tbaa !5
  %26 = load ptr, ptr %7, align 8, !tbaa !5
  %27 = ptrtoint ptr %25 to i64
  %28 = ptrtoint ptr %26 to i64
  %29 = sub i64 %27, %28
  %30 = add nsw i64 %29, 1
  %31 = trunc i64 %30 to i32
  store i32 %31, ptr %19, align 4, !tbaa !9
  br label %32

32:                                               ; preds = %24, %3
  %33 = load ptr, ptr %7, align 8, !tbaa !5
  %34 = call noalias ptr @fopen(ptr noundef %33, ptr noundef @.str.1)
  store ptr %34, ptr %8, align 8, !tbaa !5
  %35 = icmp ne ptr %34, null
  br i1 %35, label %36, label %514

36:                                               ; preds = %32
  br label %37

37:                                               ; preds = %407, %68, %55, %48, %36
  %38 = getelementptr inbounds [256 x i8], ptr %9, i64 0, i64 0
  %39 = load ptr, ptr %8, align 8, !tbaa !5
  %40 = call ptr @file_get_line(ptr noundef %38, ptr noundef %39)
  store ptr %40, ptr %11, align 8, !tbaa !5
  %41 = icmp ne ptr %40, null
  br i1 %41, label %42, label %408

42:                                               ; preds = %37
  %43 = load ptr, ptr %11, align 8, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %43, i64 0
  %45 = load i8, ptr %44, align 1, !tbaa !11
  %46 = sext i8 %45 to i32
  %47 = icmp eq i32 %46, 35
  br i1 %47, label %48, label %49

48:                                               ; preds = %42
  br label %37, !llvm.loop !12

49:                                               ; preds = %42
  %50 = load ptr, ptr %11, align 8, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %50, i64 0
  %52 = load i8, ptr %51, align 1, !tbaa !11
  %53 = sext i8 %52 to i32
  %54 = icmp eq i32 %53, 9
  br i1 %54, label %55, label %56

55:                                               ; preds = %49
  br label %37, !llvm.loop !12

56:                                               ; preds = %49
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i64 0
  %59 = load i8, ptr %58, align 1, !tbaa !11
  %60 = sext i8 %59 to i32
  %61 = icmp eq i32 %60, 32
  br i1 %61, label %68, label %62

62:                                               ; preds = %56
  %63 = load ptr, ptr %11, align 8, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %63, i64 0
  %65 = load i8, ptr %64, align 1, !tbaa !11
  %66 = sext i8 %65 to i32
  %67 = icmp eq i32 %66, 0
  br i1 %67, label %68, label %69

68:                                               ; preds = %62, %56
  br label %37, !llvm.loop !12

69:                                               ; preds = %62
  %70 = load ptr, ptr %11, align 8, !tbaa !5
  %71 = call i64 @strlen(ptr noundef %70) #8
  %72 = trunc i64 %71 to i32
  store i32 %72, ptr %17, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %73

73:                                               ; preds = %111, %69
  %74 = load i32, ptr %14, align 4, !tbaa !9
  %75 = load i32, ptr %17, align 4, !tbaa !9
  %76 = icmp ult i32 %74, %75
  br i1 %76, label %77, label %114

77:                                               ; preds = %73
  %78 = load ptr, ptr %11, align 8, !tbaa !5
  %79 = load i32, ptr %14, align 4, !tbaa !9
  %80 = zext i32 %79 to i64
  %81 = getelementptr inbounds i8, ptr %78, i64 %80
  %82 = load i8, ptr %81, align 1, !tbaa !11
  %83 = sext i8 %82 to i32
  %84 = icmp eq i32 %83, 32
  br i1 %84, label %101, label %85

85:                                               ; preds = %77
  %86 = load ptr, ptr %11, align 8, !tbaa !5
  %87 = load i32, ptr %14, align 4, !tbaa !9
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds i8, ptr %86, i64 %88
  %90 = load i8, ptr %89, align 1, !tbaa !11
  %91 = sext i8 %90 to i32
  %92 = icmp eq i32 %91, 9
  br i1 %92, label %101, label %93

93:                                               ; preds = %85
  %94 = load ptr, ptr %11, align 8, !tbaa !5
  %95 = load i32, ptr %14, align 4, !tbaa !9
  %96 = zext i32 %95 to i64
  %97 = getelementptr inbounds i8, ptr %94, i64 %96
  %98 = load i8, ptr %97, align 1, !tbaa !11
  %99 = sext i8 %98 to i32
  %100 = icmp eq i32 %99, 61
  br i1 %100, label %101, label %102

101:                                              ; preds = %93, %85, %77
  br label %114

102:                                              ; preds = %93
  %103 = load ptr, ptr %11, align 8, !tbaa !5
  %104 = load i32, ptr %14, align 4, !tbaa !9
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds i8, ptr %103, i64 %105
  %107 = load i8, ptr %106, align 1, !tbaa !11
  %108 = load i32, ptr %14, align 4, !tbaa !9
  %109 = zext i32 %108 to i64
  %110 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 %109
  store i8 %107, ptr %110, align 1, !tbaa !11
  br label %111

111:                                              ; preds = %102
  %112 = load i32, ptr %14, align 4, !tbaa !9
  %113 = add i32 %112, 1
  store i32 %113, ptr %14, align 4, !tbaa !9
  br label %73, !llvm.loop !14

114:                                              ; preds = %101, %73
  %115 = load i32, ptr %14, align 4, !tbaa !9
  %116 = zext i32 %115 to i64
  %117 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 %116
  store i8 0, ptr %117, align 1, !tbaa !11
  %118 = load ptr, ptr %11, align 8, !tbaa !5
  %119 = load i32, ptr %14, align 4, !tbaa !9
  %120 = zext i32 %119 to i64
  %121 = getelementptr inbounds i8, ptr %118, i64 %120
  %122 = load i8, ptr %121, align 1, !tbaa !11
  %123 = sext i8 %122 to i32
  %124 = icmp eq i32 %123, 32
  br i1 %124, label %133, label %125

125:                                              ; preds = %114
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = load i32, ptr %14, align 4, !tbaa !9
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds i8, ptr %126, i64 %128
  %130 = load i8, ptr %129, align 1, !tbaa !11
  %131 = sext i8 %130 to i32
  %132 = icmp eq i32 %131, 9
  br i1 %132, label %133, label %154

133:                                              ; preds = %125, %114
  %134 = load i32, ptr %14, align 4, !tbaa !9
  %135 = add i32 %134, 1
  store i32 %135, ptr %14, align 4, !tbaa !9
  br label %136

136:                                              ; preds = %150, %133
  %137 = load i32, ptr %14, align 4, !tbaa !9
  %138 = load i32, ptr %17, align 4, !tbaa !9
  %139 = icmp ult i32 %137, %138
  br i1 %139, label %140, label %153

140:                                              ; preds = %136
  %141 = load ptr, ptr %11, align 8, !tbaa !5
  %142 = load i32, ptr %14, align 4, !tbaa !9
  %143 = zext i32 %142 to i64
  %144 = getelementptr inbounds i8, ptr %141, i64 %143
  %145 = load i8, ptr %144, align 1, !tbaa !11
  %146 = sext i8 %145 to i32
  %147 = icmp eq i32 %146, 61
  br i1 %147, label %148, label %149

148:                                              ; preds = %140
  br label %153

149:                                              ; preds = %140
  br label %150

150:                                              ; preds = %149
  %151 = load i32, ptr %14, align 4, !tbaa !9
  %152 = add i32 %151, 1
  store i32 %152, ptr %14, align 4, !tbaa !9
  br label %136, !llvm.loop !15

153:                                              ; preds = %148, %136
  br label %154

154:                                              ; preds = %153, %125
  %155 = load i32, ptr %14, align 4, !tbaa !9
  %156 = add i32 %155, 1
  store i32 %156, ptr %14, align 4, !tbaa !9
  br label %157

157:                                              ; preds = %182, %154
  %158 = load i32, ptr %14, align 4, !tbaa !9
  %159 = load i32, ptr %17, align 4, !tbaa !9
  %160 = icmp ult i32 %158, %159
  br i1 %160, label %161, label %179

161:                                              ; preds = %157
  %162 = load ptr, ptr %11, align 8, !tbaa !5
  %163 = load i32, ptr %14, align 4, !tbaa !9
  %164 = zext i32 %163 to i64
  %165 = getelementptr inbounds i8, ptr %162, i64 %164
  %166 = load i8, ptr %165, align 1, !tbaa !11
  %167 = sext i8 %166 to i32
  %168 = icmp eq i32 %167, 32
  br i1 %168, label %177, label %169

169:                                              ; preds = %161
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = load i32, ptr %14, align 4, !tbaa !9
  %172 = zext i32 %171 to i64
  %173 = getelementptr inbounds i8, ptr %170, i64 %172
  %174 = load i8, ptr %173, align 1, !tbaa !11
  %175 = sext i8 %174 to i32
  %176 = icmp eq i32 %175, 9
  br label %177

177:                                              ; preds = %169, %161
  %178 = phi i1 [ true, %161 ], [ %176, %169 ]
  br label %179

179:                                              ; preds = %177, %157
  %180 = phi i1 [ false, %157 ], [ %178, %177 ]
  br i1 %180, label %181, label %185

181:                                              ; preds = %179
  br label %182

182:                                              ; preds = %181
  %183 = load i32, ptr %14, align 4, !tbaa !9
  %184 = add i32 %183, 1
  store i32 %184, ptr %14, align 4, !tbaa !9
  br label %157, !llvm.loop !16

185:                                              ; preds = %179
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %186

186:                                              ; preds = %217, %185
  %187 = load i32, ptr %14, align 4, !tbaa !9
  %188 = load i32, ptr %17, align 4, !tbaa !9
  %189 = icmp ult i32 %187, %188
  br i1 %189, label %190, label %222

190:                                              ; preds = %186
  %191 = load ptr, ptr %11, align 8, !tbaa !5
  %192 = load i32, ptr %14, align 4, !tbaa !9
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds i8, ptr %191, i64 %193
  %195 = load i8, ptr %194, align 1, !tbaa !11
  %196 = sext i8 %195 to i32
  %197 = icmp eq i32 %196, 32
  br i1 %197, label %206, label %198

198:                                              ; preds = %190
  %199 = load ptr, ptr %11, align 8, !tbaa !5
  %200 = load i32, ptr %14, align 4, !tbaa !9
  %201 = zext i32 %200 to i64
  %202 = getelementptr inbounds i8, ptr %199, i64 %201
  %203 = load i8, ptr %202, align 1, !tbaa !11
  %204 = sext i8 %203 to i32
  %205 = icmp eq i32 %204, 9
  br i1 %205, label %206, label %207

206:                                              ; preds = %198, %190
  br label %222

207:                                              ; preds = %198
  %208 = load ptr, ptr %11, align 8, !tbaa !5
  %209 = load i32, ptr %14, align 4, !tbaa !9
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds i8, ptr %208, i64 %210
  %212 = load i8, ptr %211, align 1, !tbaa !11
  %213 = load ptr, ptr %11, align 8, !tbaa !5
  %214 = load i32, ptr %15, align 4, !tbaa !9
  %215 = zext i32 %214 to i64
  %216 = getelementptr inbounds i8, ptr %213, i64 %215
  store i8 %212, ptr %216, align 1, !tbaa !11
  br label %217

217:                                              ; preds = %207
  %218 = load i32, ptr %14, align 4, !tbaa !9
  %219 = add i32 %218, 1
  store i32 %219, ptr %14, align 4, !tbaa !9
  %220 = load i32, ptr %15, align 4, !tbaa !9
  %221 = add i32 %220, 1
  store i32 %221, ptr %15, align 4, !tbaa !9
  br label %186, !llvm.loop !17

222:                                              ; preds = %206, %186
  %223 = load ptr, ptr %11, align 8, !tbaa !5
  %224 = load i32, ptr %15, align 4, !tbaa !9
  %225 = zext i32 %224 to i64
  %226 = getelementptr inbounds i8, ptr %223, i64 %225
  store i8 0, ptr %226, align 1, !tbaa !11
  %227 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %228 = call i32 @strcmp(ptr noundef %227, ptr noundef @.str.2) #8
  %229 = icmp eq i32 %228, 0
  br i1 %229, label %230, label %256

230:                                              ; preds = %222
  %231 = load i32, ptr %16, align 4, !tbaa !9
  %232 = icmp eq i32 %231, 0
  br i1 %232, label %233, label %255

233:                                              ; preds = %230
  %234 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %234, ptr %16, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %248, %233
  %236 = load i32, ptr %15, align 4, !tbaa !9
  %237 = load i32, ptr %16, align 4, !tbaa !9
  %238 = icmp ult i32 %236, %237
  br i1 %238, label %239, label %251

239:                                              ; preds = %235
  %240 = load ptr, ptr %11, align 8, !tbaa !5
  %241 = load i32, ptr %15, align 4, !tbaa !9
  %242 = zext i32 %241 to i64
  %243 = getelementptr inbounds i8, ptr %240, i64 %242
  %244 = load i8, ptr %243, align 1, !tbaa !11
  %245 = load i32, ptr %15, align 4, !tbaa !9
  %246 = zext i32 %245 to i64
  %247 = getelementptr inbounds [160 x i8], ptr %12, i64 0, i64 %246
  store i8 %244, ptr %247, align 1, !tbaa !11
  br label %248

248:                                              ; preds = %239
  %249 = load i32, ptr %15, align 4, !tbaa !9
  %250 = add i32 %249, 1
  store i32 %250, ptr %15, align 4, !tbaa !9
  br label %235, !llvm.loop !18

251:                                              ; preds = %235
  %252 = load i32, ptr %15, align 4, !tbaa !9
  %253 = zext i32 %252 to i64
  %254 = getelementptr inbounds [160 x i8], ptr %12, i64 0, i64 %253
  store i8 0, ptr %254, align 1, !tbaa !11
  br label %255

255:                                              ; preds = %251, %230
  br label %407

256:                                              ; preds = %222
  %257 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %258 = call i32 @strcmp(ptr noundef %257, ptr noundef @.str.3) #8
  %259 = icmp eq i32 %258, 0
  br i1 %259, label %260, label %266

260:                                              ; preds = %256
  %261 = load ptr, ptr %11, align 8, !tbaa !5
  %262 = call i32 @atoi(ptr noundef %261) #8
  %263 = trunc i32 %262 to i16
  %264 = load ptr, ptr %6, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.friso_config_struct, ptr %264, i32 0, i32 0
  store i16 %263, ptr %265, align 8, !tbaa !19
  br label %406

266:                                              ; preds = %256
  %267 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %268 = call i32 @strcmp(ptr noundef %267, ptr noundef @.str.4) #8
  %269 = icmp eq i32 %268, 0
  br i1 %269, label %270, label %276

270:                                              ; preds = %266
  %271 = load ptr, ptr %11, align 8, !tbaa !5
  %272 = call i32 @atoi(ptr noundef %271) #8
  %273 = trunc i32 %272 to i16
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.friso_config_struct, ptr %274, i32 0, i32 1
  store i16 %273, ptr %275, align 2, !tbaa !22
  br label %405

276:                                              ; preds = %266
  %277 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %278 = call i32 @strcmp(ptr noundef %277, ptr noundef @.str.5) #8
  %279 = icmp eq i32 %278, 0
  br i1 %279, label %280, label %286

280:                                              ; preds = %276
  %281 = load ptr, ptr %11, align 8, !tbaa !5
  %282 = call i32 @atoi(ptr noundef %281) #8
  %283 = trunc i32 %282 to i16
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.friso_config_struct, ptr %284, i32 0, i32 2
  store i16 %283, ptr %285, align 4, !tbaa !23
  br label %404

286:                                              ; preds = %276
  %287 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %288 = call i32 @strcmp(ptr noundef %287, ptr noundef @.str.6) #8
  %289 = icmp eq i32 %288, 0
  br i1 %289, label %290, label %296

290:                                              ; preds = %286
  %291 = load ptr, ptr %11, align 8, !tbaa !5
  %292 = call i32 @atoi(ptr noundef %291) #8
  %293 = trunc i32 %292 to i16
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.friso_config_struct, ptr %294, i32 0, i32 3
  store i16 %293, ptr %295, align 2, !tbaa !24
  br label %403

296:                                              ; preds = %286
  %297 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %298 = call i32 @strcmp(ptr noundef %297, ptr noundef @.str.7) #8
  %299 = icmp eq i32 %298, 0
  br i1 %299, label %300, label %306

300:                                              ; preds = %296
  %301 = load ptr, ptr %11, align 8, !tbaa !5
  %302 = call i32 @atoi(ptr noundef %301) #8
  %303 = trunc i32 %302 to i16
  %304 = load ptr, ptr %6, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.friso_config_struct, ptr %304, i32 0, i32 4
  store i16 %303, ptr %305, align 8, !tbaa !25
  br label %402

306:                                              ; preds = %296
  %307 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %308 = call i32 @strcmp(ptr noundef %307, ptr noundef @.str.8) #8
  %309 = icmp eq i32 %308, 0
  br i1 %309, label %310, label %316

310:                                              ; preds = %306
  %311 = load ptr, ptr %11, align 8, !tbaa !5
  %312 = call i32 @atoi(ptr noundef %311) #8
  %313 = trunc i32 %312 to i16
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.friso_config_struct, ptr %314, i32 0, i32 5
  store i16 %313, ptr %315, align 2, !tbaa !26
  br label %401

316:                                              ; preds = %306
  %317 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %318 = call i32 @strcmp(ptr noundef %317, ptr noundef @.str.9) #8
  %319 = icmp eq i32 %318, 0
  br i1 %319, label %320, label %326

320:                                              ; preds = %316
  %321 = load ptr, ptr %11, align 8, !tbaa !5
  %322 = call i32 @atoi(ptr noundef %321) #8
  %323 = trunc i32 %322 to i16
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.friso_config_struct, ptr %324, i32 0, i32 6
  store i16 %323, ptr %325, align 4, !tbaa !27
  br label %400

326:                                              ; preds = %316
  %327 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %328 = call i32 @strcmp(ptr noundef %327, ptr noundef @.str.10) #8
  %329 = icmp eq i32 %328, 0
  br i1 %329, label %330, label %336

330:                                              ; preds = %326
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = call i32 @atoi(ptr noundef %331) #8
  %333 = trunc i32 %332 to i16
  %334 = load ptr, ptr %6, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.friso_config_struct, ptr %334, i32 0, i32 7
  store i16 %333, ptr %335, align 2, !tbaa !28
  br label %399

336:                                              ; preds = %326
  %337 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %338 = call i32 @strcmp(ptr noundef %337, ptr noundef @.str.11) #8
  %339 = icmp eq i32 %338, 0
  br i1 %339, label %340, label %345

340:                                              ; preds = %336
  %341 = load ptr, ptr %11, align 8, !tbaa !5
  %342 = call i32 @atoi(ptr noundef %341) #8
  %343 = load ptr, ptr %6, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.friso_config_struct, ptr %343, i32 0, i32 10
  store i32 %342, ptr %344, align 4, !tbaa !29
  br label %398

345:                                              ; preds = %336
  %346 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %347 = call i32 @strcmp(ptr noundef %346, ptr noundef @.str.12) #8
  %348 = icmp eq i32 %347, 0
  br i1 %348, label %349, label %353

349:                                              ; preds = %345
  %350 = load ptr, ptr %6, align 8, !tbaa !5
  %351 = load ptr, ptr %11, align 8, !tbaa !5
  %352 = call i32 @atoi(ptr noundef %351) #8
  call void @friso_set_mode(ptr noundef %350, i32 noundef %352)
  br label %397

353:                                              ; preds = %345
  %354 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %355 = call i32 @strcmp(ptr noundef %354, ptr noundef @.str.13) #8
  %356 = icmp eq i32 %355, 0
  br i1 %356, label %357, label %362

357:                                              ; preds = %353
  %358 = load ptr, ptr %11, align 8, !tbaa !5
  %359 = call i32 @atoi(ptr noundef %358) #8
  %360 = load ptr, ptr %5, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.friso_entry, ptr %360, i32 0, i32 1
  store i32 %359, ptr %361, align 8, !tbaa !30
  br label %396

362:                                              ; preds = %353
  %363 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %364 = call i32 @strcmp(ptr noundef %363, ptr noundef @.str.14) #8
  %365 = icmp eq i32 %364, 0
  br i1 %365, label %366, label %372

366:                                              ; preds = %362
  %367 = load ptr, ptr %11, align 8, !tbaa !5
  %368 = call i32 @atoi(ptr noundef %367) #8
  %369 = trunc i32 %368 to i16
  %370 = load ptr, ptr %6, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.friso_config_struct, ptr %370, i32 0, i32 8
  store i16 %369, ptr %371, align 8, !tbaa !32
  br label %395

372:                                              ; preds = %362
  %373 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %374 = call i32 @strcmp(ptr noundef %373, ptr noundef @.str.15) #8
  %375 = icmp eq i32 %374, 0
  br i1 %375, label %376, label %382

376:                                              ; preds = %372
  %377 = load ptr, ptr %11, align 8, !tbaa !5
  %378 = call i32 @atoi(ptr noundef %377) #8
  %379 = trunc i32 %378 to i16
  %380 = load ptr, ptr %6, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.friso_config_struct, ptr %380, i32 0, i32 9
  store i16 %379, ptr %381, align 2, !tbaa !33
  br label %394

382:                                              ; preds = %372
  %383 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %384 = call i32 @strcmp(ptr noundef %383, ptr noundef @.str.16) #8
  %385 = icmp eq i32 %384, 0
  br i1 %385, label %386, label %393

386:                                              ; preds = %382
  %387 = load ptr, ptr %6, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.friso_config_struct, ptr %387, i32 0, i32 14
  %389 = getelementptr inbounds [13 x i8], ptr %388, i64 0, i64 0
  %390 = load ptr, ptr %11, align 8, !tbaa !5
  %391 = load i32, ptr %15, align 4, !tbaa !9
  %392 = zext i32 %391 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %389, ptr align 1 %390, i64 %392, i1 false)
  br label %393

393:                                              ; preds = %386, %382
  br label %394

394:                                              ; preds = %393, %376
  br label %395

395:                                              ; preds = %394, %366
  br label %396

396:                                              ; preds = %395, %357
  br label %397

397:                                              ; preds = %396, %349
  br label %398

398:                                              ; preds = %397, %340
  br label %399

399:                                              ; preds = %398, %330
  br label %400

400:                                              ; preds = %399, %320
  br label %401

401:                                              ; preds = %400, %310
  br label %402

402:                                              ; preds = %401, %300
  br label %403

403:                                              ; preds = %402, %290
  br label %404

404:                                              ; preds = %403, %280
  br label %405

405:                                              ; preds = %404, %270
  br label %406

406:                                              ; preds = %405, %260
  br label %407

407:                                              ; preds = %406, %255
  br label %37, !llvm.loop !12

408:                                              ; preds = %37
  %409 = load i32, ptr %16, align 4, !tbaa !9
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %411, label %508

411:                                              ; preds = %408
  %412 = getelementptr inbounds [160 x i8], ptr %12, i64 0, i64 0
  %413 = load i8, ptr %412, align 16, !tbaa !11
  %414 = sext i8 %413 to i32
  %415 = icmp ne i32 %414, 47
  br i1 %415, label %416, label %466

416:                                              ; preds = %411
  %417 = load i32, ptr %19, align 4, !tbaa !9
  %418 = icmp ne i32 %417, 0
  br i1 %418, label %419, label %466

419:                                              ; preds = %416
  %420 = load i32, ptr %19, align 4, !tbaa !9
  %421 = load i32, ptr %16, align 4, !tbaa !9
  %422 = add i32 %420, %421
  %423 = zext i32 %422 to i64
  %424 = icmp ugt i64 %423, 159
  br i1 %424, label %425, label %433

425:                                              ; preds = %419
  %426 = load ptr, ptr @stderr, align 8, !tbaa !5
  %427 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %426, ptr noundef @.str.17) #7
  %428 = load ptr, ptr @stderr, align 8, !tbaa !5
  %429 = load i32, ptr %19, align 4, !tbaa !9
  %430 = load i32, ptr %16, align 4, !tbaa !9
  %431 = add i32 %429, %430
  %432 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %428, ptr noundef @.str.18, i32 noundef %431) #7
  store i32 0, ptr %4, align 4
  store i32 1, ptr %20, align 4
  br label %515

433:                                              ; preds = %419
  %434 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 0
  %435 = load ptr, ptr %7, align 8, !tbaa !5
  %436 = load i32, ptr %19, align 4, !tbaa !9
  %437 = zext i32 %436 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %434, ptr align 1 %435, i64 %437, i1 false)
  %438 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 0
  %439 = load i32, ptr %19, align 4, !tbaa !9
  %440 = zext i32 %439 to i64
  %441 = getelementptr inbounds i8, ptr %438, i64 %440
  %442 = getelementptr inbounds [160 x i8], ptr %12, i64 0, i64 0
  %443 = load i32, ptr %16, align 4, !tbaa !9
  %444 = sub i32 %443, 1
  %445 = zext i32 %444 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %441, ptr align 16 %442, i64 %445, i1 false)
  %446 = load i32, ptr %19, align 4, !tbaa !9
  %447 = load i32, ptr %16, align 4, !tbaa !9
  %448 = add i32 %446, %447
  %449 = sub i32 %448, 1
  store i32 %449, ptr %19, align 4, !tbaa !9
  %450 = load i32, ptr %19, align 4, !tbaa !9
  %451 = sub i32 %450, 1
  %452 = zext i32 %451 to i64
  %453 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 %452
  %454 = load i8, ptr %453, align 1, !tbaa !11
  %455 = sext i8 %454 to i32
  %456 = icmp ne i32 %455, 47
  br i1 %456, label %457, label %461

457:                                              ; preds = %433
  %458 = load i32, ptr %19, align 4, !tbaa !9
  %459 = zext i32 %458 to i64
  %460 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 %459
  store i8 47, ptr %460, align 1, !tbaa !11
  br label %461

461:                                              ; preds = %457, %433
  %462 = load i32, ptr %19, align 4, !tbaa !9
  %463 = add i32 %462, 1
  %464 = zext i32 %463 to i64
  %465 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 %464
  store i8 0, ptr %465, align 1, !tbaa !11
  br label %490

466:                                              ; preds = %416, %411
  %467 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 0
  %468 = getelementptr inbounds [160 x i8], ptr %12, i64 0, i64 0
  %469 = load i32, ptr %16, align 4, !tbaa !9
  %470 = zext i32 %469 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %467, ptr align 16 %468, i64 %470, i1 false)
  %471 = load i32, ptr %16, align 4, !tbaa !9
  %472 = zext i32 %471 to i64
  %473 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 %472
  store i8 0, ptr %473, align 1, !tbaa !11
  %474 = load i32, ptr %16, align 4, !tbaa !9
  %475 = sub i32 %474, 1
  %476 = zext i32 %475 to i64
  %477 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 %476
  %478 = load i8, ptr %477, align 1, !tbaa !11
  %479 = sext i8 %478 to i32
  %480 = icmp ne i32 %479, 47
  br i1 %480, label %481, label %489

481:                                              ; preds = %466
  %482 = load i32, ptr %16, align 4, !tbaa !9
  %483 = zext i32 %482 to i64
  %484 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 %483
  store i8 47, ptr %484, align 1, !tbaa !11
  %485 = load i32, ptr %16, align 4, !tbaa !9
  %486 = add i32 %485, 1
  %487 = zext i32 %486 to i64
  %488 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 %487
  store i8 0, ptr %488, align 1, !tbaa !11
  br label %489

489:                                              ; preds = %481, %466
  br label %490

490:                                              ; preds = %489, %461
  %491 = call ptr @friso_dic_new()
  %492 = load ptr, ptr %5, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.friso_entry, ptr %492, i32 0, i32 0
  store ptr %491, ptr %493, align 8, !tbaa !34
  %494 = load ptr, ptr %5, align 8, !tbaa !5
  %495 = load ptr, ptr %6, align 8, !tbaa !5
  %496 = getelementptr inbounds [160 x i8], ptr %13, i64 0, i64 0
  %497 = load ptr, ptr %6, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.friso_config_struct, ptr %497, i32 0, i32 0
  %499 = load i16, ptr %498, align 8, !tbaa !19
  %500 = zext i16 %499 to i32
  %501 = load ptr, ptr %5, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.friso_entry, ptr %501, i32 0, i32 1
  %503 = load i32, ptr %502, align 8, !tbaa !30
  %504 = icmp eq i32 %503, 0
  %505 = zext i1 %504 to i64
  %506 = select i1 %504, i32 3, i32 2
  %507 = mul nsw i32 %500, %506
  call void @friso_dic_load_from_ifile(ptr noundef %494, ptr noundef %495, ptr noundef %496, i32 noundef %507)
  br label %511

508:                                              ; preds = %408
  %509 = load ptr, ptr @stderr, align 8, !tbaa !5
  %510 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %509, ptr noundef @.str.19) #7
  store i32 0, ptr %4, align 4
  store i32 1, ptr %20, align 4
  br label %515

511:                                              ; preds = %490
  %512 = load ptr, ptr %8, align 8, !tbaa !5
  %513 = call i32 @fclose(ptr noundef %512)
  store i32 1, ptr %4, align 4
  store i32 1, ptr %20, align 4
  br label %515

514:                                              ; preds = %32
  store i32 0, ptr %4, align 4
  store i32 1, ptr %20, align 4
  br label %515

515:                                              ; preds = %514, %511, %508, %425
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 160, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 160, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 256, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  %516 = load i32, ptr %4, align 4
  ret i32 %516
}

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

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

declare ptr @file_get_line(ptr noundef, ptr noundef) #3

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #2

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @friso_set_mode(ptr noundef, i32 noundef) #1

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #6

declare ptr @friso_dic_new() #3

declare void @friso_dic_load_from_ifile(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #3

declare i32 @fclose(ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}
!19 = !{!20, !21, i64 0}
!20 = !{!"friso_config_struct", !21, i64 0, !21, i64 2, !21, i64 4, !21, i64 6, !21, i64 8, !21, i64 10, !21, i64 12, !21, i64 14, !21, i64 16, !21, i64 18, !10, i64 20, !10, i64 24, !6, i64 32, !6, i64 40, !7, i64 48}
!21 = !{!"short", !7, i64 0}
!22 = !{!20, !21, i64 2}
!23 = !{!20, !21, i64 4}
!24 = !{!20, !21, i64 6}
!25 = !{!20, !21, i64 8}
!26 = !{!20, !21, i64 10}
!27 = !{!20, !21, i64 12}
!28 = !{!20, !21, i64 14}
!29 = !{!20, !10, i64 20}
!30 = !{!31, !10, i64 8}
!31 = !{!"", !6, i64 0, !10, i64 8}
!32 = !{!20, !21, i64 16}
!33 = !{!20, !21, i64 18}
!34 = !{!31, !6, i64 0}


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

@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [13 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [63 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @friso_init_from_ifile(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #1 {
  %4 = alloca [256 x i8], align 16
  %5 = alloca [128 x i8], align 16
  %6 = alloca [160 x i8], align 16
  %7 = ptrtoint ptr %6 to i64
  %8 = alloca [160 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %8) #8
  %9 = tail call ptr @strrchr(ptr noundef nonnull dereferenceable(1) %2, i32 noundef 47) #9
  %.not = icmp eq ptr %9, null
  %10 = ptrtoint ptr %9 to i64
  %11 = ptrtoint ptr %2 to i64
  %12 = sub i64 %10, %11
  %13 = trunc i64 %12 to i32
  %14 = add i32 %13, 1
  %.0 = select i1 %.not, i32 0, i32 %14
  %15 = tail call noalias ptr @fopen(ptr noundef %2, ptr noundef nonnull @.str.1)
  %.not136 = icmp eq ptr %15, null
  br i1 %.not136, label %229, label %.preheader141

.preheader141:                                    ; preds = %3
  %16 = call ptr @file_get_line(ptr noundef nonnull %4, ptr noundef nonnull %15) #8
  %.not137143176 = icmp eq ptr %16, null
  br i1 %.not137143176, label %.outer._crit_edge.thread, label %.lr.ph.lr.ph

.lr.ph.lr.ph:                                     ; preds = %.preheader141
  %17 = getelementptr inbounds i8, ptr %1, i64 48
  %18 = getelementptr inbounds i8, ptr %1, i64 18
  %19 = getelementptr inbounds i8, ptr %1, i64 16
  %20 = getelementptr inbounds i8, ptr %0, i64 8
  %21 = getelementptr inbounds i8, ptr %1, i64 20
  %22 = getelementptr inbounds i8, ptr %1, i64 14
  %23 = getelementptr inbounds i8, ptr %1, i64 12
  %24 = getelementptr inbounds i8, ptr %1, i64 10
  %25 = getelementptr inbounds i8, ptr %1, i64 8
  %26 = getelementptr inbounds i8, ptr %1, i64 6
  %27 = getelementptr inbounds i8, ptr %1, i64 4
  %28 = getelementptr inbounds i8, ptr %1, i64 2
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.lr.ph, %.outer
  %29 = phi ptr [ %16, %.lr.ph.lr.ph ], [ %181, %.outer ]
  %.0123.ph177 = phi i32 [ 0, %.lr.ph.lr.ph ], [ %.1, %.outer ]
  br label %30

30:                                               ; preds = %.lr.ph, %.backedge
  %31 = phi ptr [ %29, %.lr.ph ], [ %33, %.backedge ]
  %32 = load i8, ptr %31, align 1, !tbaa !5
  switch i8 %32, label %34 [
    i8 35, label %.backedge
    i8 9, label %.backedge
    i8 32, label %.backedge
    i8 0, label %.backedge
  ]

.backedge:                                        ; preds = %30, %30, %30, %30
  %33 = call ptr @file_get_line(ptr noundef nonnull %4, ptr noundef nonnull %15) #8
  %.not137 = icmp eq ptr %33, null
  br i1 %.not137, label %.outer._crit_edge, label %30, !llvm.loop !8

34:                                               ; preds = %30
  %.lcssa225 = ptrtoint ptr %31 to i64
  %35 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %31) #9
  %36 = trunc i64 %35 to i32
  %.not179 = icmp eq i32 %36, 0
  br i1 %.not179, label %._crit_edge148, label %.lr.ph147.preheader

.lr.ph147.preheader:                              ; preds = %34
  %wide.trip.count = and i64 %35, 4294967295
  br label %.lr.ph147

.lr.ph147:                                        ; preds = %.lr.ph147.preheader, %39
  %indvars.iv = phi i64 [ 0, %.lr.ph147.preheader ], [ %indvars.iv.next, %39 ]
  %37 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv
  %38 = load i8, ptr %37, align 1, !tbaa !5
  switch i8 %38, label %39 [
    i8 32, label %._crit_edge148.loopexit.split.loop.exit
    i8 9, label %._crit_edge148.loopexit.split.loop.exit
    i8 61, label %._crit_edge148.loopexit.split.loop.exit
  ]

39:                                               ; preds = %.lr.ph147
  %40 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 %indvars.iv
  store i8 %38, ptr %40, align 1, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge148, label %.lr.ph147, !llvm.loop !10

._crit_edge148.loopexit.split.loop.exit:          ; preds = %.lr.ph147, %.lr.ph147, %.lr.ph147
  %41 = trunc nuw i64 %indvars.iv to i32
  br label %._crit_edge148

._crit_edge148:                                   ; preds = %39, %._crit_edge148.loopexit.split.loop.exit, %34
  %.0126.lcssa = phi i32 [ 0, %34 ], [ %41, %._crit_edge148.loopexit.split.loop.exit ], [ %36, %39 ]
  %42 = zext i32 %.0126.lcssa to i64
  %43 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 %42
  store i8 0, ptr %43, align 1, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %31, i64 %42
  %45 = load i8, ptr %44, align 1, !tbaa !5
  switch i8 %45, label %.loopexit [
    i8 32, label %46
    i8 9, label %46
  ]

46:                                               ; preds = %._crit_edge148, %._crit_edge148
  %47 = add i32 %.0126.lcssa, 1
  %umax = call i32 @llvm.umax.i32(i32 %47, i32 %36)
  br label %48

48:                                               ; preds = %50, %46
  %.1127.in = phi i32 [ %.0126.lcssa, %46 ], [ %.1127, %50 ]
  %.1127 = add i32 %.1127.in, 1
  %49 = icmp ult i32 %.1127, %36
  br i1 %49, label %50, label %.loopexit

50:                                               ; preds = %48
  %51 = zext i32 %.1127 to i64
  %52 = getelementptr inbounds i8, ptr %31, i64 %51
  %53 = load i8, ptr %52, align 1, !tbaa !5
  %54 = icmp eq i8 %53, 61
  br i1 %54, label %.loopexit, label %48, !llvm.loop !11

.loopexit:                                        ; preds = %48, %50, %._crit_edge148
  %.2 = phi i32 [ %.0126.lcssa, %._crit_edge148 ], [ %umax, %48 ], [ %.1127, %50 ]
  %.3156 = add i32 %.2, 1
  %55 = icmp ult i32 %.3156, %36
  br i1 %55, label %.lr.ph159.preheader, label %.critedge

.lr.ph159.preheader:                              ; preds = %.loopexit
  %56 = zext i32 %.3156 to i64
  br label %.lr.ph159

.lr.ph159:                                        ; preds = %.lr.ph159.preheader, %.critedge2
  %indvars.iv186 = phi i64 [ %56, %.lr.ph159.preheader ], [ %indvars.iv.next187, %.critedge2 ]
  %57 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv186
  %58 = load i8, ptr %57, align 1, !tbaa !5
  switch i8 %58, label %.critedge.loopexit [
    i8 32, label %.critedge2
    i8 9, label %.critedge2
  ]

.critedge2:                                       ; preds = %.lr.ph159, %.lr.ph159
  %indvars.iv.next187 = add nuw nsw i64 %indvars.iv186, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next187 to i32
  %exitcond189.not = icmp eq i32 %lftr.wideiv, %36
  br i1 %exitcond189.not, label %._crit_edge166, label %.lr.ph159, !llvm.loop !12

.critedge.loopexit:                               ; preds = %.lr.ph159
  %59 = trunc nuw i64 %indvars.iv186 to i32
  br label %.critedge

.critedge:                                        ; preds = %.critedge.loopexit, %.loopexit
  %.3.lcssa = phi i32 [ %.3156, %.loopexit ], [ %59, %.critedge.loopexit ]
  %60 = icmp ult i32 %.3.lcssa, %36
  br i1 %60, label %.lr.ph165.preheader, label %._crit_edge166

.lr.ph165.preheader:                              ; preds = %.critedge
  %61 = zext i32 %.3.lcssa to i64
  %62 = sub i32 %36, %.3.lcssa
  br label %.lr.ph165

.lr.ph165:                                        ; preds = %.lr.ph165.preheader, %65
  %indvars.iv192 = phi i64 [ %61, %.lr.ph165.preheader ], [ %indvars.iv.next193, %65 ]
  %indvars.iv190 = phi i64 [ 0, %.lr.ph165.preheader ], [ %indvars.iv.next191, %65 ]
  %63 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv192
  %64 = load i8, ptr %63, align 1, !tbaa !5
  switch i8 %64, label %65 [
    i8 32, label %._crit_edge166.loopexit.split.loop.exit
    i8 9, label %._crit_edge166.loopexit.split.loop.exit
  ]

65:                                               ; preds = %.lr.ph165
  %66 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv190
  store i8 %64, ptr %66, align 1, !tbaa !5
  %indvars.iv.next193 = add nuw nsw i64 %indvars.iv192, 1
  %indvars.iv.next191 = add nuw nsw i64 %indvars.iv190, 1
  %lftr.wideiv197 = trunc i64 %indvars.iv.next191 to i32
  %exitcond198.not = icmp eq i32 %62, %lftr.wideiv197
  br i1 %exitcond198.not, label %._crit_edge166, label %.lr.ph165, !llvm.loop !13

._crit_edge166.loopexit.split.loop.exit:          ; preds = %.lr.ph165, %.lr.ph165
  %67 = trunc nuw i64 %indvars.iv190 to i32
  br label %._crit_edge166

._crit_edge166:                                   ; preds = %.critedge2, %65, %._crit_edge166.loopexit.split.loop.exit, %.critedge
  %.0124.lcssa = phi i32 [ 0, %.critedge ], [ %67, %._crit_edge166.loopexit.split.loop.exit ], [ %62, %65 ], [ 0, %.critedge2 ]
  %68 = zext i32 %.0124.lcssa to i64
  %69 = getelementptr inbounds i8, ptr %31, i64 %68
  store i8 0, ptr %69, align 1, !tbaa !5
  %70 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.2) #9
  %71 = icmp eq i32 %70, 0
  br i1 %71, label %72, label %102

72:                                               ; preds = %._crit_edge166
  %73 = icmp eq i32 %.0123.ph177, 0
  br i1 %73, label %.preheader, label %.outer

.preheader:                                       ; preds = %72
  %.not180 = icmp eq i32 %.0124.lcssa, 0
  br i1 %.not180, label %._crit_edge174, label %iter.check

iter.check:                                       ; preds = %.preheader
  %min.iters.check = icmp ult i32 %.0124.lcssa, 8
  %74 = sub i64 %7, %.lcssa225
  %diff.check = icmp ult i64 %74, 32
  %or.cond234 = or i1 %min.iters.check, %diff.check
  br i1 %or.cond234, label %.lr.ph173.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check226 = icmp ult i32 %.0124.lcssa, 32
  br i1 %min.iters.check226, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %68, 4294967264
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %75 = getelementptr inbounds i8, ptr %31, i64 %index
  %76 = getelementptr inbounds i8, ptr %75, i64 16
  %wide.load = load <16 x i8>, ptr %75, align 1, !tbaa !5
  %wide.load227 = load <16 x i8>, ptr %76, align 1, !tbaa !5
  %77 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %index
  %78 = getelementptr inbounds i8, ptr %77, i64 16
  store <16 x i8> %wide.load, ptr %77, align 16, !tbaa !5
  store <16 x i8> %wide.load227, ptr %78, align 16, !tbaa !5
  %index.next = add nuw i64 %index, 32
  %79 = icmp eq i64 %index.next, %n.vec
  br i1 %79, label %middle.block, label %vector.body, !llvm.loop !14

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %68
  br i1 %cmp.n, label %._crit_edge174, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %n.vec.remaining = and i64 %68, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph173.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec229 = and i64 %68, 4294967288
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index230 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next232, %vec.epilog.vector.body ]
  %80 = getelementptr inbounds i8, ptr %31, i64 %index230
  %wide.load231 = load <8 x i8>, ptr %80, align 1, !tbaa !5
  %81 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %index230
  store <8 x i8> %wide.load231, ptr %81, align 8, !tbaa !5
  %index.next232 = add nuw i64 %index230, 8
  %82 = icmp eq i64 %index.next232, %n.vec229
  br i1 %82, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !17

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n233 = icmp eq i64 %n.vec229, %68
  br i1 %cmp.n233, label %._crit_edge174, label %.lr.ph173.preheader

.lr.ph173.preheader:                              ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %indvars.iv199.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec229, %vec.epilog.middle.block ]
  %xtraiter = and i64 %68, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph173.prol.loopexit, label %.lr.ph173.prol

.lr.ph173.prol:                                   ; preds = %.lr.ph173.preheader, %.lr.ph173.prol
  %indvars.iv199.prol = phi i64 [ %indvars.iv.next200.prol, %.lr.ph173.prol ], [ %indvars.iv199.ph, %.lr.ph173.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph173.prol ], [ 0, %.lr.ph173.preheader ]
  %83 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv199.prol
  %84 = load i8, ptr %83, align 1, !tbaa !5
  %85 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %indvars.iv199.prol
  store i8 %84, ptr %85, align 1, !tbaa !5
  %indvars.iv.next200.prol = add nuw nsw i64 %indvars.iv199.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph173.prol.loopexit, label %.lr.ph173.prol, !llvm.loop !18

.lr.ph173.prol.loopexit:                          ; preds = %.lr.ph173.prol, %.lr.ph173.preheader
  %indvars.iv199.unr = phi i64 [ %indvars.iv199.ph, %.lr.ph173.preheader ], [ %indvars.iv.next200.prol, %.lr.ph173.prol ]
  %86 = sub nsw i64 %indvars.iv199.ph, %68
  %87 = icmp ugt i64 %86, -4
  br i1 %87, label %._crit_edge174, label %.lr.ph173

.lr.ph173:                                        ; preds = %.lr.ph173.prol.loopexit, %.lr.ph173
  %indvars.iv199 = phi i64 [ %indvars.iv.next200.3, %.lr.ph173 ], [ %indvars.iv199.unr, %.lr.ph173.prol.loopexit ]
  %88 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv199
  %89 = load i8, ptr %88, align 1, !tbaa !5
  %90 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %indvars.iv199
  store i8 %89, ptr %90, align 1, !tbaa !5
  %indvars.iv.next200 = add nuw nsw i64 %indvars.iv199, 1
  %91 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv.next200
  %92 = load i8, ptr %91, align 1, !tbaa !5
  %93 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %indvars.iv.next200
  store i8 %92, ptr %93, align 1, !tbaa !5
  %indvars.iv.next200.1 = add nuw nsw i64 %indvars.iv199, 2
  %94 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv.next200.1
  %95 = load i8, ptr %94, align 1, !tbaa !5
  %96 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %indvars.iv.next200.1
  store i8 %95, ptr %96, align 1, !tbaa !5
  %indvars.iv.next200.2 = add nuw nsw i64 %indvars.iv199, 3
  %97 = getelementptr inbounds i8, ptr %31, i64 %indvars.iv.next200.2
  %98 = load i8, ptr %97, align 1, !tbaa !5
  %99 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %indvars.iv.next200.2
  store i8 %98, ptr %99, align 1, !tbaa !5
  %indvars.iv.next200.3 = add nuw nsw i64 %indvars.iv199, 4
  %exitcond203.not.3 = icmp eq i64 %indvars.iv.next200.3, %68
  br i1 %exitcond203.not.3, label %._crit_edge174, label %.lr.ph173, !llvm.loop !20

._crit_edge174:                                   ; preds = %.lr.ph173.prol.loopexit, %.lr.ph173, %middle.block, %vec.epilog.middle.block, %.preheader
  %100 = zext i32 %.0124.lcssa to i64
  %101 = getelementptr inbounds [160 x i8], ptr %6, i64 0, i64 %100
  store i8 0, ptr %101, align 1, !tbaa !5
  br label %.outer

102:                                              ; preds = %._crit_edge166
  %103 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.3) #9
  %104 = icmp eq i32 %103, 0
  br i1 %104, label %105, label %108

105:                                              ; preds = %102
  %106 = call i32 @atoi(ptr nocapture noundef %31) #9
  %107 = trunc i32 %106 to i16
  store i16 %107, ptr %1, align 8, !tbaa !21
  br label %.outer

108:                                              ; preds = %102
  %109 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.4) #9
  %110 = icmp eq i32 %109, 0
  br i1 %110, label %111, label %114

111:                                              ; preds = %108
  %112 = call i32 @atoi(ptr nocapture noundef %31) #9
  %113 = trunc i32 %112 to i16
  store i16 %113, ptr %28, align 2, !tbaa !26
  br label %.outer

114:                                              ; preds = %108
  %115 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.5) #9
  %116 = icmp eq i32 %115, 0
  br i1 %116, label %117, label %120

117:                                              ; preds = %114
  %118 = call i32 @atoi(ptr nocapture noundef %31) #9
  %119 = trunc i32 %118 to i16
  store i16 %119, ptr %27, align 4, !tbaa !27
  br label %.outer

120:                                              ; preds = %114
  %121 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.6) #9
  %122 = icmp eq i32 %121, 0
  br i1 %122, label %123, label %126

123:                                              ; preds = %120
  %124 = call i32 @atoi(ptr nocapture noundef %31) #9
  %125 = trunc i32 %124 to i16
  store i16 %125, ptr %26, align 2, !tbaa !28
  br label %.outer

126:                                              ; preds = %120
  %127 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.7) #9
  %128 = icmp eq i32 %127, 0
  br i1 %128, label %129, label %132

129:                                              ; preds = %126
  %130 = call i32 @atoi(ptr nocapture noundef %31) #9
  %131 = trunc i32 %130 to i16
  store i16 %131, ptr %25, align 8, !tbaa !29
  br label %.outer

132:                                              ; preds = %126
  %133 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.8) #9
  %134 = icmp eq i32 %133, 0
  br i1 %134, label %135, label %138

135:                                              ; preds = %132
  %136 = call i32 @atoi(ptr nocapture noundef %31) #9
  %137 = trunc i32 %136 to i16
  store i16 %137, ptr %24, align 2, !tbaa !30
  br label %.outer

138:                                              ; preds = %132
  %139 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.9) #9
  %140 = icmp eq i32 %139, 0
  br i1 %140, label %141, label %144

141:                                              ; preds = %138
  %142 = call i32 @atoi(ptr nocapture noundef %31) #9
  %143 = trunc i32 %142 to i16
  store i16 %143, ptr %23, align 4, !tbaa !31
  br label %.outer

144:                                              ; preds = %138
  %145 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.10) #9
  %146 = icmp eq i32 %145, 0
  br i1 %146, label %147, label %150

147:                                              ; preds = %144
  %148 = call i32 @atoi(ptr nocapture noundef %31) #9
  %149 = trunc i32 %148 to i16
  store i16 %149, ptr %22, align 2, !tbaa !32
  br label %.outer

150:                                              ; preds = %144
  %151 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.11) #9
  %152 = icmp eq i32 %151, 0
  br i1 %152, label %153, label %155

153:                                              ; preds = %150
  %154 = call i32 @atoi(ptr nocapture noundef %31) #9
  store i32 %154, ptr %21, align 4, !tbaa !33
  br label %.outer

155:                                              ; preds = %150
  %156 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.12) #9
  %157 = icmp eq i32 %156, 0
  br i1 %157, label %158, label %160

158:                                              ; preds = %155
  %159 = call i32 @atoi(ptr nocapture noundef %31) #9
  call void @friso_set_mode(ptr noundef %1, i32 noundef %159)
  br label %.outer

160:                                              ; preds = %155
  %161 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.13) #9
  %162 = icmp eq i32 %161, 0
  br i1 %162, label %163, label %165

163:                                              ; preds = %160
  %164 = call i32 @atoi(ptr nocapture noundef %31) #9
  store i32 %164, ptr %20, align 8, !tbaa !34
  br label %.outer

165:                                              ; preds = %160
  %166 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.14) #9
  %167 = icmp eq i32 %166, 0
  br i1 %167, label %168, label %171

168:                                              ; preds = %165
  %169 = call i32 @atoi(ptr nocapture noundef %31) #9
  %170 = trunc i32 %169 to i16
  store i16 %170, ptr %19, align 8, !tbaa !36
  br label %.outer

171:                                              ; preds = %165
  %172 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.15) #9
  %173 = icmp eq i32 %172, 0
  br i1 %173, label %174, label %177

174:                                              ; preds = %171
  %175 = call i32 @atoi(ptr nocapture noundef %31) #9
  %176 = trunc i32 %175 to i16
  store i16 %176, ptr %18, align 2, !tbaa !37
  br label %.outer

177:                                              ; preds = %171
  %178 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %5, ptr noundef nonnull dereferenceable(1) @.str.16) #9
  %179 = icmp eq i32 %178, 0
  br i1 %179, label %180, label %.outer

180:                                              ; preds = %177
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %17, ptr nonnull align 1 %31, i64 %68, i1 false)
  br label %.outer

.outer:                                           ; preds = %105, %117, %129, %141, %153, %163, %174, %180, %177, %168, %158, %147, %135, %123, %111, %72, %._crit_edge174
  %.1 = phi i32 [ %.0124.lcssa, %._crit_edge174 ], [ %.0123.ph177, %72 ], [ %.0123.ph177, %105 ], [ %.0123.ph177, %111 ], [ %.0123.ph177, %117 ], [ %.0123.ph177, %123 ], [ %.0123.ph177, %129 ], [ %.0123.ph177, %135 ], [ %.0123.ph177, %141 ], [ %.0123.ph177, %147 ], [ %.0123.ph177, %153 ], [ %.0123.ph177, %158 ], [ %.0123.ph177, %163 ], [ %.0123.ph177, %168 ], [ %.0123.ph177, %174 ], [ %.0123.ph177, %180 ], [ %.0123.ph177, %177 ]
  %181 = call ptr @file_get_line(ptr noundef nonnull %4, ptr noundef nonnull %15) #8
  %.not137143 = icmp eq ptr %181, null
  br i1 %.not137143, label %.outer._crit_edge, label %.lr.ph, !llvm.loop !8

.outer._crit_edge:                                ; preds = %.outer, %.backedge
  %.0123.ph.lcssa = phi i32 [ %.0123.ph177, %.backedge ], [ %.1, %.outer ]
  %.not138 = icmp eq i32 %.0123.ph.lcssa, 0
  br i1 %.not138, label %.outer._crit_edge.thread, label %182

182:                                              ; preds = %.outer._crit_edge
  %183 = load i8, ptr %6, align 16, !tbaa !5
  %184 = icmp ne i8 %183, 47
  %185 = icmp ne i32 %.0, 0
  %or.cond = and i1 %185, %184
  br i1 %or.cond, label %186, label %207

186:                                              ; preds = %182
  %187 = add i32 %.0123.ph.lcssa, %.0
  %188 = icmp ugt i32 %187, 159
  br i1 %188, label %189, label %194

189:                                              ; preds = %186
  %190 = load ptr, ptr @stderr, align 8, !tbaa !38
  %191 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %190, ptr noundef nonnull @.str.17) #10
  %192 = load ptr, ptr @stderr, align 8, !tbaa !38
  %193 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %192, ptr noundef nonnull @.str.18, i32 noundef %187) #10
  br label %229

194:                                              ; preds = %186
  %195 = zext i32 %.0 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %8, ptr align 1 %2, i64 %195, i1 false)
  %196 = getelementptr inbounds i8, ptr %8, i64 %195
  %197 = add i32 %.0123.ph.lcssa, -1
  %198 = zext i32 %197 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %196, ptr nonnull align 16 %6, i64 %198, i1 false)
  %199 = add nsw i32 %187, -2
  %200 = zext i32 %199 to i64
  %201 = getelementptr inbounds [160 x i8], ptr %8, i64 0, i64 %200
  %202 = load i8, ptr %201, align 1, !tbaa !5
  %.not140 = icmp eq i8 %202, 47
  br i1 %.not140, label %.sink.split, label %203

203:                                              ; preds = %194
  %204 = add nsw i32 %187, -1
  %205 = zext i32 %204 to i64
  %206 = getelementptr inbounds [160 x i8], ptr %8, i64 0, i64 %205
  store i8 47, ptr %206, align 1, !tbaa !5
  br label %.sink.split

207:                                              ; preds = %182
  %208 = zext i32 %.0123.ph.lcssa to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %8, ptr nonnull align 16 %6, i64 %208, i1 false)
  %209 = getelementptr inbounds [160 x i8], ptr %8, i64 0, i64 %208
  store i8 0, ptr %209, align 1, !tbaa !5
  %210 = add i32 %.0123.ph.lcssa, -1
  %211 = zext i32 %210 to i64
  %212 = getelementptr inbounds [160 x i8], ptr %8, i64 0, i64 %211
  %213 = load i8, ptr %212, align 1, !tbaa !5
  %.not139 = icmp eq i8 %213, 47
  br i1 %.not139, label %217, label %214

214:                                              ; preds = %207
  store i8 47, ptr %209, align 1, !tbaa !5
  %215 = add i32 %.0123.ph.lcssa, 1
  br label %.sink.split

.sink.split:                                      ; preds = %194, %203, %214
  %.sink217.in = phi i32 [ %215, %214 ], [ %187, %203 ], [ %187, %194 ]
  %.sink217 = zext i32 %.sink217.in to i64
  %216 = getelementptr inbounds [160 x i8], ptr %8, i64 0, i64 %.sink217
  store i8 0, ptr %216, align 1, !tbaa !5
  br label %217

217:                                              ; preds = %.sink.split, %207
  %218 = call ptr @friso_dic_new() #8
  store ptr %218, ptr %0, align 8, !tbaa !39
  %219 = load i16, ptr %1, align 8, !tbaa !21
  %220 = zext i16 %219 to i32
  %221 = getelementptr inbounds i8, ptr %0, i64 8
  %222 = load i32, ptr %221, align 8, !tbaa !34
  %223 = icmp eq i32 %222, 0
  %224 = select i1 %223, i32 3, i32 2
  %225 = mul nuw nsw i32 %224, %220
  call void @friso_dic_load_from_ifile(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %8, i32 noundef %225) #8
  %226 = call i32 @fclose(ptr noundef nonnull %15)
  br label %229

.outer._crit_edge.thread:                         ; preds = %.preheader141, %.outer._crit_edge
  %227 = load ptr, ptr @stderr, align 8, !tbaa !38
  %228 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %227, ptr noundef nonnull @.str.19) #10
  br label %229

229:                                              ; preds = %3, %217, %.outer._crit_edge.thread, %189
  %.0122 = phi i32 [ 0, %189 ], [ 1, %217 ], [ 0, %.outer._crit_edge.thread ], [ 0, %3 ]
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #8
  ret i32 %.0122
}

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

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

declare ptr @file_get_line(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #2

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

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

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

declare ptr @friso_dic_new() local_unnamed_addr #4

declare void @friso_dic_load_from_ifile(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { 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 #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 = { 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 #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { cold 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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = distinct !{!10, !9}
!11 = distinct !{!11, !9}
!12 = distinct !{!12, !9}
!13 = distinct !{!13, !9}
!14 = distinct !{!14, !9, !15, !16}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !9, !15, !16}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = distinct !{!20, !9, !15}
!21 = !{!22, !23, i64 0}
!22 = !{!"friso_config_struct", !23, i64 0, !23, i64 2, !23, i64 4, !23, i64 6, !23, i64 8, !23, i64 10, !23, i64 12, !23, i64 14, !23, i64 16, !23, i64 18, !24, i64 20, !24, i64 24, !25, i64 32, !25, i64 40, !6, i64 48}
!23 = !{!"short", !6, i64 0}
!24 = !{!"int", !6, i64 0}
!25 = !{!"any pointer", !6, i64 0}
!26 = !{!22, !23, i64 2}
!27 = !{!22, !23, i64 4}
!28 = !{!22, !23, i64 6}
!29 = !{!22, !23, i64 8}
!30 = !{!22, !23, i64 10}
!31 = !{!22, !23, i64 12}
!32 = !{!22, !23, i64 14}
!33 = !{!22, !24, i64 20}
!34 = !{!35, !24, i64 8}
!35 = !{!"", !25, i64 0, !24, i64 8}
!36 = !{!22, !23, i64 16}
!37 = !{!22, !23, i64 18}
!38 = !{!25, !25, i64 0}
!39 = !{!35, !25, i64 0}


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