; LLVM IR from libtcod/libtcod :: src/libtcod (lex_c)

; 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.TCOD_lex_t = type { i32, i32, i32, i32, float, ptr, i32, i8, ptr, ptr, ptr, ptr, i32, i32, i32, [100 x [5 x i8]], [100 x [20 x i8]], ptr, ptr, ptr, ptr, ptr, i8, i8, i8 }

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @TCOD_lex_get_new_line(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @TCOD_lex_get_space(ptr noundef %0) #2 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  store ptr null, ptr %4, align 8, !tbaa !5
  br label %14

14:                                               ; preds = %375, %1
  br label %15

15:                                               ; preds = %14
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #5
  br label %16

16:                                               ; preds = %40, %15
  %17 = load ptr, ptr %3, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.TCOD_lex_t, ptr %17, i32 0, i32 8
  %19 = load ptr, ptr %18, align 8, !tbaa !9
  %20 = load i8, ptr %19, align 1, !tbaa !14
  store i8 %20, ptr %5, align 1, !tbaa !14
  %21 = sext i8 %20 to i32
  %22 = icmp sle i32 %21, 32
  br i1 %22, label %23, label %41

23:                                               ; preds = %16
  %24 = load i8, ptr %5, align 1, !tbaa !14
  %25 = sext i8 %24 to i32
  %26 = icmp eq i32 %25, 10
  br i1 %26, label %27, label %29

27:                                               ; preds = %23
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TCOD_lex_get_new_line(ptr noundef %28)
  br label %40

29:                                               ; preds = %23
  %30 = load i8, ptr %5, align 1, !tbaa !14
  %31 = sext i8 %30 to i32
  %32 = icmp eq i32 %31, 0
  br i1 %32, label %33, label %34

33:                                               ; preds = %29
  store i32 8, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %375

34:                                               ; preds = %29
  %35 = load ptr, ptr %3, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.TCOD_lex_t, ptr %35, i32 0, i32 8
  %37 = load ptr, ptr %36, align 8, !tbaa !9
  %38 = getelementptr inbounds i8, ptr %37, i32 1
  store ptr %38, ptr %36, align 8, !tbaa !9
  br label %39

39:                                               ; preds = %34
  br label %40

40:                                               ; preds = %39, %27
  br label %16, !llvm.loop !15

41:                                               ; preds = %16
  %42 = load ptr, ptr %3, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.TCOD_lex_t, ptr %42, i32 0, i32 17
  %44 = load ptr, ptr %43, align 8, !tbaa !17
  %45 = icmp ne ptr %44, null
  br i1 %45, label %46, label %90

46:                                               ; preds = %41
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.TCOD_lex_t, ptr %47, i32 0, i32 8
  %49 = load ptr, ptr %48, align 8, !tbaa !9
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.TCOD_lex_t, ptr %50, i32 0, i32 17
  %52 = load ptr, ptr %51, align 8, !tbaa !17
  %53 = load ptr, ptr %3, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.TCOD_lex_t, ptr %53, i32 0, i32 17
  %55 = load ptr, ptr %54, align 8, !tbaa !17
  %56 = call i64 @strlen(ptr noundef %55) #6
  %57 = call i32 @strncmp(ptr noundef %49, ptr noundef %52, i64 noundef %56) #6
  %58 = icmp eq i32 %57, 0
  br i1 %58, label %59, label %90

59:                                               ; preds = %46
  %60 = load ptr, ptr %4, align 8, !tbaa !5
  %61 = icmp ne ptr %60, null
  br i1 %61, label %66, label %62

62:                                               ; preds = %59
  %63 = load ptr, ptr %3, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.TCOD_lex_t, ptr %63, i32 0, i32 8
  %65 = load ptr, ptr %64, align 8, !tbaa !9
  store ptr %65, ptr %4, align 8, !tbaa !5
  br label %66

66:                                               ; preds = %62, %59
  br label %67

67:                                               ; preds = %83, %66
  %68 = load ptr, ptr %3, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.TCOD_lex_t, ptr %68, i32 0, i32 8
  %70 = load ptr, ptr %69, align 8, !tbaa !9
  %71 = load i8, ptr %70, align 1, !tbaa !14
  %72 = sext i8 %71 to i32
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %81

74:                                               ; preds = %67
  %75 = load ptr, ptr %3, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.TCOD_lex_t, ptr %75, i32 0, i32 8
  %77 = load ptr, ptr %76, align 8, !tbaa !9
  %78 = load i8, ptr %77, align 1, !tbaa !14
  %79 = sext i8 %78 to i32
  %80 = icmp ne i32 %79, 10
  br label %81

81:                                               ; preds = %74, %67
  %82 = phi i1 [ false, %67 ], [ %80, %74 ]
  br i1 %82, label %83, label %88

83:                                               ; preds = %81
  %84 = load ptr, ptr %3, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.TCOD_lex_t, ptr %84, i32 0, i32 8
  %86 = load ptr, ptr %85, align 8, !tbaa !9
  %87 = getelementptr inbounds i8, ptr %86, i32 1
  store ptr %87, ptr %85, align 8, !tbaa !9
  br label %67, !llvm.loop !18

88:                                               ; preds = %81
  %89 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TCOD_lex_get_new_line(ptr noundef %89)
  store i32 2, ptr %6, align 4
  br label %375

90:                                               ; preds = %46, %41
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.TCOD_lex_t, ptr %91, i32 0, i32 18
  %93 = load ptr, ptr %92, align 8, !tbaa !19
  %94 = icmp ne ptr %93, null
  br i1 %94, label %95, label %374

95:                                               ; preds = %90
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.TCOD_lex_t, ptr %96, i32 0, i32 19
  %98 = load ptr, ptr %97, align 8, !tbaa !20
  %99 = icmp ne ptr %98, null
  br i1 %99, label %100, label %374

100:                                              ; preds = %95
  %101 = load ptr, ptr %3, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.TCOD_lex_t, ptr %101, i32 0, i32 8
  %103 = load ptr, ptr %102, align 8, !tbaa !9
  %104 = load ptr, ptr %3, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.TCOD_lex_t, ptr %104, i32 0, i32 18
  %106 = load ptr, ptr %105, align 8, !tbaa !19
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.TCOD_lex_t, ptr %107, i32 0, i32 18
  %109 = load ptr, ptr %108, align 8, !tbaa !19
  %110 = call i64 @strlen(ptr noundef %109) #6
  %111 = call i32 @strncmp(ptr noundef %103, ptr noundef %106, i64 noundef %110) #6
  %112 = icmp eq i32 %111, 0
  br i1 %112, label %113, label %374

113:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.TCOD_lex_t, ptr %114, i32 0, i32 20
  %116 = load ptr, ptr %115, align 8, !tbaa !21
  %117 = icmp ne ptr %116, null
  br i1 %117, label %118, label %131

118:                                              ; preds = %113
  %119 = load ptr, ptr %3, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.TCOD_lex_t, ptr %119, i32 0, i32 8
  %121 = load ptr, ptr %120, align 8, !tbaa !9
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.TCOD_lex_t, ptr %122, i32 0, i32 20
  %124 = load ptr, ptr %123, align 8, !tbaa !21
  %125 = load ptr, ptr %3, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.TCOD_lex_t, ptr %125, i32 0, i32 20
  %127 = load ptr, ptr %126, align 8, !tbaa !21
  %128 = call i64 @strlen(ptr noundef %127) #6
  %129 = call i32 @strncmp(ptr noundef %121, ptr noundef %124, i64 noundef %128) #6
  %130 = icmp eq i32 %129, 0
  br label %131

131:                                              ; preds = %118, %113
  %132 = phi i1 [ false, %113 ], [ %130, %118 ]
  %133 = zext i1 %132 to i32
  store i32 %133, ptr %7, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 1, ptr %8, align 4, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  store ptr null, ptr %9, align 8, !tbaa !5
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = icmp ne ptr %134, null
  br i1 %135, label %140, label %136

136:                                              ; preds = %131
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.TCOD_lex_t, ptr %137, i32 0, i32 8
  %139 = load ptr, ptr %138, align 8, !tbaa !9
  store ptr %139, ptr %4, align 8, !tbaa !5
  br label %140

140:                                              ; preds = %136, %131
  %141 = load i32, ptr %7, align 4, !tbaa !22
  %142 = icmp ne i32 %141, 0
  br i1 %142, label %143, label %168

143:                                              ; preds = %140
  %144 = load ptr, ptr %3, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.TCOD_lex_t, ptr %144, i32 0, i32 8
  %146 = load ptr, ptr %145, align 8, !tbaa !9
  %147 = load ptr, ptr %3, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.TCOD_lex_t, ptr %147, i32 0, i32 20
  %149 = load ptr, ptr %148, align 8, !tbaa !21
  %150 = call i64 @strlen(ptr noundef %149) #6
  %151 = getelementptr inbounds i8, ptr %146, i64 %150
  store ptr %151, ptr %9, align 8, !tbaa !5
  br label %152

152:                                              ; preds = %164, %143
  %153 = call ptr @__ctype_b_loc() #7
  %154 = load ptr, ptr %153, align 8, !tbaa !5
  %155 = load ptr, ptr %9, align 8, !tbaa !5
  %156 = load i8, ptr %155, align 1, !tbaa !14
  %157 = sext i8 %156 to i32
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds i16, ptr %154, i64 %158
  %160 = load i16, ptr %159, align 2, !tbaa !23
  %161 = zext i16 %160 to i32
  %162 = and i32 %161, 8192
  %163 = icmp ne i32 %162, 0
  br i1 %163, label %164, label %167

164:                                              ; preds = %152
  %165 = load ptr, ptr %9, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i32 1
  store ptr %166, ptr %9, align 8, !tbaa !5
  br label %152, !llvm.loop !25

167:                                              ; preds = %152
  br label %168

168:                                              ; preds = %167, %140
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.TCOD_lex_t, ptr %169, i32 0, i32 8
  %171 = load ptr, ptr %170, align 8, !tbaa !9
  %172 = getelementptr inbounds i8, ptr %171, i32 1
  store ptr %172, ptr %170, align 8, !tbaa !9
  br label %173

173:                                              ; preds = %236, %168
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.TCOD_lex_t, ptr %174, i32 0, i32 8
  %176 = load ptr, ptr %175, align 8, !tbaa !9
  %177 = load i8, ptr %176, align 1, !tbaa !14
  %178 = sext i8 %177 to i32
  %179 = icmp eq i32 %178, 10
  br i1 %179, label %180, label %182

180:                                              ; preds = %173
  %181 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TCOD_lex_get_new_line(ptr noundef %181)
  br label %187

182:                                              ; preds = %173
  %183 = load ptr, ptr %3, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.TCOD_lex_t, ptr %183, i32 0, i32 8
  %185 = load ptr, ptr %184, align 8, !tbaa !9
  %186 = getelementptr inbounds i8, ptr %185, i32 1
  store ptr %186, ptr %184, align 8, !tbaa !9
  br label %187

187:                                              ; preds = %182, %180
  %188 = load ptr, ptr %3, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.TCOD_lex_t, ptr %188, i32 0, i32 8
  %190 = load ptr, ptr %189, align 8, !tbaa !9
  %191 = load i8, ptr %190, align 1, !tbaa !14
  %192 = sext i8 %191 to i32
  %193 = icmp eq i32 %192, 0
  br i1 %193, label %194, label %195

194:                                              ; preds = %187
  store i32 8, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %373

195:                                              ; preds = %187
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.TCOD_lex_t, ptr %196, i32 0, i32 14
  %198 = load i32, ptr %197, align 8, !tbaa !26
  %199 = and i32 %198, 2
  %200 = icmp ne i32 %199, 0
  br i1 %200, label %201, label %218

201:                                              ; preds = %195
  %202 = load ptr, ptr %3, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.TCOD_lex_t, ptr %202, i32 0, i32 8
  %204 = load ptr, ptr %203, align 8, !tbaa !9
  %205 = getelementptr inbounds i8, ptr %204, i64 -1
  %206 = load ptr, ptr %3, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.TCOD_lex_t, ptr %206, i32 0, i32 18
  %208 = load ptr, ptr %207, align 8, !tbaa !19
  %209 = load ptr, ptr %3, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.TCOD_lex_t, ptr %209, i32 0, i32 18
  %211 = load ptr, ptr %210, align 8, !tbaa !19
  %212 = call i64 @strlen(ptr noundef %211) #6
  %213 = call i32 @strncmp(ptr noundef %205, ptr noundef %208, i64 noundef %212) #6
  %214 = icmp eq i32 %213, 0
  br i1 %214, label %215, label %218

215:                                              ; preds = %201
  %216 = load i32, ptr %8, align 4, !tbaa !22
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %8, align 4, !tbaa !22
  br label %218

218:                                              ; preds = %215, %201, %195
  %219 = load ptr, ptr %3, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.TCOD_lex_t, ptr %219, i32 0, i32 8
  %221 = load ptr, ptr %220, align 8, !tbaa !9
  %222 = getelementptr inbounds i8, ptr %221, i64 -1
  %223 = load ptr, ptr %3, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.TCOD_lex_t, ptr %223, i32 0, i32 19
  %225 = load ptr, ptr %224, align 8, !tbaa !20
  %226 = load ptr, ptr %3, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.TCOD_lex_t, ptr %226, i32 0, i32 19
  %228 = load ptr, ptr %227, align 8, !tbaa !20
  %229 = call i64 @strlen(ptr noundef %228) #6
  %230 = call i32 @strncmp(ptr noundef %222, ptr noundef %225, i64 noundef %229) #6
  %231 = icmp eq i32 %230, 0
  br i1 %231, label %232, label %235

232:                                              ; preds = %218
  %233 = load i32, ptr %8, align 4, !tbaa !22
  %234 = add nsw i32 %233, -1
  store i32 %234, ptr %8, align 4, !tbaa !22
  br label %235

235:                                              ; preds = %232, %218
  br label %236

236:                                              ; preds = %235
  %237 = load i32, ptr %8, align 4, !tbaa !22
  %238 = icmp sgt i32 %237, 0
  br i1 %238, label %173, label %239, !llvm.loop !27

239:                                              ; preds = %236
  %240 = load ptr, ptr %3, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.TCOD_lex_t, ptr %240, i32 0, i32 8
  %242 = load ptr, ptr %241, align 8, !tbaa !9
  %243 = getelementptr inbounds i8, ptr %242, i32 1
  store ptr %243, ptr %241, align 8, !tbaa !9
  %244 = load i32, ptr %7, align 4, !tbaa !22
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %372

246:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %247 = load ptr, ptr %3, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.TCOD_lex_t, ptr %247, i32 0, i32 8
  %249 = load ptr, ptr %248, align 8, !tbaa !9
  %250 = load ptr, ptr %3, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.TCOD_lex_t, ptr %250, i32 0, i32 19
  %252 = load ptr, ptr %251, align 8, !tbaa !20
  %253 = call i64 @strlen(ptr noundef %252) #6
  %254 = sub i64 0, %253
  %255 = getelementptr inbounds i8, ptr %249, i64 %254
  store ptr %255, ptr %10, align 8, !tbaa !5
  br label %256

256:                                              ; preds = %274, %246
  %257 = call ptr @__ctype_b_loc() #7
  %258 = load ptr, ptr %257, align 8, !tbaa !5
  %259 = load ptr, ptr %10, align 8, !tbaa !5
  %260 = load i8, ptr %259, align 1, !tbaa !14
  %261 = sext i8 %260 to i32
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i16, ptr %258, i64 %262
  %264 = load i16, ptr %263, align 2, !tbaa !23
  %265 = zext i16 %264 to i32
  %266 = and i32 %265, 8192
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %268, label %272

268:                                              ; preds = %256
  %269 = load ptr, ptr %10, align 8, !tbaa !5
  %270 = load ptr, ptr %9, align 8, !tbaa !5
  %271 = icmp ugt ptr %269, %270
  br label %272

272:                                              ; preds = %268, %256
  %273 = phi i1 [ false, %256 ], [ %271, %268 ]
  br i1 %273, label %274, label %277

274:                                              ; preds = %272
  %275 = load ptr, ptr %10, align 8, !tbaa !5
  %276 = getelementptr inbounds i8, ptr %275, i32 -1
  store ptr %276, ptr %10, align 8, !tbaa !5
  br label %256, !llvm.loop !28

277:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %278 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %278, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %279 = load ptr, ptr %3, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.TCOD_lex_t, ptr %279, i32 0, i32 11
  %281 = load ptr, ptr %280, align 8, !tbaa !29
  store ptr %281, ptr %12, align 8, !tbaa !5
  br label %282

282:                                              ; preds = %342, %277
  %283 = load ptr, ptr %11, align 8, !tbaa !5
  %284 = load ptr, ptr %10, align 8, !tbaa !5
  %285 = icmp ult ptr %283, %284
  br i1 %285, label %286, label %343

286:                                              ; preds = %282
  br label %287

287:                                              ; preds = %310, %286
  %288 = load ptr, ptr %11, align 8, !tbaa !5
  %289 = load ptr, ptr %10, align 8, !tbaa !5
  %290 = icmp ult ptr %288, %289
  br i1 %290, label %291, label %308

291:                                              ; preds = %287
  %292 = call ptr @__ctype_b_loc() #7
  %293 = load ptr, ptr %292, align 8, !tbaa !5
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = load i8, ptr %294, align 1, !tbaa !14
  %296 = sext i8 %295 to i32
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds i16, ptr %293, i64 %297
  %299 = load i16, ptr %298, align 2, !tbaa !23
  %300 = zext i16 %299 to i32
  %301 = and i32 %300, 8192
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %308

303:                                              ; preds = %291
  %304 = load ptr, ptr %11, align 8, !tbaa !5
  %305 = load i8, ptr %304, align 1, !tbaa !14
  %306 = sext i8 %305 to i32
  %307 = icmp ne i32 %306, 10
  br label %308

308:                                              ; preds = %303, %291, %287
  %309 = phi i1 [ false, %291 ], [ false, %287 ], [ %307, %303 ]
  br i1 %309, label %310, label %313

310:                                              ; preds = %308
  %311 = load ptr, ptr %11, align 8, !tbaa !5
  %312 = getelementptr inbounds i8, ptr %311, i32 1
  store ptr %312, ptr %11, align 8, !tbaa !5
  br label %287, !llvm.loop !30

313:                                              ; preds = %308
  br label %314

314:                                              ; preds = %325, %313
  %315 = load ptr, ptr %11, align 8, !tbaa !5
  %316 = load ptr, ptr %10, align 8, !tbaa !5
  %317 = icmp ult ptr %315, %316
  br i1 %317, label %318, label %323

318:                                              ; preds = %314
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = load i8, ptr %319, align 1, !tbaa !14
  %321 = sext i8 %320 to i32
  %322 = icmp ne i32 %321, 10
  br label %323

323:                                              ; preds = %318, %314
  %324 = phi i1 [ false, %314 ], [ %322, %318 ]
  br i1 %324, label %325, label %331

325:                                              ; preds = %323
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = getelementptr inbounds i8, ptr %326, i32 1
  store ptr %327, ptr %11, align 8, !tbaa !5
  %328 = load i8, ptr %326, align 1, !tbaa !14
  %329 = load ptr, ptr %12, align 8, !tbaa !5
  %330 = getelementptr inbounds i8, ptr %329, i32 1
  store ptr %330, ptr %12, align 8, !tbaa !5
  store i8 %328, ptr %329, align 1, !tbaa !14
  br label %314, !llvm.loop !31

331:                                              ; preds = %323
  %332 = load ptr, ptr %11, align 8, !tbaa !5
  %333 = load i8, ptr %332, align 1, !tbaa !14
  %334 = sext i8 %333 to i32
  %335 = icmp eq i32 %334, 10
  br i1 %335, label %336, label %342

336:                                              ; preds = %331
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = getelementptr inbounds i8, ptr %337, i32 1
  store ptr %338, ptr %11, align 8, !tbaa !5
  %339 = load i8, ptr %337, align 1, !tbaa !14
  %340 = load ptr, ptr %12, align 8, !tbaa !5
  %341 = getelementptr inbounds i8, ptr %340, i32 1
  store ptr %341, ptr %12, align 8, !tbaa !5
  store i8 %339, ptr %340, align 1, !tbaa !14
  br label %342

342:                                              ; preds = %336, %331
  br label %282, !llvm.loop !32

343:                                              ; preds = %282
  br label %344

344:                                              ; preds = %365, %343
  %345 = load ptr, ptr %12, align 8, !tbaa !5
  %346 = load ptr, ptr %3, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.TCOD_lex_t, ptr %346, i32 0, i32 11
  %348 = load ptr, ptr %347, align 8, !tbaa !29
  %349 = icmp ugt ptr %345, %348
  br i1 %349, label %350, label %363

350:                                              ; preds = %344
  %351 = call ptr @__ctype_b_loc() #7
  %352 = load ptr, ptr %351, align 8, !tbaa !5
  %353 = load ptr, ptr %12, align 8, !tbaa !5
  %354 = getelementptr inbounds i8, ptr %353, i64 -1
  %355 = load i8, ptr %354, align 1, !tbaa !14
  %356 = sext i8 %355 to i32
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds i16, ptr %352, i64 %357
  %359 = load i16, ptr %358, align 2, !tbaa !23
  %360 = zext i16 %359 to i32
  %361 = and i32 %360, 8192
  %362 = icmp ne i32 %361, 0
  br label %363

363:                                              ; preds = %350, %344
  %364 = phi i1 [ false, %344 ], [ %362, %350 ]
  br i1 %364, label %365, label %368

365:                                              ; preds = %363
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = getelementptr inbounds i8, ptr %366, i32 -1
  store ptr %367, ptr %12, align 8, !tbaa !5
  br label %344, !llvm.loop !33

368:                                              ; preds = %363
  %369 = load ptr, ptr %12, align 8, !tbaa !5
  store i8 0, ptr %369, align 1, !tbaa !14
  %370 = load ptr, ptr %3, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.TCOD_lex_t, ptr %370, i32 0, i32 22
  store i8 0, ptr %371, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  br label %372

372:                                              ; preds = %368, %239
  store i32 2, ptr %6, align 4
  br label %373

373:                                              ; preds = %372, %194
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  br label %375

374:                                              ; preds = %100, %95, %90
  store i32 3, ptr %6, align 4
  br label %375

375:                                              ; preds = %374, %373, %88, %33
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #5
  %376 = load i32, ptr %6, align 4
  switch i32 %376, label %422 [
    i32 2, label %14
    i32 3, label %377
  ]

377:                                              ; preds = %375
  %378 = load ptr, ptr %3, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.TCOD_lex_t, ptr %378, i32 0, i32 14
  %380 = load i32, ptr %379, align 8, !tbaa !26
  %381 = and i32 %380, 4
  %382 = icmp ne i32 %381, 0
  br i1 %382, label %383, label %421

383:                                              ; preds = %377
  %384 = load ptr, ptr %4, align 8, !tbaa !5
  %385 = icmp ne ptr %384, null
  br i1 %385, label %386, label %421

386:                                              ; preds = %383
  %387 = load ptr, ptr %3, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.TCOD_lex_t, ptr %387, i32 0, i32 8
  %389 = load ptr, ptr %388, align 8, !tbaa !9
  %390 = load ptr, ptr %4, align 8, !tbaa !5
  %391 = icmp ugt ptr %389, %390
  br i1 %391, label %392, label %421

392:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %393 = load ptr, ptr %3, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.TCOD_lex_t, ptr %393, i32 0, i32 8
  %395 = load ptr, ptr %394, align 8, !tbaa !9
  %396 = load ptr, ptr %4, align 8, !tbaa !5
  %397 = ptrtoint ptr %395 to i64
  %398 = ptrtoint ptr %396 to i64
  %399 = sub i64 %397, %398
  %400 = trunc i64 %399 to i32
  store i32 %400, ptr %13, align 4, !tbaa !22
  %401 = load ptr, ptr %3, align 8, !tbaa !5
  %402 = load i32, ptr %13, align 4, !tbaa !22
  %403 = add nsw i32 %402, 1
  call void @allocate_tok(ptr noundef %401, i32 noundef %403)
  %404 = load ptr, ptr %3, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.TCOD_lex_t, ptr %404, i32 0, i32 5
  %406 = load ptr, ptr %405, align 8, !tbaa !35
  %407 = load ptr, ptr %4, align 8, !tbaa !5
  %408 = load i32, ptr %13, align 4, !tbaa !22
  %409 = sext i32 %408 to i64
  %410 = call ptr @strncpy(ptr noundef %406, ptr noundef %407, i64 noundef %409) #5
  %411 = load ptr, ptr %3, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.TCOD_lex_t, ptr %411, i32 0, i32 5
  %413 = load ptr, ptr %412, align 8, !tbaa !35
  %414 = load i32, ptr %13, align 4, !tbaa !22
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds i8, ptr %413, i64 %415
  store i8 0, ptr %416, align 1, !tbaa !14
  %417 = load ptr, ptr %3, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.TCOD_lex_t, ptr %417, i32 0, i32 1
  store i32 9, ptr %418, align 4, !tbaa !36
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.TCOD_lex_t, ptr %419, i32 0, i32 3
  store i32 -1, ptr %420, align 4, !tbaa !37
  store i32 9, ptr %2, align 4
  store i32 1, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %422

421:                                              ; preds = %386, %383, %377
  store i32 0, ptr %2, align 4
  store i32 1, ptr %6, align 4
  br label %422

422:                                              ; preds = %421, %392, %375
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  %423 = load i32, ptr %2, align 4
  ret i32 %423
}

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strncmp(ptr noundef, ptr noundef, i64 noundef) #1

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() #3

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

; Function Attrs: nounwind
declare ptr @strncpy(ptr noundef, ptr noundef, i64 noundef) #4

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

!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, !6, i64 40}
!10 = !{!"TCOD_lex_t", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !12, i64 16, !6, i64 24, !11, i64 32, !7, i64 36, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !11, i64 72, !11, i64 76, !11, i64 80, !7, i64 84, !7, i64 584, !6, i64 2584, !6, i64 2592, !6, i64 2600, !6, i64 2608, !6, i64 2616, !13, i64 2624, !13, i64 2625, !13, i64 2626}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!"_Bool", !7, i64 0}
!14 = !{!7, !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!10, !6, i64 2584}
!18 = distinct !{!18, !16}
!19 = !{!10, !6, i64 2592}
!20 = !{!10, !6, i64 2600}
!21 = !{!10, !6, i64 2608}
!22 = !{!11, !11, i64 0}
!23 = !{!24, !24, i64 0}
!24 = !{!"short", !7, i64 0}
!25 = distinct !{!25, !16}
!26 = !{!10, !11, i64 80}
!27 = distinct !{!27, !16}
!28 = distinct !{!28, !16}
!29 = !{!10, !6, i64 64}
!30 = distinct !{!30, !16}
!31 = distinct !{!31, !16}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = !{!10, !13, i64 2624}
!35 = !{!10, !6, i64 24}
!36 = !{!10, !11, i64 4}
!37 = !{!10, !11, 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 nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @TCOD_lex_get_space(ptr noundef %0) local_unnamed_addr #1 {
  %2 = getelementptr inbounds i8, ptr %0, i64 40
  %3 = getelementptr inbounds i8, ptr %0, i64 2584
  %4 = getelementptr inbounds i8, ptr %0, i64 2592
  %5 = getelementptr inbounds i8, ptr %0, i64 2600
  %6 = getelementptr inbounds i8, ptr %0, i64 2608
  %7 = getelementptr inbounds i8, ptr %0, i64 80
  %8 = getelementptr inbounds i8, ptr %0, i64 64
  %9 = getelementptr inbounds i8, ptr %0, i64 2624
  br label %10

10:                                               ; preds = %.backedge, %1
  %.0114 = phi ptr [ null, %1 ], [ %.0114.be, %.backedge ]
  %11 = load ptr, ptr %2, align 8, !tbaa !5
  %12 = load i8, ptr %11, align 1, !tbaa !13
  %13 = icmp slt i8 %12, 33
  br i1 %13, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %10, %19
  %14 = phi i8 [ %21, %19 ], [ %12, %10 ]
  %15 = phi ptr [ %20, %19 ], [ %11, %10 ]
  switch i8 %14, label %17 [
    i8 10, label %16
    i8 0, label %.thread146
  ]

16:                                               ; preds = %.lr.ph
  tail call void @TCOD_lex_get_new_line(ptr noundef nonnull %0)
  %.pre = load ptr, ptr %2, align 8, !tbaa !5
  br label %19

17:                                               ; preds = %.lr.ph
  %18 = getelementptr inbounds i8, ptr %15, i64 1
  store ptr %18, ptr %2, align 8, !tbaa !5
  br label %19

19:                                               ; preds = %17, %16
  %20 = phi ptr [ %18, %17 ], [ %.pre, %16 ]
  %21 = load i8, ptr %20, align 1, !tbaa !13
  %22 = icmp slt i8 %21, 33
  br i1 %22, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %19, %10
  %23 = phi i8 [ %12, %10 ], [ %21, %19 ]
  %24 = phi ptr [ %11, %10 ], [ %20, %19 ]
  %25 = load ptr, ptr %3, align 8, !tbaa !16
  %.not = icmp eq ptr %25, null
  br i1 %.not, label %36, label %26

26:                                               ; preds = %._crit_edge
  %27 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %25) #4
  %28 = tail call i32 @strncmp(ptr noundef nonnull %24, ptr noundef nonnull %25, i64 noundef %27) #4
  %29 = icmp eq i32 %28, 0
  br i1 %29, label %30, label %36

30:                                               ; preds = %26
  %.not136 = icmp eq ptr %.0114, null
  %spec.select = select i1 %.not136, ptr %24, ptr %.0114
  br label %31

31:                                               ; preds = %34, %30
  %32 = phi i8 [ %.pre188, %34 ], [ %23, %30 ]
  %33 = phi ptr [ %35, %34 ], [ %24, %30 ]
  switch i8 %32, label %34 [
    i8 0, label %.critedge
    i8 10, label %.critedge
  ]

34:                                               ; preds = %31
  %35 = getelementptr inbounds i8, ptr %33, i64 1
  store ptr %35, ptr %2, align 8, !tbaa !5
  %.pre188 = load i8, ptr %35, align 1, !tbaa !13
  br label %31, !llvm.loop !17

.critedge:                                        ; preds = %31, %31
  tail call void @TCOD_lex_get_new_line(ptr noundef nonnull %0)
  br label %.backedge

36:                                               ; preds = %26, %._crit_edge
  %37 = load ptr, ptr %4, align 8, !tbaa !18
  %.not126 = icmp eq ptr %37, null
  br i1 %.not126, label %144, label %38

38:                                               ; preds = %36
  %39 = load ptr, ptr %5, align 8, !tbaa !19
  %.not127 = icmp eq ptr %39, null
  br i1 %.not127, label %144, label %40

40:                                               ; preds = %38
  %41 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %37) #4
  %42 = tail call i32 @strncmp(ptr noundef nonnull %24, ptr noundef nonnull %37, i64 noundef %41) #4
  %43 = icmp eq i32 %42, 0
  br i1 %43, label %44, label %144

44:                                               ; preds = %40
  %45 = load ptr, ptr %6, align 8, !tbaa !20
  %.not128 = icmp eq ptr %45, null
  br i1 %.not128, label %.thread, label %46

.thread:                                          ; preds = %44
  %.not129192 = icmp eq ptr %.0114, null
  %spec.select149193 = select i1 %.not129192, ptr %24, ptr %.0114
  br label %.loopexit

46:                                               ; preds = %44
  %47 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %45) #4
  %48 = tail call i32 @strncmp(ptr noundef nonnull %24, ptr noundef nonnull %45, i64 noundef %47) #4
  %49 = icmp eq i32 %48, 0
  %.not129 = icmp eq ptr %.0114, null
  %spec.select149 = select i1 %.not129, ptr %24, ptr %.0114
  br i1 %49, label %50, label %.loopexit

50:                                               ; preds = %46
  %51 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %45) #4
  %52 = getelementptr inbounds i8, ptr %24, i64 %51
  %53 = tail call ptr @__ctype_b_loc() #5
  %54 = load ptr, ptr %53, align 8, !tbaa !21
  br label %55

55:                                               ; preds = %55, %50
  %.0109 = phi ptr [ %52, %50 ], [ %61, %55 ]
  %56 = load i8, ptr %.0109, align 1, !tbaa !13
  %57 = sext i8 %56 to i64
  %58 = getelementptr inbounds i16, ptr %54, i64 %57
  %59 = load i16, ptr %58, align 2, !tbaa !22
  %60 = and i16 %59, 8192
  %.not130 = icmp eq i16 %60, 0
  %61 = getelementptr inbounds i8, ptr %.0109, i64 1
  br i1 %.not130, label %.loopexit, label %55, !llvm.loop !24

.loopexit:                                        ; preds = %55, %.thread, %46
  %spec.select149194 = phi ptr [ %spec.select149, %46 ], [ %spec.select149193, %.thread ], [ %spec.select149, %55 ]
  %62 = phi i1 [ false, %46 ], [ false, %.thread ], [ %49, %55 ]
  %.1110 = phi ptr [ null, %46 ], [ null, %.thread ], [ %.0109, %55 ]
  %63 = getelementptr inbounds i8, ptr %24, i64 1
  store ptr %63, ptr %2, align 8, !tbaa !5
  %.pre189 = load i8, ptr %63, align 1, !tbaa !13
  br label %64

64:                                               ; preds = %85, %.loopexit
  %65 = phi i8 [ %.pre189, %.loopexit ], [ %73, %85 ]
  %66 = phi ptr [ %63, %.loopexit ], [ %72, %85 ]
  %.0111 = phi i32 [ 1, %.loopexit ], [ %spec.select140, %85 ]
  %67 = icmp eq i8 %65, 10
  br i1 %67, label %68, label %69

68:                                               ; preds = %64
  tail call void @TCOD_lex_get_new_line(ptr noundef nonnull %0)
  %.pre190 = load ptr, ptr %2, align 8, !tbaa !5
  br label %71

69:                                               ; preds = %64
  %70 = getelementptr inbounds i8, ptr %66, i64 1
  store ptr %70, ptr %2, align 8, !tbaa !5
  br label %71

71:                                               ; preds = %69, %68
  %72 = phi ptr [ %70, %69 ], [ %.pre190, %68 ]
  %73 = load i8, ptr %72, align 1, !tbaa !13
  %74 = icmp eq i8 %73, 0
  br i1 %74, label %.thread146, label %75

75:                                               ; preds = %71
  %76 = load i32, ptr %7, align 8, !tbaa !25
  %77 = and i32 %76, 2
  %.not131 = icmp eq i32 %77, 0
  br i1 %.not131, label %85, label %78

78:                                               ; preds = %75
  %79 = getelementptr inbounds i8, ptr %72, i64 -1
  %80 = load ptr, ptr %4, align 8, !tbaa !18
  %81 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %80) #4
  %82 = tail call i32 @strncmp(ptr noundef nonnull %79, ptr noundef %80, i64 noundef %81) #4
  %83 = icmp eq i32 %82, 0
  %84 = zext i1 %83 to i32
  %spec.select139 = add nuw nsw i32 %.0111, %84
  br label %85

85:                                               ; preds = %78, %75
  %.1112 = phi i32 [ %.0111, %75 ], [ %spec.select139, %78 ]
  %86 = getelementptr inbounds i8, ptr %72, i64 -1
  %87 = load ptr, ptr %5, align 8, !tbaa !19
  %88 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %87) #4
  %89 = tail call i32 @strncmp(ptr noundef nonnull %86, ptr noundef %87, i64 noundef %88) #4
  %90 = icmp eq i32 %89, 0
  %91 = sext i1 %90 to i32
  %spec.select140 = add nsw i32 %.1112, %91
  %.not150 = icmp eq i32 %spec.select140, 0
  br i1 %.not150, label %92, label %64, !llvm.loop !26

92:                                               ; preds = %85
  %93 = getelementptr inbounds i8, ptr %72, i64 1
  store ptr %93, ptr %2, align 8, !tbaa !5
  br i1 %62, label %94, label %.backedge

94:                                               ; preds = %92
  %95 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %87) #4
  %96 = sub i64 0, %95
  %97 = getelementptr inbounds i8, ptr %93, i64 %96
  %98 = tail call ptr @__ctype_b_loc() #5
  %99 = load ptr, ptr %98, align 8, !tbaa !21
  br label %100

100:                                              ; preds = %100, %94
  %.0108 = phi ptr [ %97, %94 ], [ %109, %100 ]
  %101 = load i8, ptr %.0108, align 1, !tbaa !13
  %102 = sext i8 %101 to i64
  %103 = getelementptr inbounds i16, ptr %99, i64 %102
  %104 = load i16, ptr %103, align 2, !tbaa !22
  %105 = and i16 %104, 8192
  %106 = icmp ne i16 %105, 0
  %107 = icmp ugt ptr %.0108, %.1110
  %108 = and i1 %107, %106
  %109 = getelementptr inbounds i8, ptr %.0108, i64 -1
  br i1 %108, label %100, label %110, !llvm.loop !27

110:                                              ; preds = %100
  %111 = load ptr, ptr %8, align 8, !tbaa !28
  br i1 %107, label %.preheader, label %.preheader151

.preheader151.loopexit:                           ; preds = %132
  %.pre191 = load ptr, ptr %8, align 8, !tbaa !28
  br label %.preheader151

.preheader151:                                    ; preds = %.preheader151.loopexit, %110
  %112 = phi ptr [ %111, %110 ], [ %.pre191, %.preheader151.loopexit ]
  %.0100.lcssa = phi ptr [ %111, %110 ], [ %.2102, %.preheader151.loopexit ]
  br label %134

.preheader:                                       ; preds = %110, %132
  %.0100175 = phi ptr [ %.2102, %132 ], [ %111, %110 ]
  %.0104174 = phi ptr [ %.3107, %132 ], [ %.1110, %110 ]
  %113 = load ptr, ptr %98, align 8, !tbaa !21
  br label %114

114:                                              ; preds = %.preheader, %120
  %.1105168 = phi ptr [ %.0104174, %.preheader ], [ %121, %120 ]
  %115 = load i8, ptr %.1105168, align 1, !tbaa !13
  %116 = sext i8 %115 to i64
  %117 = getelementptr inbounds i16, ptr %113, i64 %116
  %118 = load i16, ptr %117, align 2, !tbaa !22
  %119 = and i16 %118, 8192
  %.not133 = icmp eq i16 %119, 0
  %.not134 = icmp eq i8 %115, 10
  %or.cond141 = or i1 %.not134, %.not133
  br i1 %or.cond141, label %.critedge2, label %120

120:                                              ; preds = %114
  %121 = getelementptr inbounds i8, ptr %.1105168, i64 1
  %122 = icmp ult ptr %121, %.0108
  br i1 %122, label %114, label %.critedge2, !llvm.loop !29

.critedge2:                                       ; preds = %114, %120
  %.1105.lcssa = phi ptr [ %.1105168, %114 ], [ %121, %120 ]
  %123 = icmp ult ptr %.1105.lcssa, %.0108
  br i1 %123, label %.lr.ph171, label %.critedge4

.lr.ph171:                                        ; preds = %.critedge2, %125
  %.1101170 = phi ptr [ %127, %125 ], [ %.0100175, %.critedge2 ]
  %.2106169 = phi ptr [ %126, %125 ], [ %.1105.lcssa, %.critedge2 ]
  %124 = load i8, ptr %.2106169, align 1, !tbaa !13
  %.not135 = icmp eq i8 %124, 10
  br i1 %.not135, label %.critedge4.thread, label %125

125:                                              ; preds = %.lr.ph171
  %126 = getelementptr inbounds i8, ptr %.2106169, i64 1
  %127 = getelementptr inbounds i8, ptr %.1101170, i64 1
  store i8 %124, ptr %.1101170, align 1, !tbaa !13
  %128 = icmp ult ptr %126, %.0108
  br i1 %128, label %.lr.ph171, label %.critedge4, !llvm.loop !30

.critedge4:                                       ; preds = %125, %.critedge2
  %.2106.lcssa = phi ptr [ %.1105.lcssa, %.critedge2 ], [ %126, %125 ]
  %.1101.lcssa = phi ptr [ %.0100175, %.critedge2 ], [ %127, %125 ]
  %.pr = load i8, ptr %.2106.lcssa, align 1, !tbaa !13
  %129 = icmp eq i8 %.pr, 10
  br i1 %129, label %.critedge4.thread, label %132

.critedge4.thread:                                ; preds = %.lr.ph171, %.critedge4
  %.2106164 = phi ptr [ %.2106.lcssa, %.critedge4 ], [ %.2106169, %.lr.ph171 ]
  %.1101162 = phi ptr [ %.1101.lcssa, %.critedge4 ], [ %.1101170, %.lr.ph171 ]
  %130 = getelementptr inbounds i8, ptr %.2106164, i64 1
  %131 = getelementptr inbounds i8, ptr %.1101162, i64 1
  store i8 10, ptr %.1101162, align 1, !tbaa !13
  br label %132

132:                                              ; preds = %.critedge4.thread, %.critedge4
  %.3107 = phi ptr [ %130, %.critedge4.thread ], [ %.2106.lcssa, %.critedge4 ]
  %.2102 = phi ptr [ %131, %.critedge4.thread ], [ %.1101.lcssa, %.critedge4 ]
  %133 = icmp ult ptr %.3107, %.0108
  br i1 %133, label %.preheader, label %.preheader151.loopexit, !llvm.loop !31

134:                                              ; preds = %.preheader151, %136
  %.3103 = phi ptr [ %138, %136 ], [ %.0100.lcssa, %.preheader151 ]
  %135 = icmp ugt ptr %.3103, %112
  br i1 %135, label %136, label %.critedge6

136:                                              ; preds = %134
  %137 = load ptr, ptr %98, align 8, !tbaa !21
  %138 = getelementptr inbounds i8, ptr %.3103, i64 -1
  %139 = load i8, ptr %138, align 1, !tbaa !13
  %140 = sext i8 %139 to i64
  %141 = getelementptr inbounds i16, ptr %137, i64 %140
  %142 = load i16, ptr %141, align 2, !tbaa !22
  %143 = and i16 %142, 8192
  %.not132 = icmp eq i16 %143, 0
  br i1 %.not132, label %.critedge6, label %134, !llvm.loop !32

.critedge6:                                       ; preds = %134, %136
  store i8 0, ptr %.3103, align 1, !tbaa !13
  store i8 0, ptr %9, align 8, !tbaa !33
  br label %.backedge

.backedge:                                        ; preds = %.critedge6, %92, %.critedge
  %.0114.be = phi ptr [ %spec.select, %.critedge ], [ %spec.select149194, %92 ], [ %spec.select149194, %.critedge6 ]
  br label %10

144:                                              ; preds = %40, %38, %36
  %145 = load i32, ptr %7, align 8, !tbaa !25
  %146 = and i32 %145, 4
  %147 = icmp ne i32 %146, 0
  %148 = icmp ne ptr %.0114, null
  %149 = icmp ugt ptr %24, %.0114
  %150 = and i1 %148, %149
  %or.cond209 = select i1 %147, i1 %150, i1 false
  br i1 %or.cond209, label %151, label %.thread146

151:                                              ; preds = %144
  %152 = ptrtoint ptr %24 to i64
  %153 = ptrtoint ptr %.0114 to i64
  %154 = sub i64 %152, %153
  %155 = trunc i64 %154 to i32
  %156 = add nsw i32 %155, 1
  tail call void @allocate_tok(ptr noundef nonnull %0, i32 noundef %156)
  %157 = getelementptr inbounds i8, ptr %0, i64 24
  %158 = load ptr, ptr %157, align 8, !tbaa !34
  %sext = shl i64 %154, 32
  %159 = ashr exact i64 %sext, 32
  %160 = tail call ptr @strncpy(ptr noundef %158, ptr noundef nonnull %.0114, i64 noundef %159) #6
  %161 = load ptr, ptr %157, align 8, !tbaa !34
  %162 = getelementptr inbounds i8, ptr %161, i64 %159
  store i8 0, ptr %162, align 1, !tbaa !13
  %163 = getelementptr inbounds i8, ptr %0, i64 4
  store i32 9, ptr %163, align 4, !tbaa !35
  %164 = getelementptr inbounds i8, ptr %0, i64 12
  store i32 -1, ptr %164, align 4, !tbaa !36
  br label %.thread146

.thread146:                                       ; preds = %.lr.ph, %71, %144, %151
  %.3 = phi i32 [ 9, %151 ], [ 0, %144 ], [ 8, %71 ], [ 8, %.lr.ph ]
  ret i32 %.3
}

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

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() local_unnamed_addr #2

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strncpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly, i64 noundef) local_unnamed_addr #3

attributes #0 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nosync nounwind willreturn memory(none) "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 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind willreturn memory(read) }
attributes #5 = { nounwind willreturn memory(none) }
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, !11, i64 40}
!6 = !{!"TCOD_lex_t", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16, !11, i64 24, !7, i64 32, !8, i64 36, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !7, i64 72, !7, i64 76, !7, i64 80, !8, i64 84, !8, i64 584, !11, i64 2584, !11, i64 2592, !11, i64 2600, !11, i64 2608, !11, i64 2616, !12, i64 2624, !12, i64 2625, !12, i64 2626}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"_Bool", !8, i64 0}
!13 = !{!8, !8, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!6, !11, i64 2584}
!17 = distinct !{!17, !15}
!18 = !{!6, !11, i64 2592}
!19 = !{!6, !11, i64 2600}
!20 = !{!6, !11, i64 2608}
!21 = !{!11, !11, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"short", !8, i64 0}
!24 = distinct !{!24, !15}
!25 = !{!6, !7, i64 80}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = !{!6, !11, i64 64}
!29 = distinct !{!29, !15}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15}
!33 = !{!6, !12, i64 2624}
!34 = !{!6, !11, i64 24}
!35 = !{!6, !7, i64 4}
!36 = !{!6, !7, i64 12}


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