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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

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

; Function Attrs: nounwind uwtable
define dso_local ptr @next_mmseg_token(ptr noundef %0, ptr noundef %1, ptr noundef %2) #3 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = 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 4, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  store ptr null, ptr %13, align 8, !tbaa !5
  %15 = load ptr, ptr %7, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.friso_task_entry, ptr %15, i32 0, i32 6
  %17 = load ptr, ptr %16, align 8, !tbaa !11
  %18 = getelementptr inbounds %struct.friso_link_entry, ptr %17, i32 0, i32 2
  %19 = load i32, ptr %18, align 8, !tbaa !13
  %20 = icmp eq i32 %19, 0
  br i1 %20, label %139, label %21

21:                                               ; preds = %3
  %22 = load ptr, ptr %7, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.friso_task_entry, ptr %22, i32 0, i32 6
  %24 = load ptr, ptr %23, align 8, !tbaa !11
  %25 = call ptr @link_list_remove_first(ptr noundef %24)
  store ptr %25, ptr %11, align 8, !tbaa !5
  %26 = load ptr, ptr %7, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.friso_task_entry, ptr %26, i32 0, i32 8
  %28 = load ptr, ptr %27, align 8, !tbaa !15
  %29 = getelementptr inbounds %struct.friso_token_entry, ptr %28, i32 0, i32 5
  %30 = getelementptr inbounds [64 x i8], ptr %29, i64 0, i64 0
  %31 = load ptr, ptr %11, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.lex_entry_cdt, ptr %31, i32 0, i32 5
  %33 = load ptr, ptr %32, align 8, !tbaa !16
  %34 = load ptr, ptr %11, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.lex_entry_cdt, ptr %34, i32 0, i32 0
  %36 = load i8, ptr %35, align 8, !tbaa !18
  %37 = zext i8 %36 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 1 %33, i64 %37, i1 false)
  %38 = load ptr, ptr %11, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.lex_entry_cdt, ptr %38, i32 0, i32 2
  %40 = load i8, ptr %39, align 2, !tbaa !19
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.friso_task_entry, ptr %41, i32 0, i32 8
  %43 = load ptr, ptr %42, align 8, !tbaa !15
  %44 = getelementptr inbounds %struct.friso_token_entry, ptr %43, i32 0, i32 0
  store i8 %40, ptr %44, align 4, !tbaa !20
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.lex_entry_cdt, ptr %45, i32 0, i32 0
  %47 = load i8, ptr %46, align 8, !tbaa !18
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.friso_task_entry, ptr %48, i32 0, i32 8
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  %51 = getelementptr inbounds %struct.friso_token_entry, ptr %50, i32 0, i32 1
  store i8 %47, ptr %51, align 1, !tbaa !22
  %52 = load ptr, ptr %11, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.lex_entry_cdt, ptr %52, i32 0, i32 1
  %54 = load i8, ptr %53, align 1, !tbaa !23
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.friso_task_entry, ptr %55, i32 0, i32 8
  %57 = load ptr, ptr %56, align 8, !tbaa !15
  %58 = getelementptr inbounds %struct.friso_token_entry, ptr %57, i32 0, i32 2
  store i8 %54, ptr %58, align 2, !tbaa !24
  %59 = load ptr, ptr %11, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.lex_entry_cdt, ptr %59, i32 0, i32 4
  %61 = load i32, ptr %60, align 4, !tbaa !25
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.friso_task_entry, ptr %62, i32 0, i32 8
  %64 = load ptr, ptr %63, align 8, !tbaa !15
  %65 = getelementptr inbounds %struct.friso_token_entry, ptr %64, i32 0, i32 4
  store i32 %61, ptr %65, align 4, !tbaa !26
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.friso_task_entry, ptr %66, i32 0, i32 8
  %68 = load ptr, ptr %67, align 8, !tbaa !15
  %69 = getelementptr inbounds %struct.friso_token_entry, ptr %68, i32 0, i32 5
  %70 = load ptr, ptr %11, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.lex_entry_cdt, ptr %70, i32 0, i32 0
  %72 = load i8, ptr %71, align 8, !tbaa !18
  %73 = zext i8 %72 to i64
  %74 = getelementptr inbounds [64 x i8], ptr %69, i64 0, i64 %73
  store i8 0, ptr %74, align 1, !tbaa !27
  %75 = load ptr, ptr %11, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.lex_entry_cdt, ptr %75, i32 0, i32 3
  %77 = load i8, ptr %76, align 1, !tbaa !28
  %78 = zext i8 %77 to i32
  %79 = and i32 %78, 1
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %123

81:                                               ; preds = %21
  %82 = load ptr, ptr %11, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.lex_entry_cdt, ptr %82, i32 0, i32 3
  %84 = load i8, ptr %83, align 1, !tbaa !28
  %85 = zext i8 %84 to i32
  %86 = and i32 %85, -2
  %87 = trunc i32 %86 to i8
  store i8 %87, ptr %83, align 1, !tbaa !28
  br label %88

88:                                               ; preds = %81
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.friso_entry, ptr %89, i32 0, i32 0
  %91 = load ptr, ptr %90, align 8, !tbaa !29
  %92 = load ptr, ptr %11, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.lex_entry_cdt, ptr %92, i32 0, i32 5
  %94 = load ptr, ptr %93, align 8, !tbaa !16
  %95 = call ptr @friso_dic_get(ptr noundef %91, i32 noundef 11, ptr noundef %94)
  store ptr %95, ptr %12, align 8, !tbaa !5
  %96 = icmp ne ptr %95, null
  br i1 %96, label %97, label %120

97:                                               ; preds = %88
  %98 = load ptr, ptr %12, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.lex_entry_cdt, ptr %98, i32 0, i32 6
  %100 = load ptr, ptr %99, align 8, !tbaa !31
  %101 = icmp ne ptr %100, null
  br i1 %101, label %102, label %120

102:                                              ; preds = %97
  %103 = load ptr, ptr %6, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.friso_config_struct, ptr %103, i32 0, i32 7
  %105 = load i16, ptr %104, align 2, !tbaa !32
  %106 = zext i16 %105 to i32
  %107 = icmp eq i32 %106, 1
  br i1 %107, label %108, label %111

108:                                              ; preds = %102
  %109 = load ptr, ptr %7, align 8, !tbaa !5
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  call void @token_sphinx_output(ptr noundef %109, ptr noundef %110)
  br label %119

111:                                              ; preds = %102
  %112 = load ptr, ptr %11, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.lex_entry_cdt, ptr %112, i32 0, i32 4
  %114 = load i32, ptr %113, align 4, !tbaa !25
  %115 = load ptr, ptr %12, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.lex_entry_cdt, ptr %115, i32 0, i32 4
  store i32 %114, ptr %116, align 4, !tbaa !25
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = load ptr, ptr %12, align 8, !tbaa !5
  call void @token_normal_output(ptr noundef %117, ptr noundef %118, i32 noundef 1)
  br label %119

119:                                              ; preds = %111, %108
  br label %120

120:                                              ; preds = %119, %97, %88
  br label %121

121:                                              ; preds = %120
  br label %122

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %122, %21
  %124 = load ptr, ptr %11, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.lex_entry_cdt, ptr %124, i32 0, i32 2
  %126 = load i8, ptr %125, align 2, !tbaa !19
  %127 = zext i8 %126 to i32
  switch i32 %127, label %135 [
    i32 15, label %128
    i32 16, label %133
  ]

128:                                              ; preds = %123
  %129 = load ptr, ptr %11, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.lex_entry_cdt, ptr %129, i32 0, i32 5
  %131 = load ptr, ptr %130, align 8, !tbaa !16
  call void @free(ptr noundef %131) #6
  %132 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free_lex_entry(ptr noundef %132)
  br label %135

133:                                              ; preds = %123
  %134 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free_lex_entry(ptr noundef %134)
  br label %135

135:                                              ; preds = %133, %128, %123
  %136 = load ptr, ptr %7, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.friso_task_entry, ptr %136, i32 0, i32 8
  %138 = load ptr, ptr %137, align 8, !tbaa !15
  store ptr %138, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

139:                                              ; preds = %3
  br label %140

140:                                              ; preds = %913, %808, %648, %534, %254, %171, %139
  %141 = load ptr, ptr %7, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.friso_task_entry, ptr %141, i32 0, i32 1
  %143 = load i32, ptr %142, align 8, !tbaa !35
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.friso_task_entry, ptr %144, i32 0, i32 2
  %146 = load i32, ptr %145, align 4, !tbaa !36
  %147 = icmp ult i32 %143, %146
  br i1 %147, label %148, label %914

148:                                              ; preds = %140
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.friso_task_entry, ptr %151, i32 0, i32 1
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.friso_task_entry, ptr %153, i32 0, i32 9
  %155 = getelementptr inbounds [7 x i8], ptr %154, i64 0, i64 0
  %156 = call i32 @readNextWord(ptr noundef %149, ptr noundef %150, ptr noundef %152, ptr noundef %155)
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.friso_task_entry, ptr %157, i32 0, i32 3
  store i32 %156, ptr %158, align 8, !tbaa !37
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.friso_task_entry, ptr %159, i32 0, i32 3
  %161 = load i32, ptr %160, align 8, !tbaa !37
  %162 = icmp eq i32 %161, 0
  br i1 %162, label %163, label %164

163:                                              ; preds = %148
  br label %914

164:                                              ; preds = %148
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.friso_entry, ptr %165, i32 0, i32 1
  %167 = load i32, ptr %166, align 8, !tbaa !38
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = call i32 @friso_whitespace(i32 noundef %167, ptr noundef %168)
  %170 = icmp ne i32 %169, 0
  br i1 %170, label %171, label %172

171:                                              ; preds = %164
  br label %140, !llvm.loop !39

172:                                              ; preds = %164
  %173 = load ptr, ptr %5, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.friso_entry, ptr %173, i32 0, i32 1
  %175 = load i32, ptr %174, align 8, !tbaa !38
  %176 = load ptr, ptr %7, align 8, !tbaa !5
  %177 = call i32 @friso_cn_string(i32 noundef %175, ptr noundef %176)
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %179, label %498

179:                                              ; preds = %172
  %180 = load ptr, ptr %5, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.friso_entry, ptr %180, i32 0, i32 0
  %182 = load ptr, ptr %181, align 8, !tbaa !29
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.friso_task_entry, ptr %183, i32 0, i32 9
  %185 = getelementptr inbounds [7 x i8], ptr %184, i64 0, i64 0
  %186 = call i32 @friso_dic_match(ptr noundef %182, i32 noundef 0, ptr noundef %185)
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %244, label %188

188:                                              ; preds = %179
  %189 = load ptr, ptr %7, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.friso_task_entry, ptr %189, i32 0, i32 8
  %191 = load ptr, ptr %190, align 8, !tbaa !15
  %192 = getelementptr inbounds %struct.friso_token_entry, ptr %191, i32 0, i32 5
  %193 = getelementptr inbounds [64 x i8], ptr %192, i64 0, i64 0
  %194 = load ptr, ptr %7, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.friso_task_entry, ptr %194, i32 0, i32 9
  %196 = getelementptr inbounds [7 x i8], ptr %195, i64 0, i64 0
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.friso_task_entry, ptr %197, i32 0, i32 3
  %199 = load i32, ptr %198, align 8, !tbaa !37
  %200 = zext i32 %199 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %193, ptr align 8 %196, i64 %200, i1 false)
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.friso_task_entry, ptr %201, i32 0, i32 8
  %203 = load ptr, ptr %202, align 8, !tbaa !15
  %204 = getelementptr inbounds %struct.friso_token_entry, ptr %203, i32 0, i32 0
  store i8 17, ptr %204, align 4, !tbaa !20
  %205 = load ptr, ptr %7, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.friso_task_entry, ptr %205, i32 0, i32 3
  %207 = load i32, ptr %206, align 8, !tbaa !37
  %208 = trunc i32 %207 to i8
  %209 = load ptr, ptr %7, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.friso_task_entry, ptr %209, i32 0, i32 8
  %211 = load ptr, ptr %210, align 8, !tbaa !15
  %212 = getelementptr inbounds %struct.friso_token_entry, ptr %211, i32 0, i32 1
  store i8 %208, ptr %212, align 1, !tbaa !22
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.friso_task_entry, ptr %213, i32 0, i32 3
  %215 = load i32, ptr %214, align 8, !tbaa !37
  %216 = trunc i32 %215 to i8
  %217 = load ptr, ptr %7, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.friso_task_entry, ptr %217, i32 0, i32 8
  %219 = load ptr, ptr %218, align 8, !tbaa !15
  %220 = getelementptr inbounds %struct.friso_token_entry, ptr %219, i32 0, i32 2
  store i8 %216, ptr %220, align 2, !tbaa !24
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.friso_task_entry, ptr %221, i32 0, i32 1
  %223 = load i32, ptr %222, align 8, !tbaa !35
  %224 = load ptr, ptr %7, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.friso_task_entry, ptr %224, i32 0, i32 3
  %226 = load i32, ptr %225, align 8, !tbaa !37
  %227 = sub i32 %223, %226
  %228 = load ptr, ptr %7, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.friso_task_entry, ptr %228, i32 0, i32 8
  %230 = load ptr, ptr %229, align 8, !tbaa !15
  %231 = getelementptr inbounds %struct.friso_token_entry, ptr %230, i32 0, i32 4
  store i32 %227, ptr %231, align 4, !tbaa !26
  %232 = load ptr, ptr %7, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.friso_task_entry, ptr %232, i32 0, i32 8
  %234 = load ptr, ptr %233, align 8, !tbaa !15
  %235 = getelementptr inbounds %struct.friso_token_entry, ptr %234, i32 0, i32 5
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.friso_task_entry, ptr %236, i32 0, i32 3
  %238 = load i32, ptr %237, align 8, !tbaa !37
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds [64 x i8], ptr %235, i64 0, i64 %239
  store i8 0, ptr %240, align 1, !tbaa !27
  %241 = load ptr, ptr %7, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.friso_task_entry, ptr %241, i32 0, i32 8
  %243 = load ptr, ptr %242, align 8, !tbaa !15
  store ptr %243, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

244:                                              ; preds = %179
  %245 = load ptr, ptr %6, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.friso_config_struct, ptr %245, i32 0, i32 13
  %247 = load ptr, ptr %246, align 8, !tbaa !41
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = load ptr, ptr %6, align 8, !tbaa !5
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = call ptr %247(ptr noundef %248, ptr noundef %249, ptr noundef %250)
  store ptr %251, ptr %11, align 8, !tbaa !5
  %252 = load ptr, ptr %11, align 8, !tbaa !5
  %253 = icmp eq ptr %252, null
  br i1 %253, label %254, label %255

254:                                              ; preds = %244
  br label %140, !llvm.loop !39

255:                                              ; preds = %244
  %256 = load ptr, ptr %7, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.friso_task_entry, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %257, align 8, !tbaa !35
  %259 = load ptr, ptr %11, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.lex_entry_cdt, ptr %259, i32 0, i32 1
  %261 = load i8, ptr %260, align 1, !tbaa !23
  %262 = zext i8 %261 to i32
  %263 = sub i32 %258, %262
  %264 = load ptr, ptr %11, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.lex_entry_cdt, ptr %264, i32 0, i32 4
  store i32 %263, ptr %265, align 4, !tbaa !25
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.friso_task_entry, ptr %266, i32 0, i32 1
  %268 = load i32, ptr %267, align 8, !tbaa !35
  %269 = load ptr, ptr %7, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.friso_task_entry, ptr %269, i32 0, i32 2
  %271 = load i32, ptr %270, align 4, !tbaa !36
  %272 = icmp ult i32 %268, %271
  br i1 %272, label %273, label %376

273:                                              ; preds = %255
  %274 = load ptr, ptr %7, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.friso_task_entry, ptr %274, i32 0, i32 0
  %276 = load ptr, ptr %275, align 8, !tbaa !42
  %277 = load ptr, ptr %7, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.friso_task_entry, ptr %277, i32 0, i32 1
  %279 = load i32, ptr %278, align 8, !tbaa !35
  %280 = zext i32 %279 to i64
  %281 = getelementptr inbounds i8, ptr %276, i64 %280
  %282 = load i8, ptr %281, align 1, !tbaa !27
  %283 = sext i8 %282 to i32
  %284 = icmp sgt i32 %283, 0
  br i1 %284, label %285, label %376

285:                                              ; preds = %273
  %286 = load ptr, ptr %5, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.friso_entry, ptr %286, i32 0, i32 1
  %288 = load i32, ptr %287, align 8, !tbaa !38
  %289 = load ptr, ptr %7, align 8, !tbaa !5
  %290 = call i32 @friso_en_letter(i32 noundef %288, ptr noundef %289)
  %291 = icmp ne i32 %290, 0
  br i1 %291, label %299, label %292

292:                                              ; preds = %285
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.friso_entry, ptr %293, i32 0, i32 1
  %295 = load i32, ptr %294, align 8, !tbaa !38
  %296 = load ptr, ptr %7, align 8, !tbaa !5
  %297 = call i32 @friso_numeric_letter(i32 noundef %295, ptr noundef %296)
  %298 = icmp ne i32 %297, 0
  br i1 %298, label %299, label %376

299:                                              ; preds = %292, %285
  %300 = load ptr, ptr %11, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.lex_entry_cdt, ptr %300, i32 0, i32 5
  %302 = load ptr, ptr %301, align 8, !tbaa !16
  %303 = call ptr @new_string_buffer_with_string(ptr noundef %302)
  store ptr %303, ptr %10, align 8, !tbaa !5
  %304 = load ptr, ptr %7, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.friso_task_entry, ptr %304, i32 0, i32 0
  %306 = load ptr, ptr %305, align 8, !tbaa !42
  %307 = load ptr, ptr %7, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.friso_task_entry, ptr %307, i32 0, i32 1
  %309 = load i32, ptr %308, align 8, !tbaa !35
  %310 = add i32 %309, 1
  store i32 %310, ptr %308, align 8, !tbaa !35
  %311 = zext i32 %309 to i64
  %312 = getelementptr inbounds i8, ptr %306, i64 %311
  %313 = load i8, ptr %312, align 1, !tbaa !27
  %314 = load ptr, ptr %7, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.friso_task_entry, ptr %314, i32 0, i32 9
  %316 = getelementptr inbounds [7 x i8], ptr %315, i64 0, i64 0
  store i8 %313, ptr %316, align 8, !tbaa !27
  %317 = load ptr, ptr %7, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.friso_task_entry, ptr %317, i32 0, i32 9
  %319 = getelementptr inbounds [7 x i8], ptr %318, i64 0, i64 1
  store i8 0, ptr %319, align 1, !tbaa !27
  %320 = load ptr, ptr %5, align 8, !tbaa !5
  %321 = load ptr, ptr %6, align 8, !tbaa !5
  %322 = load ptr, ptr %7, align 8, !tbaa !5
  %323 = call ptr @next_basic_latin(ptr noundef %320, ptr noundef %321, ptr noundef %322)
  store ptr %323, ptr %12, align 8, !tbaa !5
  %324 = load ptr, ptr %7, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.friso_task_entry, ptr %324, i32 0, i32 1
  %326 = load i32, ptr %325, align 8, !tbaa !35
  %327 = load ptr, ptr %12, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.lex_entry_cdt, ptr %327, i32 0, i32 0
  %329 = load i8, ptr %328, align 8, !tbaa !18
  %330 = zext i8 %329 to i32
  %331 = sub i32 %326, %330
  %332 = load ptr, ptr %12, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.lex_entry_cdt, ptr %332, i32 0, i32 4
  store i32 %331, ptr %333, align 4, !tbaa !25
  %334 = load ptr, ptr %10, align 8, !tbaa !5
  %335 = load ptr, ptr %12, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.lex_entry_cdt, ptr %335, i32 0, i32 5
  %337 = load ptr, ptr %336, align 8, !tbaa !16
  call void @string_buffer_append(ptr noundef %334, ptr noundef %337)
  %338 = load ptr, ptr %5, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.friso_entry, ptr %338, i32 0, i32 0
  %340 = load ptr, ptr %339, align 8, !tbaa !29
  %341 = load ptr, ptr %10, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.string_buffer_entry, ptr %341, i32 0, i32 0
  %343 = load ptr, ptr %342, align 8, !tbaa !43
  %344 = call i32 @friso_dic_match(ptr noundef %340, i32 noundef 3, ptr noundef %343)
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %346, label %375

346:                                              ; preds = %299
  %347 = load ptr, ptr %11, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.lex_entry_cdt, ptr %347, i32 0, i32 4
  %349 = load i32, ptr %348, align 4, !tbaa !25
  store i32 %349, ptr %8, align 4, !tbaa !9
  %350 = load ptr, ptr %5, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.friso_entry, ptr %350, i32 0, i32 0
  %352 = load ptr, ptr %351, align 8, !tbaa !29
  %353 = load ptr, ptr %10, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.string_buffer_entry, ptr %353, i32 0, i32 0
  %355 = load ptr, ptr %354, align 8, !tbaa !43
  %356 = call ptr @friso_dic_get(ptr noundef %352, i32 noundef 3, ptr noundef %355)
  store ptr %356, ptr %11, align 8, !tbaa !5
  %357 = load i32, ptr %8, align 4, !tbaa !9
  %358 = load ptr, ptr %11, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.lex_entry_cdt, ptr %358, i32 0, i32 4
  store i32 %357, ptr %359, align 4, !tbaa !25
  br label %360

360:                                              ; preds = %346
  %361 = load ptr, ptr %12, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.lex_entry_cdt, ptr %361, i32 0, i32 2
  %363 = load i8, ptr %362, align 2, !tbaa !19
  %364 = zext i8 %363 to i32
  %365 = icmp eq i32 %364, 15
  br i1 %365, label %366, label %371

366:                                              ; preds = %360
  %367 = load ptr, ptr %12, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.lex_entry_cdt, ptr %367, i32 0, i32 5
  %369 = load ptr, ptr %368, align 8, !tbaa !16
  call void @free(ptr noundef %369) #6
  %370 = load ptr, ptr %12, align 8, !tbaa !5
  call void @free_lex_entry(ptr noundef %370)
  br label %371

371:                                              ; preds = %366, %360
  br label %372

372:                                              ; preds = %371
  br label %373

373:                                              ; preds = %372
  %374 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free_string_buffer(ptr noundef %374)
  store ptr null, ptr %12, align 8, !tbaa !5
  store ptr null, ptr %10, align 8, !tbaa !5
  br label %375

375:                                              ; preds = %373, %299
  br label %376

376:                                              ; preds = %375, %292, %273, %255
  %377 = load ptr, ptr %11, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.lex_entry_cdt, ptr %377, i32 0, i32 0
  %379 = load i8, ptr %378, align 8, !tbaa !18
  %380 = zext i8 %379 to i32
  store i32 %380, ptr %9, align 4, !tbaa !9
  %381 = load ptr, ptr %7, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.friso_task_entry, ptr %381, i32 0, i32 8
  %383 = load ptr, ptr %382, align 8, !tbaa !15
  %384 = getelementptr inbounds %struct.friso_token_entry, ptr %383, i32 0, i32 5
  %385 = getelementptr inbounds [64 x i8], ptr %384, i64 0, i64 0
  %386 = load ptr, ptr %11, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.lex_entry_cdt, ptr %386, i32 0, i32 5
  %388 = load ptr, ptr %387, align 8, !tbaa !16
  %389 = load ptr, ptr %11, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.lex_entry_cdt, ptr %389, i32 0, i32 0
  %391 = load i8, ptr %390, align 8, !tbaa !18
  %392 = zext i8 %391 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %385, ptr align 1 %388, i64 %392, i1 false)
  %393 = load ptr, ptr %11, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.lex_entry_cdt, ptr %393, i32 0, i32 2
  %395 = load i8, ptr %394, align 2, !tbaa !19
  %396 = load ptr, ptr %7, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.friso_task_entry, ptr %396, i32 0, i32 8
  %398 = load ptr, ptr %397, align 8, !tbaa !15
  %399 = getelementptr inbounds %struct.friso_token_entry, ptr %398, i32 0, i32 0
  store i8 %395, ptr %399, align 4, !tbaa !20
  %400 = load ptr, ptr %11, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.lex_entry_cdt, ptr %400, i32 0, i32 0
  %402 = load i8, ptr %401, align 8, !tbaa !18
  %403 = load ptr, ptr %7, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.friso_task_entry, ptr %403, i32 0, i32 8
  %405 = load ptr, ptr %404, align 8, !tbaa !15
  %406 = getelementptr inbounds %struct.friso_token_entry, ptr %405, i32 0, i32 1
  store i8 %402, ptr %406, align 1, !tbaa !22
  %407 = load ptr, ptr %11, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.lex_entry_cdt, ptr %407, i32 0, i32 1
  %409 = load i8, ptr %408, align 1, !tbaa !23
  %410 = load ptr, ptr %7, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.friso_task_entry, ptr %410, i32 0, i32 8
  %412 = load ptr, ptr %411, align 8, !tbaa !15
  %413 = getelementptr inbounds %struct.friso_token_entry, ptr %412, i32 0, i32 2
  store i8 %409, ptr %413, align 2, !tbaa !24
  %414 = load ptr, ptr %11, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.lex_entry_cdt, ptr %414, i32 0, i32 4
  %416 = load i32, ptr %415, align 4, !tbaa !25
  %417 = load ptr, ptr %7, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.friso_task_entry, ptr %417, i32 0, i32 8
  %419 = load ptr, ptr %418, align 8, !tbaa !15
  %420 = getelementptr inbounds %struct.friso_token_entry, ptr %419, i32 0, i32 4
  store i32 %416, ptr %420, align 4, !tbaa !26
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.friso_task_entry, ptr %421, i32 0, i32 8
  %423 = load ptr, ptr %422, align 8, !tbaa !15
  %424 = getelementptr inbounds %struct.friso_token_entry, ptr %423, i32 0, i32 5
  %425 = load i32, ptr %9, align 4, !tbaa !9
  %426 = zext i32 %425 to i64
  %427 = getelementptr inbounds [64 x i8], ptr %424, i64 0, i64 %426
  store i8 0, ptr %427, align 1, !tbaa !27
  %428 = load ptr, ptr %6, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.friso_config_struct, ptr %428, i32 0, i32 4
  %430 = load i16, ptr %429, align 8, !tbaa !45
  %431 = zext i16 %430 to i32
  %432 = icmp ne i32 %431, 0
  br i1 %432, label %433, label %451

433:                                              ; preds = %376
  %434 = load ptr, ptr %11, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.lex_entry_cdt, ptr %434, i32 0, i32 6
  %436 = load ptr, ptr %435, align 8, !tbaa !31
  %437 = icmp ne ptr %436, null
  br i1 %437, label %438, label %451

438:                                              ; preds = %433
  %439 = load ptr, ptr %6, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.friso_config_struct, ptr %439, i32 0, i32 7
  %441 = load i16, ptr %440, align 2, !tbaa !32
  %442 = zext i16 %441 to i32
  %443 = icmp eq i32 %442, 1
  br i1 %443, label %444, label %447

444:                                              ; preds = %438
  %445 = load ptr, ptr %7, align 8, !tbaa !5
  %446 = load ptr, ptr %11, align 8, !tbaa !5
  call void @token_sphinx_output(ptr noundef %445, ptr noundef %446)
  br label %450

447:                                              ; preds = %438
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = load ptr, ptr %11, align 8, !tbaa !5
  call void @token_normal_output(ptr noundef %448, ptr noundef %449, i32 noundef 0)
  br label %450

450:                                              ; preds = %447, %444
  br label %451

451:                                              ; preds = %450, %433, %376
  %452 = load ptr, ptr %12, align 8, !tbaa !5
  %453 = icmp ne ptr %452, null
  br i1 %453, label %454, label %494

454:                                              ; preds = %451
  %455 = load ptr, ptr %10, align 8, !tbaa !5
  %456 = icmp ne ptr %455, null
  br i1 %456, label %457, label %494

457:                                              ; preds = %454
  %458 = load ptr, ptr %6, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.friso_config_struct, ptr %458, i32 0, i32 8
  %460 = load i16, ptr %459, align 8, !tbaa !46
  %461 = zext i16 %460 to i32
  %462 = icmp eq i32 %461, 1
  br i1 %462, label %463, label %475

463:                                              ; preds = %457
  %464 = load ptr, ptr %7, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.friso_task_entry, ptr %464, i32 0, i32 5
  %466 = load i32, ptr %465, align 8, !tbaa !47
  %467 = and i32 %466, 2
  %468 = icmp ne i32 %467, 0
  br i1 %468, label %469, label %475

469:                                              ; preds = %463
  %470 = load ptr, ptr %5, align 8, !tbaa !5
  %471 = load ptr, ptr %6, align 8, !tbaa !5
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = load ptr, ptr %12, align 8, !tbaa !5
  %474 = call ptr @en_second_seg(ptr noundef %470, ptr noundef %471, ptr noundef %472, ptr noundef %473, i32 noundef 0)
  br label %475

475:                                              ; preds = %469, %463, %457
  %476 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free_string_buffer(ptr noundef %476)
  %477 = load ptr, ptr %7, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.friso_task_entry, ptr %477, i32 0, i32 6
  %479 = load ptr, ptr %478, align 8, !tbaa !11
  %480 = load ptr, ptr %12, align 8, !tbaa !5
  call void @link_list_add(ptr noundef %479, ptr noundef %480)
  %481 = load ptr, ptr %6, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.friso_config_struct, ptr %481, i32 0, i32 4
  %483 = load i16, ptr %482, align 8, !tbaa !45
  %484 = zext i16 %483 to i32
  %485 = icmp eq i32 %484, 1
  br i1 %485, label %486, label %493

486:                                              ; preds = %475
  %487 = load ptr, ptr %12, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.lex_entry_cdt, ptr %487, i32 0, i32 3
  %489 = load i8, ptr %488, align 1, !tbaa !28
  %490 = zext i8 %489 to i32
  %491 = or i32 %490, 1
  %492 = trunc i32 %491 to i8
  store i8 %492, ptr %488, align 1, !tbaa !28
  br label %493

493:                                              ; preds = %486, %475
  br label %494

494:                                              ; preds = %493, %454, %451
  %495 = load ptr, ptr %7, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.friso_task_entry, ptr %495, i32 0, i32 8
  %497 = load ptr, ptr %496, align 8, !tbaa !15
  store ptr %497, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

498:                                              ; preds = %172
  %499 = load ptr, ptr %5, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.friso_entry, ptr %499, i32 0, i32 1
  %501 = load i32, ptr %500, align 8, !tbaa !38
  %502 = load ptr, ptr %7, align 8, !tbaa !5
  %503 = call i32 @friso_halfwidth_en_char(i32 noundef %501, ptr noundef %502)
  %504 = icmp ne i32 %503, 0
  br i1 %504, label %512, label %505

505:                                              ; preds = %498
  %506 = load ptr, ptr %5, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.friso_entry, ptr %506, i32 0, i32 1
  %508 = load i32, ptr %507, align 8, !tbaa !38
  %509 = load ptr, ptr %7, align 8, !tbaa !5
  %510 = call i32 @friso_fullwidth_en_char(i32 noundef %508, ptr noundef %509)
  %511 = icmp ne i32 %510, 0
  br i1 %511, label %512, label %786

512:                                              ; preds = %505, %498
  %513 = load ptr, ptr %5, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.friso_entry, ptr %513, i32 0, i32 1
  %515 = load i32, ptr %514, align 8, !tbaa !38
  %516 = load ptr, ptr %7, align 8, !tbaa !5
  %517 = call i32 @friso_en_punctuation(i32 noundef %515, ptr noundef %516)
  %518 = icmp ne i32 %517, 0
  br i1 %518, label %519, label %584

519:                                              ; preds = %512
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.friso_config_struct, ptr %520, i32 0, i32 5
  %522 = load i16, ptr %521, align 2, !tbaa !48
  %523 = zext i16 %522 to i32
  %524 = icmp ne i32 %523, 0
  br i1 %524, label %525, label %535

525:                                              ; preds = %519
  %526 = load ptr, ptr %5, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.friso_entry, ptr %526, i32 0, i32 0
  %528 = load ptr, ptr %527, align 8, !tbaa !29
  %529 = load ptr, ptr %7, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.friso_task_entry, ptr %529, i32 0, i32 9
  %531 = getelementptr inbounds [7 x i8], ptr %530, i64 0, i64 0
  %532 = call i32 @friso_dic_match(ptr noundef %528, i32 noundef 9, ptr noundef %531)
  %533 = icmp ne i32 %532, 0
  br i1 %533, label %534, label %535

534:                                              ; preds = %525
  br label %140, !llvm.loop !39

535:                                              ; preds = %525, %519
  %536 = load ptr, ptr %7, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.friso_task_entry, ptr %536, i32 0, i32 9
  %538 = getelementptr inbounds [7 x i8], ptr %537, i64 0, i64 0
  %539 = load i8, ptr %538, align 8, !tbaa !27
  %540 = load ptr, ptr %7, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.friso_task_entry, ptr %540, i32 0, i32 8
  %542 = load ptr, ptr %541, align 8, !tbaa !15
  %543 = getelementptr inbounds %struct.friso_token_entry, ptr %542, i32 0, i32 5
  %544 = getelementptr inbounds [64 x i8], ptr %543, i64 0, i64 0
  store i8 %539, ptr %544, align 4, !tbaa !27
  %545 = load ptr, ptr %7, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.friso_task_entry, ptr %545, i32 0, i32 8
  %547 = load ptr, ptr %546, align 8, !tbaa !15
  %548 = getelementptr inbounds %struct.friso_token_entry, ptr %547, i32 0, i32 0
  store i8 17, ptr %548, align 4, !tbaa !20
  %549 = load ptr, ptr %7, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.friso_task_entry, ptr %549, i32 0, i32 3
  %551 = load i32, ptr %550, align 8, !tbaa !37
  %552 = trunc i32 %551 to i8
  %553 = load ptr, ptr %7, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.friso_task_entry, ptr %553, i32 0, i32 8
  %555 = load ptr, ptr %554, align 8, !tbaa !15
  %556 = getelementptr inbounds %struct.friso_token_entry, ptr %555, i32 0, i32 1
  store i8 %552, ptr %556, align 1, !tbaa !22
  %557 = load ptr, ptr %7, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.friso_task_entry, ptr %557, i32 0, i32 3
  %559 = load i32, ptr %558, align 8, !tbaa !37
  %560 = trunc i32 %559 to i8
  %561 = load ptr, ptr %7, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.friso_task_entry, ptr %561, i32 0, i32 8
  %563 = load ptr, ptr %562, align 8, !tbaa !15
  %564 = getelementptr inbounds %struct.friso_token_entry, ptr %563, i32 0, i32 2
  store i8 %560, ptr %564, align 2, !tbaa !24
  %565 = load ptr, ptr %7, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.friso_task_entry, ptr %565, i32 0, i32 1
  %567 = load i32, ptr %566, align 8, !tbaa !35
  %568 = load ptr, ptr %7, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.friso_task_entry, ptr %568, i32 0, i32 3
  %570 = load i32, ptr %569, align 8, !tbaa !37
  %571 = sub i32 %567, %570
  %572 = load ptr, ptr %7, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.friso_task_entry, ptr %572, i32 0, i32 8
  %574 = load ptr, ptr %573, align 8, !tbaa !15
  %575 = getelementptr inbounds %struct.friso_token_entry, ptr %574, i32 0, i32 4
  store i32 %571, ptr %575, align 4, !tbaa !26
  %576 = load ptr, ptr %7, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.friso_task_entry, ptr %576, i32 0, i32 8
  %578 = load ptr, ptr %577, align 8, !tbaa !15
  %579 = getelementptr inbounds %struct.friso_token_entry, ptr %578, i32 0, i32 5
  %580 = getelementptr inbounds [64 x i8], ptr %579, i64 0, i64 1
  store i8 0, ptr %580, align 1, !tbaa !27
  %581 = load ptr, ptr %7, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.friso_task_entry, ptr %581, i32 0, i32 8
  %583 = load ptr, ptr %582, align 8, !tbaa !15
  store ptr %583, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

584:                                              ; preds = %512
  %585 = load ptr, ptr %5, align 8, !tbaa !5
  %586 = load ptr, ptr %6, align 8, !tbaa !5
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = call ptr @next_basic_latin(ptr noundef %585, ptr noundef %586, ptr noundef %587)
  store ptr %588, ptr %11, align 8, !tbaa !5
  %589 = load ptr, ptr %7, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.friso_task_entry, ptr %589, i32 0, i32 1
  %591 = load i32, ptr %590, align 8, !tbaa !35
  %592 = load ptr, ptr %11, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.lex_entry_cdt, ptr %592, i32 0, i32 1
  %594 = load i8, ptr %593, align 1, !tbaa !23
  %595 = zext i8 %594 to i32
  %596 = sub i32 %591, %595
  %597 = load ptr, ptr %11, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.lex_entry_cdt, ptr %597, i32 0, i32 4
  store i32 %596, ptr %598, align 4, !tbaa !25
  store ptr null, ptr %13, align 8, !tbaa !5
  %599 = load ptr, ptr %6, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.friso_config_struct, ptr %599, i32 0, i32 8
  %601 = load i16, ptr %600, align 8, !tbaa !46
  %602 = zext i16 %601 to i32
  %603 = icmp eq i32 %602, 1
  br i1 %603, label %604, label %616

604:                                              ; preds = %584
  %605 = load ptr, ptr %7, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.friso_task_entry, ptr %605, i32 0, i32 5
  %607 = load i32, ptr %606, align 8, !tbaa !47
  %608 = and i32 %607, 2
  %609 = icmp ne i32 %608, 0
  br i1 %609, label %610, label %616

610:                                              ; preds = %604
  %611 = load ptr, ptr %5, align 8, !tbaa !5
  %612 = load ptr, ptr %6, align 8, !tbaa !5
  %613 = load ptr, ptr %7, align 8, !tbaa !5
  %614 = load ptr, ptr %11, align 8, !tbaa !5
  %615 = call ptr @en_second_seg(ptr noundef %611, ptr noundef %612, ptr noundef %613, ptr noundef %614, i32 noundef 1)
  store ptr %615, ptr %13, align 8, !tbaa !5
  br label %616

616:                                              ; preds = %610, %604, %584
  %617 = load ptr, ptr %6, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.friso_config_struct, ptr %617, i32 0, i32 5
  %619 = load i16, ptr %618, align 2, !tbaa !48
  %620 = zext i16 %619 to i32
  %621 = icmp ne i32 %620, 0
  br i1 %621, label %622, label %651

622:                                              ; preds = %616
  %623 = load ptr, ptr %5, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.friso_entry, ptr %623, i32 0, i32 0
  %625 = load ptr, ptr %624, align 8, !tbaa !29
  %626 = load ptr, ptr %11, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.lex_entry_cdt, ptr %626, i32 0, i32 5
  %628 = load ptr, ptr %627, align 8, !tbaa !16
  %629 = call i32 @friso_dic_match(ptr noundef %625, i32 noundef 9, ptr noundef %628)
  %630 = icmp ne i32 %629, 0
  br i1 %630, label %631, label %651

631:                                              ; preds = %622
  br label %632

632:                                              ; preds = %631
  %633 = load ptr, ptr %11, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.lex_entry_cdt, ptr %633, i32 0, i32 2
  %635 = load i8, ptr %634, align 2, !tbaa !19
  %636 = zext i8 %635 to i32
  %637 = icmp eq i32 %636, 15
  br i1 %637, label %638, label %643

638:                                              ; preds = %632
  %639 = load ptr, ptr %11, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.lex_entry_cdt, ptr %639, i32 0, i32 5
  %641 = load ptr, ptr %640, align 8, !tbaa !16
  call void @free(ptr noundef %641) #6
  %642 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free_lex_entry(ptr noundef %642)
  br label %643

643:                                              ; preds = %638, %632
  br label %644

644:                                              ; preds = %643
  br label %645

645:                                              ; preds = %644
  %646 = load ptr, ptr %13, align 8, !tbaa !5
  %647 = icmp eq ptr %646, null
  br i1 %647, label %648, label %649

648:                                              ; preds = %645
  br label %140, !llvm.loop !39

649:                                              ; preds = %645
  %650 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %650, ptr %11, align 8, !tbaa !5
  br label %674

651:                                              ; preds = %622, %616
  %652 = load ptr, ptr %13, align 8, !tbaa !5
  %653 = icmp ne ptr %652, null
  br i1 %653, label %654, label %673

654:                                              ; preds = %651
  %655 = load ptr, ptr %6, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.friso_config_struct, ptr %655, i32 0, i32 4
  %657 = load i16, ptr %656, align 8, !tbaa !45
  %658 = zext i16 %657 to i32
  %659 = icmp eq i32 %658, 1
  br i1 %659, label %660, label %667

660:                                              ; preds = %654
  %661 = load ptr, ptr %11, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.lex_entry_cdt, ptr %661, i32 0, i32 3
  %663 = load i8, ptr %662, align 1, !tbaa !28
  %664 = zext i8 %663 to i32
  %665 = or i32 %664, 1
  %666 = trunc i32 %665 to i8
  store i8 %666, ptr %662, align 1, !tbaa !28
  br label %667

667:                                              ; preds = %660, %654
  %668 = load ptr, ptr %7, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.friso_task_entry, ptr %668, i32 0, i32 6
  %670 = load ptr, ptr %669, align 8, !tbaa !11
  %671 = load ptr, ptr %11, align 8, !tbaa !5
  call void @link_list_add(ptr noundef %670, ptr noundef %671)
  %672 = load ptr, ptr %13, align 8, !tbaa !5
  store ptr %672, ptr %11, align 8, !tbaa !5
  br label %673

673:                                              ; preds = %667, %651
  br label %674

674:                                              ; preds = %673, %649
  %675 = load ptr, ptr %7, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.friso_task_entry, ptr %675, i32 0, i32 8
  %677 = load ptr, ptr %676, align 8, !tbaa !15
  %678 = getelementptr inbounds %struct.friso_token_entry, ptr %677, i32 0, i32 5
  %679 = getelementptr inbounds [64 x i8], ptr %678, i64 0, i64 0
  %680 = load ptr, ptr %11, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.lex_entry_cdt, ptr %680, i32 0, i32 5
  %682 = load ptr, ptr %681, align 8, !tbaa !16
  %683 = load ptr, ptr %11, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.lex_entry_cdt, ptr %683, i32 0, i32 0
  %685 = load i8, ptr %684, align 8, !tbaa !18
  %686 = zext i8 %685 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %679, ptr align 1 %682, i64 %686, i1 false)
  %687 = load ptr, ptr %11, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.lex_entry_cdt, ptr %687, i32 0, i32 2
  %689 = load i8, ptr %688, align 2, !tbaa !19
  %690 = load ptr, ptr %7, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.friso_task_entry, ptr %690, i32 0, i32 8
  %692 = load ptr, ptr %691, align 8, !tbaa !15
  %693 = getelementptr inbounds %struct.friso_token_entry, ptr %692, i32 0, i32 0
  store i8 %689, ptr %693, align 4, !tbaa !20
  %694 = load ptr, ptr %11, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.lex_entry_cdt, ptr %694, i32 0, i32 0
  %696 = load i8, ptr %695, align 8, !tbaa !18
  %697 = load ptr, ptr %7, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.friso_task_entry, ptr %697, i32 0, i32 8
  %699 = load ptr, ptr %698, align 8, !tbaa !15
  %700 = getelementptr inbounds %struct.friso_token_entry, ptr %699, i32 0, i32 1
  store i8 %696, ptr %700, align 1, !tbaa !22
  %701 = load ptr, ptr %11, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.lex_entry_cdt, ptr %701, i32 0, i32 1
  %703 = load i8, ptr %702, align 1, !tbaa !23
  %704 = load ptr, ptr %7, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.friso_task_entry, ptr %704, i32 0, i32 8
  %706 = load ptr, ptr %705, align 8, !tbaa !15
  %707 = getelementptr inbounds %struct.friso_token_entry, ptr %706, i32 0, i32 2
  store i8 %703, ptr %707, align 2, !tbaa !24
  %708 = load ptr, ptr %11, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.lex_entry_cdt, ptr %708, i32 0, i32 4
  %710 = load i32, ptr %709, align 4, !tbaa !25
  %711 = load ptr, ptr %7, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.friso_task_entry, ptr %711, i32 0, i32 8
  %713 = load ptr, ptr %712, align 8, !tbaa !15
  %714 = getelementptr inbounds %struct.friso_token_entry, ptr %713, i32 0, i32 4
  store i32 %710, ptr %714, align 4, !tbaa !26
  %715 = load ptr, ptr %7, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.friso_task_entry, ptr %715, i32 0, i32 8
  %717 = load ptr, ptr %716, align 8, !tbaa !15
  %718 = getelementptr inbounds %struct.friso_token_entry, ptr %717, i32 0, i32 5
  %719 = load ptr, ptr %11, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.lex_entry_cdt, ptr %719, i32 0, i32 0
  %721 = load i8, ptr %720, align 8, !tbaa !18
  %722 = zext i8 %721 to i64
  %723 = getelementptr inbounds [64 x i8], ptr %718, i64 0, i64 %722
  store i8 0, ptr %723, align 1, !tbaa !27
  %724 = load ptr, ptr %13, align 8, !tbaa !5
  %725 = icmp eq ptr %724, null
  br i1 %725, label %726, label %768

726:                                              ; preds = %674
  %727 = load ptr, ptr %6, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.friso_config_struct, ptr %727, i32 0, i32 4
  %729 = load i16, ptr %728, align 8, !tbaa !45
  %730 = zext i16 %729 to i32
  %731 = icmp eq i32 %730, 1
  br i1 %731, label %732, label %768

732:                                              ; preds = %726
  br label %733

733:                                              ; preds = %732
  %734 = load ptr, ptr %5, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.friso_entry, ptr %734, i32 0, i32 0
  %736 = load ptr, ptr %735, align 8, !tbaa !29
  %737 = load ptr, ptr %11, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.lex_entry_cdt, ptr %737, i32 0, i32 5
  %739 = load ptr, ptr %738, align 8, !tbaa !16
  %740 = call ptr @friso_dic_get(ptr noundef %736, i32 noundef 11, ptr noundef %739)
  store ptr %740, ptr %12, align 8, !tbaa !5
  %741 = icmp ne ptr %740, null
  br i1 %741, label %742, label %765

742:                                              ; preds = %733
  %743 = load ptr, ptr %12, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.lex_entry_cdt, ptr %743, i32 0, i32 6
  %745 = load ptr, ptr %744, align 8, !tbaa !31
  %746 = icmp ne ptr %745, null
  br i1 %746, label %747, label %765

747:                                              ; preds = %742
  %748 = load ptr, ptr %6, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.friso_config_struct, ptr %748, i32 0, i32 7
  %750 = load i16, ptr %749, align 2, !tbaa !32
  %751 = zext i16 %750 to i32
  %752 = icmp eq i32 %751, 1
  br i1 %752, label %753, label %756

753:                                              ; preds = %747
  %754 = load ptr, ptr %7, align 8, !tbaa !5
  %755 = load ptr, ptr %12, align 8, !tbaa !5
  call void @token_sphinx_output(ptr noundef %754, ptr noundef %755)
  br label %764

756:                                              ; preds = %747
  %757 = load ptr, ptr %11, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.lex_entry_cdt, ptr %757, i32 0, i32 4
  %759 = load i32, ptr %758, align 4, !tbaa !25
  %760 = load ptr, ptr %12, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.lex_entry_cdt, ptr %760, i32 0, i32 4
  store i32 %759, ptr %761, align 4, !tbaa !25
  %762 = load ptr, ptr %7, align 8, !tbaa !5
  %763 = load ptr, ptr %12, align 8, !tbaa !5
  call void @token_normal_output(ptr noundef %762, ptr noundef %763, i32 noundef 0)
  br label %764

764:                                              ; preds = %756, %753
  br label %765

765:                                              ; preds = %764, %742, %733
  br label %766

766:                                              ; preds = %765
  br label %767

767:                                              ; preds = %766
  br label %768

768:                                              ; preds = %767, %726, %674
  br label %769

769:                                              ; preds = %768
  %770 = load ptr, ptr %11, align 8, !tbaa !5
  %771 = getelementptr inbounds %struct.lex_entry_cdt, ptr %770, i32 0, i32 2
  %772 = load i8, ptr %771, align 2, !tbaa !19
  %773 = zext i8 %772 to i32
  %774 = icmp eq i32 %773, 15
  br i1 %774, label %775, label %780

775:                                              ; preds = %769
  %776 = load ptr, ptr %11, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.lex_entry_cdt, ptr %776, i32 0, i32 5
  %778 = load ptr, ptr %777, align 8, !tbaa !16
  call void @free(ptr noundef %778) #6
  %779 = load ptr, ptr %11, align 8, !tbaa !5
  call void @free_lex_entry(ptr noundef %779)
  br label %780

780:                                              ; preds = %775, %769
  br label %781

781:                                              ; preds = %780
  br label %782

782:                                              ; preds = %781
  %783 = load ptr, ptr %7, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.friso_task_entry, ptr %783, i32 0, i32 8
  %785 = load ptr, ptr %784, align 8, !tbaa !15
  store ptr %785, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

786:                                              ; preds = %505
  %787 = load ptr, ptr %5, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.friso_entry, ptr %787, i32 0, i32 1
  %789 = load i32, ptr %788, align 8, !tbaa !38
  %790 = load ptr, ptr %7, align 8, !tbaa !5
  %791 = call i32 @friso_cn_punctuation(i32 noundef %789, ptr noundef %790)
  %792 = icmp ne i32 %791, 0
  br i1 %792, label %793, label %857

793:                                              ; preds = %786
  %794 = load ptr, ptr %6, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.friso_config_struct, ptr %794, i32 0, i32 5
  %796 = load i16, ptr %795, align 2, !tbaa !48
  %797 = zext i16 %796 to i32
  %798 = icmp ne i32 %797, 0
  br i1 %798, label %799, label %809

799:                                              ; preds = %793
  %800 = load ptr, ptr %5, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.friso_entry, ptr %800, i32 0, i32 0
  %802 = load ptr, ptr %801, align 8, !tbaa !29
  %803 = load ptr, ptr %7, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.friso_task_entry, ptr %803, i32 0, i32 9
  %805 = getelementptr inbounds [7 x i8], ptr %804, i64 0, i64 0
  %806 = call i32 @friso_dic_match(ptr noundef %802, i32 noundef 9, ptr noundef %805)
  %807 = icmp ne i32 %806, 0
  br i1 %807, label %808, label %809

808:                                              ; preds = %799
  br label %140, !llvm.loop !39

809:                                              ; preds = %799, %793
  %810 = load ptr, ptr %7, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.friso_task_entry, ptr %810, i32 0, i32 8
  %812 = load ptr, ptr %811, align 8, !tbaa !15
  %813 = getelementptr inbounds %struct.friso_token_entry, ptr %812, i32 0, i32 5
  %814 = getelementptr inbounds [64 x i8], ptr %813, i64 0, i64 0
  %815 = load ptr, ptr %7, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.friso_task_entry, ptr %815, i32 0, i32 9
  %817 = getelementptr inbounds [7 x i8], ptr %816, i64 0, i64 0
  %818 = load ptr, ptr %7, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.friso_task_entry, ptr %818, i32 0, i32 3
  %820 = load i32, ptr %819, align 8, !tbaa !37
  %821 = zext i32 %820 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %814, ptr align 8 %817, i64 %821, i1 false)
  %822 = load ptr, ptr %7, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.friso_task_entry, ptr %822, i32 0, i32 8
  %824 = load ptr, ptr %823, align 8, !tbaa !15
  %825 = getelementptr inbounds %struct.friso_token_entry, ptr %824, i32 0, i32 0
  store i8 17, ptr %825, align 4, !tbaa !20
  %826 = load ptr, ptr %7, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.friso_task_entry, ptr %826, i32 0, i32 3
  %828 = load i32, ptr %827, align 8, !tbaa !37
  %829 = trunc i32 %828 to i8
  %830 = load ptr, ptr %7, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.friso_task_entry, ptr %830, i32 0, i32 8
  %832 = load ptr, ptr %831, align 8, !tbaa !15
  %833 = getelementptr inbounds %struct.friso_token_entry, ptr %832, i32 0, i32 1
  store i8 %829, ptr %833, align 1, !tbaa !22
  %834 = load ptr, ptr %7, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.friso_task_entry, ptr %834, i32 0, i32 1
  %836 = load i32, ptr %835, align 8, !tbaa !35
  %837 = load ptr, ptr %7, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.friso_task_entry, ptr %837, i32 0, i32 3
  %839 = load i32, ptr %838, align 8, !tbaa !37
  %840 = sub i32 %836, %839
  %841 = load ptr, ptr %7, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.friso_task_entry, ptr %841, i32 0, i32 8
  %843 = load ptr, ptr %842, align 8, !tbaa !15
  %844 = getelementptr inbounds %struct.friso_token_entry, ptr %843, i32 0, i32 4
  store i32 %840, ptr %844, align 4, !tbaa !26
  %845 = load ptr, ptr %7, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.friso_task_entry, ptr %845, i32 0, i32 8
  %847 = load ptr, ptr %846, align 8, !tbaa !15
  %848 = getelementptr inbounds %struct.friso_token_entry, ptr %847, i32 0, i32 5
  %849 = load ptr, ptr %7, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.friso_task_entry, ptr %849, i32 0, i32 3
  %851 = load i32, ptr %850, align 8, !tbaa !37
  %852 = zext i32 %851 to i64
  %853 = getelementptr inbounds [64 x i8], ptr %848, i64 0, i64 %852
  store i8 0, ptr %853, align 1, !tbaa !27
  %854 = load ptr, ptr %7, align 8, !tbaa !5
  %855 = getelementptr inbounds %struct.friso_task_entry, ptr %854, i32 0, i32 8
  %856 = load ptr, ptr %855, align 8, !tbaa !15
  store ptr %856, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

857:                                              ; preds = %786
  %858 = load ptr, ptr %6, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.friso_config_struct, ptr %858, i32 0, i32 6
  %860 = load i16, ptr %859, align 4, !tbaa !49
  %861 = icmp ne i16 %860, 0
  br i1 %861, label %862, label %910

862:                                              ; preds = %857
  %863 = load ptr, ptr %7, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.friso_task_entry, ptr %863, i32 0, i32 8
  %865 = load ptr, ptr %864, align 8, !tbaa !15
  %866 = getelementptr inbounds %struct.friso_token_entry, ptr %865, i32 0, i32 5
  %867 = getelementptr inbounds [64 x i8], ptr %866, i64 0, i64 0
  %868 = load ptr, ptr %7, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.friso_task_entry, ptr %868, i32 0, i32 9
  %870 = getelementptr inbounds [7 x i8], ptr %869, i64 0, i64 0
  %871 = load ptr, ptr %7, align 8, !tbaa !5
  %872 = getelementptr inbounds %struct.friso_task_entry, ptr %871, i32 0, i32 3
  %873 = load i32, ptr %872, align 8, !tbaa !37
  %874 = zext i32 %873 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %867, ptr align 8 %870, i64 %874, i1 false)
  %875 = load ptr, ptr %7, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.friso_task_entry, ptr %875, i32 0, i32 8
  %877 = load ptr, ptr %876, align 8, !tbaa !15
  %878 = getelementptr inbounds %struct.friso_token_entry, ptr %877, i32 0, i32 0
  store i8 18, ptr %878, align 4, !tbaa !20
  %879 = load ptr, ptr %7, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.friso_task_entry, ptr %879, i32 0, i32 3
  %881 = load i32, ptr %880, align 8, !tbaa !37
  %882 = trunc i32 %881 to i8
  %883 = load ptr, ptr %7, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct.friso_task_entry, ptr %883, i32 0, i32 8
  %885 = load ptr, ptr %884, align 8, !tbaa !15
  %886 = getelementptr inbounds %struct.friso_token_entry, ptr %885, i32 0, i32 1
  store i8 %882, ptr %886, align 1, !tbaa !22
  %887 = load ptr, ptr %7, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.friso_task_entry, ptr %887, i32 0, i32 1
  %889 = load i32, ptr %888, align 8, !tbaa !35
  %890 = load ptr, ptr %7, align 8, !tbaa !5
  %891 = getelementptr inbounds %struct.friso_task_entry, ptr %890, i32 0, i32 3
  %892 = load i32, ptr %891, align 8, !tbaa !37
  %893 = sub i32 %889, %892
  %894 = load ptr, ptr %7, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.friso_task_entry, ptr %894, i32 0, i32 8
  %896 = load ptr, ptr %895, align 8, !tbaa !15
  %897 = getelementptr inbounds %struct.friso_token_entry, ptr %896, i32 0, i32 4
  store i32 %893, ptr %897, align 4, !tbaa !26
  %898 = load ptr, ptr %7, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.friso_task_entry, ptr %898, i32 0, i32 8
  %900 = load ptr, ptr %899, align 8, !tbaa !15
  %901 = getelementptr inbounds %struct.friso_token_entry, ptr %900, i32 0, i32 5
  %902 = load ptr, ptr %7, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.friso_task_entry, ptr %902, i32 0, i32 3
  %904 = load i32, ptr %903, align 8, !tbaa !37
  %905 = zext i32 %904 to i64
  %906 = getelementptr inbounds [64 x i8], ptr %901, i64 0, i64 %905
  store i8 0, ptr %906, align 1, !tbaa !27
  %907 = load ptr, ptr %7, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.friso_task_entry, ptr %907, i32 0, i32 8
  %909 = load ptr, ptr %908, align 8, !tbaa !15
  store ptr %909, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

910:                                              ; preds = %857
  br label %911

911:                                              ; preds = %910
  br label %912

912:                                              ; preds = %911
  br label %913

913:                                              ; preds = %912
  br label %140, !llvm.loop !39

914:                                              ; preds = %163, %140
  store ptr null, ptr %4, align 8
  store i32 1, ptr %14, align 4
  br label %915

915:                                              ; preds = %914, %862, %809, %782, %535, %494, %188, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  %916 = load ptr, ptr %4, align 8
  ret ptr %916
}

declare void @free_string_buffer(ptr noundef) #4

declare ptr @new_string_buffer_with_string(ptr noundef) #4

declare ptr @friso_dic_get(ptr noundef, i32 noundef, ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @readNextWord(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @friso_whitespace(i32 noundef, ptr noundef) #4

declare i32 @friso_cn_string(i32 noundef, ptr noundef) #4

declare void @string_buffer_append(ptr noundef, ptr noundef) #4

declare i32 @friso_dic_match(ptr noundef, i32 noundef, ptr noundef) #4

declare ptr @link_list_remove_first(ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @token_sphinx_output(ptr noundef, ptr noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @token_normal_output(ptr noundef, ptr noundef, i32 noundef) #5

declare void @free_lex_entry(ptr noundef) #4

declare i32 @friso_en_letter(i32 noundef, ptr noundef) #4

declare i32 @friso_numeric_letter(i32 noundef, ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @next_basic_latin(ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @en_second_seg(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #5

declare void @link_list_add(ptr noundef, ptr noundef) #4

declare i32 @friso_halfwidth_en_char(i32 noundef, ptr noundef) #4

declare i32 @friso_fullwidth_en_char(i32 noundef, ptr noundef) #4

declare i32 @friso_en_punctuation(i32 noundef, ptr noundef) #4

declare i32 @friso_cn_punctuation(i32 noundef, ptr noundef) #4

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

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

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


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

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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @next_mmseg_token(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #2 {
  %4 = getelementptr inbounds i8, ptr %2, i64 32
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %5, i64 16
  %7 = load i32, ptr %6, align 8, !tbaa !11
  %8 = icmp eq i32 %7, 0
  br i1 %8, label %.preheader, label %22

.preheader:                                       ; preds = %3
  %9 = getelementptr inbounds i8, ptr %2, i64 8
  %10 = getelementptr inbounds i8, ptr %2, i64 12
  %11 = load i32, ptr %9, align 8, !tbaa !13
  %12 = load i32, ptr %10, align 4, !tbaa !14
  %13 = icmp ult i32 %11, %12
  br i1 %13, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.preheader
  %14 = getelementptr inbounds i8, ptr %2, i64 56
  %15 = getelementptr inbounds i8, ptr %2, i64 16
  %16 = getelementptr inbounds i8, ptr %0, i64 8
  %17 = getelementptr inbounds i8, ptr %1, i64 40
  %18 = getelementptr inbounds i8, ptr %1, i64 10
  %19 = getelementptr inbounds i8, ptr %1, i64 16
  %20 = getelementptr inbounds i8, ptr %2, i64 24
  %21 = getelementptr inbounds i8, ptr %1, i64 12
  br label %68

22:                                               ; preds = %3
  %23 = tail call ptr @link_list_remove_first(ptr noundef nonnull %5) #5
  %24 = getelementptr inbounds i8, ptr %2, i64 48
  %25 = load ptr, ptr %24, align 8, !tbaa !15
  %26 = getelementptr inbounds i8, ptr %25, i64 8
  %27 = getelementptr inbounds i8, ptr %23, i64 8
  %28 = load ptr, ptr %27, align 8, !tbaa !16
  %29 = load i8, ptr %23, align 8, !tbaa !18
  %30 = zext i8 %29 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %26, ptr align 1 %28, i64 %30, i1 false)
  %31 = getelementptr inbounds i8, ptr %23, i64 2
  %32 = load i8, ptr %31, align 2, !tbaa !19
  %33 = load ptr, ptr %24, align 8, !tbaa !15
  store i8 %32, ptr %33, align 4, !tbaa !20
  %34 = load i8, ptr %23, align 8, !tbaa !18
  %35 = getelementptr inbounds i8, ptr %33, i64 1
  store i8 %34, ptr %35, align 1, !tbaa !22
  %36 = getelementptr inbounds i8, ptr %23, i64 1
  %37 = load i8, ptr %36, align 1, !tbaa !23
  %38 = getelementptr inbounds i8, ptr %33, i64 2
  store i8 %37, ptr %38, align 2, !tbaa !24
  %39 = getelementptr inbounds i8, ptr %23, i64 4
  %40 = load i32, ptr %39, align 4, !tbaa !25
  %41 = getelementptr inbounds i8, ptr %33, i64 4
  store i32 %40, ptr %41, align 4, !tbaa !26
  %42 = getelementptr inbounds i8, ptr %33, i64 8
  %43 = zext i8 %34 to i64
  %44 = getelementptr inbounds [64 x i8], ptr %42, i64 0, i64 %43
  store i8 0, ptr %44, align 1, !tbaa !27
  %45 = getelementptr inbounds i8, ptr %23, i64 3
  %46 = load i8, ptr %45, align 1, !tbaa !28
  %47 = and i8 %46, 1
  %.not = icmp eq i8 %47, 0
  br i1 %.not, label %64, label %48

48:                                               ; preds = %22
  %49 = and i8 %46, -2
  store i8 %49, ptr %45, align 1, !tbaa !28
  %50 = load ptr, ptr %0, align 8, !tbaa !29
  %51 = load ptr, ptr %27, align 8, !tbaa !16
  %52 = tail call ptr @friso_dic_get(ptr noundef %50, i32 noundef 11, ptr noundef %51) #5
  %.not250 = icmp eq ptr %52, null
  br i1 %.not250, label %64, label %53

53:                                               ; preds = %48
  %54 = getelementptr inbounds i8, ptr %52, i64 16
  %55 = load ptr, ptr %54, align 8, !tbaa !31
  %.not251 = icmp eq ptr %55, null
  br i1 %.not251, label %64, label %56

56:                                               ; preds = %53
  %57 = getelementptr inbounds i8, ptr %1, i64 14
  %58 = load i16, ptr %57, align 2, !tbaa !32
  %59 = icmp eq i16 %58, 1
  br i1 %59, label %60, label %61

60:                                               ; preds = %56
  tail call void @token_sphinx_output(ptr noundef nonnull %2, ptr noundef nonnull %52)
  br label %64

61:                                               ; preds = %56
  %62 = load i32, ptr %39, align 4, !tbaa !25
  %63 = getelementptr inbounds i8, ptr %52, i64 4
  store i32 %62, ptr %63, align 4, !tbaa !25
  tail call void @token_normal_output(ptr noundef nonnull %2, ptr noundef nonnull %52, i32 noundef 1)
  br label %64

64:                                               ; preds = %48, %53, %61, %60, %22
  %65 = load i8, ptr %31, align 2, !tbaa !19
  switch i8 %65, label %.loopexit.sink.split [
    i8 15, label %66
    i8 16, label %.sink.split
  ]

66:                                               ; preds = %64
  %67 = load ptr, ptr %27, align 8, !tbaa !16
  tail call void @free(ptr noundef %67) #5
  br label %.sink.split

.sink.split:                                      ; preds = %64, %66
  tail call void @free_lex_entry(ptr noundef nonnull %23) #5
  br label %.loopexit.sink.split

68:                                               ; preds = %.lr.ph, %.backedge
  %69 = tail call i32 @readNextWord(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %9, ptr noundef nonnull %14)
  store i32 %69, ptr %15, align 8, !tbaa !35
  %70 = icmp eq i32 %69, 0
  br i1 %70, label %.loopexit, label %71

71:                                               ; preds = %68
  %72 = load i32, ptr %16, align 8, !tbaa !36
  %73 = tail call i32 @friso_whitespace(i32 noundef %72, ptr noundef nonnull %2) #5
  %.not252 = icmp eq i32 %73, 0
  br i1 %.not252, label %77, label %.backedge

.backedge:                                        ; preds = %71, %100, %221, %266, %329, %348
  %74 = load i32, ptr %9, align 8, !tbaa !13
  %75 = load i32, ptr %10, align 4, !tbaa !14
  %76 = icmp ult i32 %74, %75
  br i1 %76, label %68, label %.loopexit, !llvm.loop !37

77:                                               ; preds = %71
  %78 = load i32, ptr %16, align 8, !tbaa !36
  %79 = tail call i32 @friso_cn_string(i32 noundef %78, ptr noundef nonnull %2) #5
  %.not253 = icmp eq i32 %79, 0
  br i1 %.not253, label %210, label %80

80:                                               ; preds = %77
  %81 = load ptr, ptr %0, align 8, !tbaa !29
  %82 = tail call i32 @friso_dic_match(ptr noundef %81, i32 noundef 0, ptr noundef nonnull %14) #5
  %.not269 = icmp eq i32 %82, 0
  br i1 %.not269, label %83, label %100

83:                                               ; preds = %80
  %84 = getelementptr inbounds i8, ptr %2, i64 48
  %85 = load ptr, ptr %84, align 8, !tbaa !15
  %86 = getelementptr inbounds i8, ptr %85, i64 8
  %87 = load i32, ptr %15, align 8, !tbaa !35
  %88 = zext i32 %87 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %86, ptr nonnull align 8 %14, i64 %88, i1 false)
  %89 = load ptr, ptr %84, align 8, !tbaa !15
  store i8 17, ptr %89, align 4, !tbaa !20
  %90 = load i32, ptr %15, align 8, !tbaa !35
  %91 = trunc i32 %90 to i8
  %92 = getelementptr inbounds i8, ptr %89, i64 1
  store i8 %91, ptr %92, align 1, !tbaa !22
  %93 = getelementptr inbounds i8, ptr %89, i64 2
  store i8 %91, ptr %93, align 2, !tbaa !24
  %94 = load i32, ptr %9, align 8, !tbaa !13
  %95 = sub i32 %94, %90
  %96 = getelementptr inbounds i8, ptr %89, i64 4
  store i32 %95, ptr %96, align 4, !tbaa !26
  %97 = getelementptr inbounds i8, ptr %89, i64 8
  %98 = sext i32 %90 to i64
  %99 = getelementptr inbounds [64 x i8], ptr %97, i64 0, i64 %98
  store i8 0, ptr %99, align 1, !tbaa !27
  br label %.loopexit.sink.split

100:                                              ; preds = %80
  %101 = load ptr, ptr %17, align 8, !tbaa !39
  %102 = tail call ptr %101(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %2) #5
  %103 = icmp eq ptr %102, null
  br i1 %103, label %.backedge, label %104

104:                                              ; preds = %100
  %105 = load i32, ptr %9, align 8, !tbaa !13
  %106 = getelementptr inbounds i8, ptr %102, i64 1
  %107 = load i8, ptr %106, align 1, !tbaa !23
  %108 = zext i8 %107 to i32
  %109 = sub i32 %105, %108
  %110 = getelementptr inbounds i8, ptr %102, i64 4
  store i32 %109, ptr %110, align 4, !tbaa !25
  %111 = load i32, ptr %10, align 4, !tbaa !14
  %112 = icmp ult i32 %105, %111
  br i1 %112, label %113, label %159

113:                                              ; preds = %104
  %114 = load ptr, ptr %2, align 8, !tbaa !40
  %115 = zext i32 %105 to i64
  %116 = getelementptr inbounds i8, ptr %114, i64 %115
  %117 = load i8, ptr %116, align 1, !tbaa !27
  %118 = icmp sgt i8 %117, 0
  br i1 %118, label %119, label %159

119:                                              ; preds = %113
  %120 = load i32, ptr %16, align 8, !tbaa !36
  %121 = tail call i32 @friso_en_letter(i32 noundef %120, ptr noundef nonnull %2) #5
  %.not270 = icmp eq i32 %121, 0
  br i1 %.not270, label %122, label %125

122:                                              ; preds = %119
  %123 = load i32, ptr %16, align 8, !tbaa !36
  %124 = tail call i32 @friso_numeric_letter(i32 noundef %123, ptr noundef nonnull %2) #5
  %.not271 = icmp eq i32 %124, 0
  br i1 %.not271, label %159, label %125

125:                                              ; preds = %122, %119
  %126 = getelementptr inbounds i8, ptr %102, i64 8
  %127 = load ptr, ptr %126, align 8, !tbaa !16
  %128 = tail call ptr @new_string_buffer_with_string(ptr noundef %127) #5
  %129 = load ptr, ptr %2, align 8, !tbaa !40
  %130 = load i32, ptr %9, align 8, !tbaa !13
  %131 = add i32 %130, 1
  store i32 %131, ptr %9, align 8, !tbaa !13
  %132 = zext i32 %130 to i64
  %133 = getelementptr inbounds i8, ptr %129, i64 %132
  %134 = load i8, ptr %133, align 1, !tbaa !27
  store i8 %134, ptr %14, align 8, !tbaa !27
  %135 = getelementptr inbounds i8, ptr %2, i64 57
  store i8 0, ptr %135, align 1, !tbaa !27
  %136 = tail call ptr @next_basic_latin(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2)
  %137 = load i32, ptr %9, align 8, !tbaa !13
  %138 = load i8, ptr %136, align 8, !tbaa !18
  %139 = zext i8 %138 to i32
  %140 = sub i32 %137, %139
  %141 = getelementptr inbounds i8, ptr %136, i64 4
  store i32 %140, ptr %141, align 4, !tbaa !25
  %142 = getelementptr inbounds i8, ptr %136, i64 8
  %143 = load ptr, ptr %142, align 8, !tbaa !16
  tail call void @string_buffer_append(ptr noundef %128, ptr noundef %143) #5
  %144 = load ptr, ptr %0, align 8, !tbaa !29
  %145 = load ptr, ptr %128, align 8, !tbaa !41
  %146 = tail call i32 @friso_dic_match(ptr noundef %144, i32 noundef 3, ptr noundef %145) #5
  %.not272 = icmp eq i32 %146, 0
  br i1 %.not272, label %159, label %147

147:                                              ; preds = %125
  %148 = load i32, ptr %110, align 4, !tbaa !25
  %149 = load ptr, ptr %0, align 8, !tbaa !29
  %150 = load ptr, ptr %128, align 8, !tbaa !41
  %151 = tail call ptr @friso_dic_get(ptr noundef %149, i32 noundef 3, ptr noundef %150) #5
  %152 = getelementptr inbounds i8, ptr %151, i64 4
  store i32 %148, ptr %152, align 4, !tbaa !25
  %153 = getelementptr inbounds i8, ptr %136, i64 2
  %154 = load i8, ptr %153, align 2, !tbaa !19
  %155 = icmp eq i8 %154, 15
  br i1 %155, label %156, label %158

156:                                              ; preds = %147
  %157 = load ptr, ptr %142, align 8, !tbaa !16
  tail call void @free(ptr noundef %157) #5
  tail call void @free_lex_entry(ptr noundef nonnull %136) #5
  br label %158

158:                                              ; preds = %156, %147
  tail call void @free_string_buffer(ptr noundef nonnull %128) #5
  br label %159

159:                                              ; preds = %125, %158, %122, %113, %104
  %.0244 = phi ptr [ null, %158 ], [ %128, %125 ], [ null, %122 ], [ null, %113 ], [ null, %104 ]
  %.0243 = phi ptr [ %151, %158 ], [ %102, %125 ], [ %102, %122 ], [ %102, %113 ], [ %102, %104 ]
  %.0242 = phi ptr [ null, %158 ], [ %136, %125 ], [ null, %122 ], [ null, %113 ], [ null, %104 ]
  %160 = load i8, ptr %.0243, align 8, !tbaa !18
  %161 = getelementptr inbounds i8, ptr %2, i64 48
  %162 = load ptr, ptr %161, align 8, !tbaa !15
  %163 = getelementptr inbounds i8, ptr %162, i64 8
  %164 = getelementptr inbounds i8, ptr %.0243, i64 8
  %165 = load ptr, ptr %164, align 8, !tbaa !16
  %166 = zext i8 %160 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %163, ptr align 1 %165, i64 %166, i1 false)
  %167 = getelementptr inbounds i8, ptr %.0243, i64 2
  %168 = load i8, ptr %167, align 2, !tbaa !19
  %169 = load ptr, ptr %161, align 8, !tbaa !15
  store i8 %168, ptr %169, align 4, !tbaa !20
  %170 = load i8, ptr %.0243, align 8, !tbaa !18
  %171 = getelementptr inbounds i8, ptr %169, i64 1
  store i8 %170, ptr %171, align 1, !tbaa !22
  %172 = getelementptr inbounds i8, ptr %.0243, i64 1
  %173 = load i8, ptr %172, align 1, !tbaa !23
  %174 = getelementptr inbounds i8, ptr %169, i64 2
  store i8 %173, ptr %174, align 2, !tbaa !24
  %175 = getelementptr inbounds i8, ptr %.0243, i64 4
  %176 = load i32, ptr %175, align 4, !tbaa !25
  %177 = getelementptr inbounds i8, ptr %169, i64 4
  store i32 %176, ptr %177, align 4, !tbaa !26
  %178 = getelementptr inbounds i8, ptr %169, i64 8
  %179 = getelementptr inbounds [64 x i8], ptr %178, i64 0, i64 %166
  store i8 0, ptr %179, align 1, !tbaa !27
  %180 = getelementptr inbounds i8, ptr %1, i64 8
  %181 = load i16, ptr %180, align 8, !tbaa !43
  %.not273 = icmp eq i16 %181, 0
  br i1 %.not273, label %191, label %182

182:                                              ; preds = %159
  %183 = getelementptr inbounds i8, ptr %.0243, i64 16
  %184 = load ptr, ptr %183, align 8, !tbaa !31
  %.not274 = icmp eq ptr %184, null
  br i1 %.not274, label %191, label %185

185:                                              ; preds = %182
  %186 = getelementptr inbounds i8, ptr %1, i64 14
  %187 = load i16, ptr %186, align 2, !tbaa !32
  %188 = icmp eq i16 %187, 1
  br i1 %188, label %189, label %190

189:                                              ; preds = %185
  tail call void @token_sphinx_output(ptr noundef nonnull %2, ptr noundef nonnull %.0243)
  br label %191

190:                                              ; preds = %185
  tail call void @token_normal_output(ptr noundef nonnull %2, ptr noundef nonnull %.0243, i32 noundef 0)
  br label %191

191:                                              ; preds = %189, %190, %182, %159
  %192 = icmp ne ptr %.0242, null
  %193 = icmp ne ptr %.0244, null
  %or.cond = select i1 %192, i1 %193, i1 false
  br i1 %or.cond, label %194, label %.loopexit.sink.split

194:                                              ; preds = %191
  %195 = load i16, ptr %19, align 8, !tbaa !44
  %196 = icmp eq i16 %195, 1
  br i1 %196, label %197, label %202

197:                                              ; preds = %194
  %198 = load i32, ptr %20, align 8, !tbaa !45
  %199 = and i32 %198, 2
  %.not275 = icmp eq i32 %199, 0
  br i1 %.not275, label %202, label %200

200:                                              ; preds = %197
  %201 = tail call ptr @en_second_seg(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %.0242, i32 noundef 0)
  br label %202

202:                                              ; preds = %200, %197, %194
  tail call void @free_string_buffer(ptr noundef nonnull %.0244) #5
  %203 = load ptr, ptr %4, align 8, !tbaa !5
  tail call void @link_list_add(ptr noundef %203, ptr noundef nonnull %.0242) #5
  %204 = load i16, ptr %180, align 8, !tbaa !43
  %205 = icmp eq i16 %204, 1
  br i1 %205, label %206, label %.loopexit.sink.split

206:                                              ; preds = %202
  %207 = getelementptr inbounds i8, ptr %.0242, i64 3
  %208 = load i8, ptr %207, align 1, !tbaa !28
  %209 = or i8 %208, 1
  store i8 %209, ptr %207, align 1, !tbaa !28
  br label %.loopexit.sink.split

210:                                              ; preds = %77
  %211 = load i32, ptr %16, align 8, !tbaa !36
  %212 = tail call i32 @friso_halfwidth_en_char(i32 noundef %211, ptr noundef nonnull %2) #5
  %.not254 = icmp eq i32 %212, 0
  br i1 %.not254, label %213, label %216

213:                                              ; preds = %210
  %214 = load i32, ptr %16, align 8, !tbaa !36
  %215 = tail call i32 @friso_fullwidth_en_char(i32 noundef %214, ptr noundef nonnull %2) #5
  %.not255 = icmp eq i32 %215, 0
  br i1 %.not255, label %324, label %216

216:                                              ; preds = %213, %210
  %217 = load i32, ptr %16, align 8, !tbaa !36
  %218 = tail call i32 @friso_en_punctuation(i32 noundef %217, ptr noundef nonnull %2) #5
  %.not260 = icmp eq i32 %218, 0
  br i1 %.not260, label %238, label %219

219:                                              ; preds = %216
  %220 = load i16, ptr %18, align 2, !tbaa !46
  %.not267 = icmp eq i16 %220, 0
  br i1 %.not267, label %224, label %221

221:                                              ; preds = %219
  %222 = load ptr, ptr %0, align 8, !tbaa !29
  %223 = tail call i32 @friso_dic_match(ptr noundef %222, i32 noundef 9, ptr noundef nonnull %14) #5
  %.not268 = icmp eq i32 %223, 0
  br i1 %.not268, label %224, label %.backedge

224:                                              ; preds = %221, %219
  %225 = load i8, ptr %14, align 8, !tbaa !27
  %226 = getelementptr inbounds i8, ptr %2, i64 48
  %227 = load ptr, ptr %226, align 8, !tbaa !15
  %228 = getelementptr inbounds i8, ptr %227, i64 8
  store i8 %225, ptr %228, align 4, !tbaa !27
  %229 = load ptr, ptr %226, align 8, !tbaa !15
  store i8 17, ptr %229, align 4, !tbaa !20
  %230 = load i32, ptr %15, align 8, !tbaa !35
  %231 = trunc i32 %230 to i8
  %232 = getelementptr inbounds i8, ptr %229, i64 1
  store i8 %231, ptr %232, align 1, !tbaa !22
  %233 = getelementptr inbounds i8, ptr %229, i64 2
  store i8 %231, ptr %233, align 2, !tbaa !24
  %234 = load i32, ptr %9, align 8, !tbaa !13
  %235 = sub i32 %234, %230
  %236 = getelementptr inbounds i8, ptr %229, i64 4
  store i32 %235, ptr %236, align 4, !tbaa !26
  %237 = getelementptr inbounds i8, ptr %229, i64 9
  store i8 0, ptr %237, align 1, !tbaa !27
  br label %.loopexit.sink.split

238:                                              ; preds = %216
  %239 = tail call ptr @next_basic_latin(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %2)
  %240 = load i32, ptr %9, align 8, !tbaa !13
  %241 = getelementptr inbounds i8, ptr %239, i64 1
  %242 = load i8, ptr %241, align 1, !tbaa !23
  %243 = zext i8 %242 to i32
  %244 = sub i32 %240, %243
  %245 = getelementptr inbounds i8, ptr %239, i64 4
  store i32 %244, ptr %245, align 4, !tbaa !25
  %246 = load i16, ptr %19, align 8, !tbaa !44
  %247 = icmp eq i16 %246, 1
  br i1 %247, label %248, label %253

248:                                              ; preds = %238
  %249 = load i32, ptr %20, align 8, !tbaa !45
  %250 = and i32 %249, 2
  %.not261 = icmp eq i32 %250, 0
  br i1 %.not261, label %253, label %251

251:                                              ; preds = %248
  %252 = tail call ptr @en_second_seg(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %239, i32 noundef 1)
  br label %253

253:                                              ; preds = %251, %248, %238
  %.0 = phi ptr [ %252, %251 ], [ null, %248 ], [ null, %238 ]
  %254 = load i16, ptr %18, align 2, !tbaa !46
  %.not262 = icmp eq i16 %254, 0
  br i1 %.not262, label %268, label %255

255:                                              ; preds = %253
  %256 = load ptr, ptr %0, align 8, !tbaa !29
  %257 = getelementptr inbounds i8, ptr %239, i64 8
  %258 = load ptr, ptr %257, align 8, !tbaa !16
  %259 = tail call i32 @friso_dic_match(ptr noundef %256, i32 noundef 9, ptr noundef %258) #5
  %.not263 = icmp eq i32 %259, 0
  br i1 %.not263, label %268, label %260

260:                                              ; preds = %255
  %261 = getelementptr inbounds i8, ptr %239, i64 2
  %262 = load i8, ptr %261, align 2, !tbaa !19
  %263 = icmp eq i8 %262, 15
  br i1 %263, label %264, label %266

264:                                              ; preds = %260
  %265 = load ptr, ptr %257, align 8, !tbaa !16
  tail call void @free(ptr noundef %265) #5
  tail call void @free_lex_entry(ptr noundef nonnull %239) #5
  br label %266

266:                                              ; preds = %264, %260
  %267 = icmp eq ptr %.0, null
  br i1 %267, label %.backedge, label %.loopexit276

268:                                              ; preds = %255, %253
  %.not264 = icmp eq ptr %.0, null
  br i1 %.not264, label %.loopexit276, label %269

269:                                              ; preds = %268
  %270 = getelementptr inbounds i8, ptr %1, i64 8
  %271 = load i16, ptr %270, align 8, !tbaa !43
  %272 = icmp eq i16 %271, 1
  br i1 %272, label %273, label %277

273:                                              ; preds = %269
  %274 = getelementptr inbounds i8, ptr %239, i64 3
  %275 = load i8, ptr %274, align 1, !tbaa !28
  %276 = or i8 %275, 1
  store i8 %276, ptr %274, align 1, !tbaa !28
  br label %277

277:                                              ; preds = %273, %269
  %278 = load ptr, ptr %4, align 8, !tbaa !5
  tail call void @link_list_add(ptr noundef %278, ptr noundef nonnull %239) #5
  br label %.loopexit276

.loopexit276:                                     ; preds = %266, %268, %277
  %.0322 = phi i1 [ false, %277 ], [ true, %268 ], [ false, %266 ]
  %.1 = phi ptr [ %.0, %277 ], [ %239, %268 ], [ %.0, %266 ]
  %279 = getelementptr inbounds i8, ptr %2, i64 48
  %280 = load ptr, ptr %279, align 8, !tbaa !15
  %281 = getelementptr inbounds i8, ptr %280, i64 8
  %282 = getelementptr inbounds i8, ptr %.1, i64 8
  %283 = load ptr, ptr %282, align 8, !tbaa !16
  %284 = load i8, ptr %.1, align 8, !tbaa !18
  %285 = zext i8 %284 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %281, ptr align 1 %283, i64 %285, i1 false)
  %286 = getelementptr inbounds i8, ptr %.1, i64 2
  %287 = load i8, ptr %286, align 2, !tbaa !19
  %288 = load ptr, ptr %279, align 8, !tbaa !15
  store i8 %287, ptr %288, align 4, !tbaa !20
  %289 = load i8, ptr %.1, align 8, !tbaa !18
  %290 = getelementptr inbounds i8, ptr %288, i64 1
  store i8 %289, ptr %290, align 1, !tbaa !22
  %291 = getelementptr inbounds i8, ptr %.1, i64 1
  %292 = load i8, ptr %291, align 1, !tbaa !23
  %293 = getelementptr inbounds i8, ptr %288, i64 2
  store i8 %292, ptr %293, align 2, !tbaa !24
  %294 = getelementptr inbounds i8, ptr %.1, i64 4
  %295 = load i32, ptr %294, align 4, !tbaa !25
  %296 = getelementptr inbounds i8, ptr %288, i64 4
  store i32 %295, ptr %296, align 4, !tbaa !26
  %297 = getelementptr inbounds i8, ptr %288, i64 8
  %298 = zext i8 %289 to i64
  %299 = getelementptr inbounds [64 x i8], ptr %297, i64 0, i64 %298
  store i8 0, ptr %299, align 1, !tbaa !27
  br i1 %.0322, label %300, label %319

300:                                              ; preds = %.loopexit276
  %301 = getelementptr inbounds i8, ptr %1, i64 8
  %302 = load i16, ptr %301, align 8, !tbaa !43
  %303 = icmp eq i16 %302, 1
  br i1 %303, label %304, label %319

304:                                              ; preds = %300
  %305 = load ptr, ptr %0, align 8, !tbaa !29
  %306 = load ptr, ptr %282, align 8, !tbaa !16
  %307 = tail call ptr @friso_dic_get(ptr noundef %305, i32 noundef 11, ptr noundef %306) #5
  %.not265 = icmp eq ptr %307, null
  br i1 %.not265, label %319, label %308

308:                                              ; preds = %304
  %309 = getelementptr inbounds i8, ptr %307, i64 16
  %310 = load ptr, ptr %309, align 8, !tbaa !31
  %.not266 = icmp eq ptr %310, null
  br i1 %.not266, label %319, label %311

311:                                              ; preds = %308
  %312 = getelementptr inbounds i8, ptr %1, i64 14
  %313 = load i16, ptr %312, align 2, !tbaa !32
  %314 = icmp eq i16 %313, 1
  br i1 %314, label %315, label %316

315:                                              ; preds = %311
  tail call void @token_sphinx_output(ptr noundef nonnull %2, ptr noundef nonnull %307)
  br label %319

316:                                              ; preds = %311
  %317 = load i32, ptr %294, align 4, !tbaa !25
  %318 = getelementptr inbounds i8, ptr %307, i64 4
  store i32 %317, ptr %318, align 4, !tbaa !25
  tail call void @token_normal_output(ptr noundef nonnull %2, ptr noundef nonnull %307, i32 noundef 0)
  br label %319

319:                                              ; preds = %.loopexit276, %300, %315, %316, %308, %304
  %320 = load i8, ptr %286, align 2, !tbaa !19
  %321 = icmp eq i8 %320, 15
  br i1 %321, label %322, label %.loopexit.sink.split

322:                                              ; preds = %319
  %323 = load ptr, ptr %282, align 8, !tbaa !16
  tail call void @free(ptr noundef %323) #5
  tail call void @free_lex_entry(ptr noundef nonnull %.1) #5
  br label %.loopexit.sink.split

324:                                              ; preds = %213
  %325 = load i32, ptr %16, align 8, !tbaa !36
  %326 = tail call i32 @friso_cn_punctuation(i32 noundef %325, ptr noundef nonnull %2) #5
  %.not256 = icmp eq i32 %326, 0
  br i1 %.not256, label %348, label %327

327:                                              ; preds = %324
  %328 = load i16, ptr %18, align 2, !tbaa !46
  %.not258 = icmp eq i16 %328, 0
  br i1 %.not258, label %332, label %329

329:                                              ; preds = %327
  %330 = load ptr, ptr %0, align 8, !tbaa !29
  %331 = tail call i32 @friso_dic_match(ptr noundef %330, i32 noundef 9, ptr noundef nonnull %14) #5
  %.not259 = icmp eq i32 %331, 0
  br i1 %.not259, label %332, label %.backedge

332:                                              ; preds = %329, %327
  %333 = getelementptr inbounds i8, ptr %2, i64 48
  %334 = load ptr, ptr %333, align 8, !tbaa !15
  %335 = getelementptr inbounds i8, ptr %334, i64 8
  %336 = load i32, ptr %15, align 8, !tbaa !35
  %337 = zext i32 %336 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %335, ptr nonnull align 8 %14, i64 %337, i1 false)
  %338 = load ptr, ptr %333, align 8, !tbaa !15
  store i8 17, ptr %338, align 4, !tbaa !20
  %339 = load i32, ptr %15, align 8, !tbaa !35
  %340 = trunc i32 %339 to i8
  %341 = getelementptr inbounds i8, ptr %338, i64 1
  store i8 %340, ptr %341, align 1, !tbaa !22
  %342 = load i32, ptr %9, align 8, !tbaa !13
  %343 = sub i32 %342, %339
  %344 = getelementptr inbounds i8, ptr %338, i64 4
  store i32 %343, ptr %344, align 4, !tbaa !26
  %345 = getelementptr inbounds i8, ptr %338, i64 8
  %346 = zext i32 %339 to i64
  %347 = getelementptr inbounds [64 x i8], ptr %345, i64 0, i64 %346
  store i8 0, ptr %347, align 1, !tbaa !27
  br label %.loopexit.sink.split

348:                                              ; preds = %324
  %349 = load i16, ptr %21, align 4, !tbaa !47
  %.not257 = icmp eq i16 %349, 0
  br i1 %.not257, label %.backedge, label %350

350:                                              ; preds = %348
  %351 = getelementptr inbounds i8, ptr %2, i64 48
  %352 = load ptr, ptr %351, align 8, !tbaa !15
  %353 = getelementptr inbounds i8, ptr %352, i64 8
  %354 = load i32, ptr %15, align 8, !tbaa !35
  %355 = zext i32 %354 to i64
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %353, ptr nonnull align 8 %14, i64 %355, i1 false)
  %356 = load ptr, ptr %351, align 8, !tbaa !15
  store i8 18, ptr %356, align 4, !tbaa !20
  %357 = load i32, ptr %15, align 8, !tbaa !35
  %358 = trunc i32 %357 to i8
  %359 = getelementptr inbounds i8, ptr %356, i64 1
  store i8 %358, ptr %359, align 1, !tbaa !22
  %360 = load i32, ptr %9, align 8, !tbaa !13
  %361 = sub i32 %360, %357
  %362 = getelementptr inbounds i8, ptr %356, i64 4
  store i32 %361, ptr %362, align 4, !tbaa !26
  %363 = getelementptr inbounds i8, ptr %356, i64 8
  %364 = zext i32 %357 to i64
  %365 = getelementptr inbounds [64 x i8], ptr %363, i64 0, i64 %364
  store i8 0, ptr %365, align 1, !tbaa !27
  br label %.loopexit.sink.split

.loopexit.sink.split:                             ; preds = %319, %322, %191, %206, %202, %64, %.sink.split, %83, %224, %332, %350
  %.sink = phi ptr [ %351, %350 ], [ %333, %332 ], [ %226, %224 ], [ %84, %83 ], [ %24, %.sink.split ], [ %24, %64 ], [ %161, %202 ], [ %161, %206 ], [ %161, %191 ], [ %279, %322 ], [ %279, %319 ]
  %366 = load ptr, ptr %.sink, align 8, !tbaa !15
  br label %.loopexit

.loopexit:                                        ; preds = %68, %.backedge, %.loopexit.sink.split, %.preheader
  %.0245 = phi ptr [ null, %.preheader ], [ %366, %.loopexit.sink.split ], [ null, %.backedge ], [ null, %68 ]
  ret ptr %.0245
}

declare void @free_string_buffer(ptr noundef) local_unnamed_addr #3

declare ptr @new_string_buffer_with_string(ptr noundef) local_unnamed_addr #3

declare ptr @friso_dic_get(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

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

declare i32 @friso_whitespace(i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @friso_cn_string(i32 noundef, ptr noundef) local_unnamed_addr #3

declare void @string_buffer_append(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @friso_dic_match(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare ptr @link_list_remove_first(ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @token_sphinx_output(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @token_normal_output(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

declare void @free_lex_entry(ptr noundef) local_unnamed_addr #3

declare i32 @friso_en_letter(i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @friso_numeric_letter(i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @next_basic_latin(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

declare void @link_list_add(ptr noundef, ptr noundef) local_unnamed_addr #3

declare i32 @friso_halfwidth_en_char(i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @friso_fullwidth_en_char(i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @friso_en_punctuation(i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @friso_cn_punctuation(i32 noundef, ptr noundef) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

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

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


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