; LLVM IR from freakout42/macrocalc :: mc/mex (word)

; 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.WINDOW = type { ptr, ptr, ptr, ptr, i32, ptr, i32, i32, i32, i32, i32, i32 }
%struct.BUFFER = type { ptr, ptr, i32, ptr, i32, ptr, i32, i32, [128 x i8], [128 x i8] }
%struct.LINE = type { ptr, ptr, i16, i16, [32768 x i8] }

@lmargin = external global i32, align 4
@tabsize = external global i32, align 4
@curwp = external global ptr, align 8
@curbp = external global ptr, align 8
@fillcol = external global i32, align 4
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1

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

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

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

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

declare void @kdelete(...) #2

declare void @mlwrite(ptr noundef, ...) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @reformat(i32 noundef %0, i32 noundef %1) #1 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %21 = load i32, ptr @fillcol, align 4, !tbaa !5
  %22 = load i32, ptr @lmargin, align 4, !tbaa !5
  %23 = sub nsw i32 %21, %22
  %24 = load i32, ptr @tabsize, align 4, !tbaa !5
  %25 = icmp slt i32 %23, %24
  br i1 %25, label %26, label %27

26:                                               ; preds = %2
  call void (ptr, ...) @mlwrite(ptr noundef @.str.3)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %381

27:                                               ; preds = %2
  %28 = load ptr, ptr @curwp, align 8, !tbaa !9
  %29 = getelementptr inbounds %struct.WINDOW, ptr %28, i32 0, i32 3
  %30 = load ptr, ptr %29, align 8, !tbaa !11
  store ptr %30, ptr %12, align 8, !tbaa !9
  %31 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %31, ptr %13, align 8, !tbaa !9
  br label %32

32:                                               ; preds = %62, %27
  %33 = load ptr, ptr %12, align 8, !tbaa !9
  %34 = load ptr, ptr @curbp, align 8, !tbaa !9
  %35 = getelementptr inbounds %struct.BUFFER, ptr %34, i32 0, i32 5
  %36 = load ptr, ptr %35, align 8, !tbaa !13
  %37 = icmp ne ptr %33, %36
  br i1 %37, label %38, label %60

38:                                               ; preds = %32
  %39 = load ptr, ptr %12, align 8, !tbaa !9
  %40 = getelementptr inbounds %struct.LINE, ptr %39, i32 0, i32 3
  %41 = load i16, ptr %40, align 2, !tbaa !15
  %42 = sext i16 %41 to i32
  %43 = icmp ne i32 %42, 0
  br i1 %43, label %44, label %58

44:                                               ; preds = %38
  %45 = load ptr, ptr %12, align 8, !tbaa !9
  %46 = getelementptr inbounds %struct.LINE, ptr %45, i32 0, i32 4
  %47 = getelementptr inbounds [32768 x i8], ptr %46, i64 0, i64 0
  %48 = load i8, ptr %47, align 4, !tbaa !18
  %49 = sext i8 %48 to i32
  %50 = icmp ne i32 %49, 46
  br i1 %50, label %51, label %58

51:                                               ; preds = %44
  %52 = load ptr, ptr %12, align 8, !tbaa !9
  %53 = getelementptr inbounds %struct.LINE, ptr %52, i32 0, i32 4
  %54 = getelementptr inbounds [32768 x i8], ptr %53, i64 0, i64 0
  %55 = load i8, ptr %54, align 4, !tbaa !18
  %56 = sext i8 %55 to i32
  %57 = icmp ne i32 %56, 92
  br label %58

58:                                               ; preds = %51, %44, %38
  %59 = phi i1 [ false, %44 ], [ false, %38 ], [ %57, %51 ]
  br label %60

60:                                               ; preds = %58, %32
  %61 = phi i1 [ false, %32 ], [ %59, %58 ]
  br i1 %61, label %62, label %67

62:                                               ; preds = %60
  %63 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %63, ptr %13, align 8, !tbaa !9
  %64 = load ptr, ptr %12, align 8, !tbaa !9
  %65 = getelementptr inbounds %struct.LINE, ptr %64, i32 0, i32 1
  %66 = load ptr, ptr %65, align 8, !tbaa !19
  store ptr %66, ptr %12, align 8, !tbaa !9
  br label %32, !llvm.loop !20

67:                                               ; preds = %60
  %68 = load ptr, ptr %13, align 8, !tbaa !9
  store ptr %68, ptr %12, align 8, !tbaa !9
  br label %69

69:                                               ; preds = %99, %67
  %70 = load ptr, ptr %13, align 8, !tbaa !9
  %71 = load ptr, ptr @curbp, align 8, !tbaa !9
  %72 = getelementptr inbounds %struct.BUFFER, ptr %71, i32 0, i32 5
  %73 = load ptr, ptr %72, align 8, !tbaa !13
  %74 = icmp ne ptr %70, %73
  br i1 %74, label %75, label %97

75:                                               ; preds = %69
  %76 = load ptr, ptr %13, align 8, !tbaa !9
  %77 = getelementptr inbounds %struct.LINE, ptr %76, i32 0, i32 3
  %78 = load i16, ptr %77, align 2, !tbaa !15
  %79 = sext i16 %78 to i32
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %95

81:                                               ; preds = %75
  %82 = load ptr, ptr %13, align 8, !tbaa !9
  %83 = getelementptr inbounds %struct.LINE, ptr %82, i32 0, i32 4
  %84 = getelementptr inbounds [32768 x i8], ptr %83, i64 0, i64 0
  %85 = load i8, ptr %84, align 4, !tbaa !18
  %86 = sext i8 %85 to i32
  %87 = icmp ne i32 %86, 46
  br i1 %87, label %88, label %95

88:                                               ; preds = %81
  %89 = load ptr, ptr %13, align 8, !tbaa !9
  %90 = getelementptr inbounds %struct.LINE, ptr %89, i32 0, i32 4
  %91 = getelementptr inbounds [32768 x i8], ptr %90, i64 0, i64 0
  %92 = load i8, ptr %91, align 4, !tbaa !18
  %93 = sext i8 %92 to i32
  %94 = icmp ne i32 %93, 92
  br label %95

95:                                               ; preds = %88, %81, %75
  %96 = phi i1 [ false, %81 ], [ false, %75 ], [ %94, %88 ]
  br label %97

97:                                               ; preds = %95, %69
  %98 = phi i1 [ false, %69 ], [ %96, %95 ]
  br i1 %98, label %99, label %103

99:                                               ; preds = %97
  %100 = load ptr, ptr %13, align 8, !tbaa !9
  %101 = getelementptr inbounds %struct.LINE, ptr %100, i32 0, i32 0
  %102 = load ptr, ptr %101, align 8, !tbaa !22
  store ptr %102, ptr %13, align 8, !tbaa !9
  br label %69, !llvm.loop !23

103:                                              ; preds = %97
  %104 = load ptr, ptr %12, align 8, !tbaa !9
  %105 = load ptr, ptr %13, align 8, !tbaa !9
  %106 = icmp eq ptr %104, %105
  br i1 %106, label %107, label %108

107:                                              ; preds = %103
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %381

108:                                              ; preds = %103
  %109 = load ptr, ptr %12, align 8, !tbaa !9
  %110 = load ptr, ptr %13, align 8, !tbaa !9
  %111 = call i32 @ppkill(ptr noundef %109, ptr noundef %110)
  %112 = icmp ne i32 %111, 1
  br i1 %112, label %113, label %114

113:                                              ; preds = %108
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %381

114:                                              ; preds = %108
  %115 = load ptr, ptr %12, align 8, !tbaa !9
  store ptr %115, ptr %14, align 8, !tbaa !9
  %116 = load ptr, ptr %14, align 8, !tbaa !9
  %117 = getelementptr inbounds %struct.LINE, ptr %116, i32 0, i32 4
  %118 = getelementptr inbounds [32768 x i8], ptr %117, i64 0, i64 0
  store ptr %118, ptr %8, align 8, !tbaa !9
  %119 = load ptr, ptr %8, align 8, !tbaa !9
  %120 = load ptr, ptr %14, align 8, !tbaa !9
  %121 = getelementptr inbounds %struct.LINE, ptr %120, i32 0, i32 3
  %122 = load i16, ptr %121, align 2, !tbaa !15
  %123 = sext i16 %122 to i32
  %124 = and i32 65535, %123
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds i8, ptr %119, i64 %125
  store ptr %126, ptr %17, align 8, !tbaa !9
  %127 = load ptr, ptr %12, align 8, !tbaa !9
  %128 = getelementptr inbounds %struct.LINE, ptr %127, i32 0, i32 1
  %129 = load ptr, ptr %128, align 8, !tbaa !19
  %130 = load i32, ptr @fillcol, align 4, !tbaa !5
  %131 = call ptr @falloc(ptr noundef %129, i32 noundef %130)
  store ptr %131, ptr %15, align 8, !tbaa !9
  %132 = load ptr, ptr %15, align 8, !tbaa !9
  %133 = icmp eq ptr %132, null
  br i1 %133, label %134, label %135

134:                                              ; preds = %114
  call void (...) @kdelete()
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %381

135:                                              ; preds = %114
  store i32 0, ptr %16, align 4, !tbaa !5
  %136 = load ptr, ptr %15, align 8, !tbaa !9
  %137 = getelementptr inbounds %struct.LINE, ptr %136, i32 0, i32 4
  %138 = getelementptr inbounds [32768 x i8], ptr %137, i64 0, i64 0
  store ptr %138, ptr %7, align 8, !tbaa !9
  %139 = load ptr, ptr %7, align 8, !tbaa !9
  store ptr %139, ptr %19, align 8, !tbaa !9
  %140 = load ptr, ptr %7, align 8, !tbaa !9
  %141 = load i32, ptr @fillcol, align 4, !tbaa !5
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i8, ptr %140, i64 %142
  %144 = getelementptr inbounds i8, ptr %143, i64 1
  store ptr %144, ptr %18, align 8, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !5
  store i8 32, ptr %9, align 1, !tbaa !18
  store i8 32, ptr %6, align 1, !tbaa !18
  br label %145

145:                                              ; preds = %347, %224, %135
  %146 = load i8, ptr %9, align 1, !tbaa !18
  store i8 %146, ptr %10, align 1, !tbaa !18
  %147 = load i8, ptr %6, align 1, !tbaa !18
  store i8 %147, ptr %9, align 1, !tbaa !18
  %148 = load ptr, ptr %8, align 8, !tbaa !9
  %149 = load ptr, ptr %17, align 8, !tbaa !9
  %150 = icmp uge ptr %148, %149
  br i1 %150, label %151, label %174

151:                                              ; preds = %145
  %152 = load ptr, ptr %14, align 8, !tbaa !9
  %153 = getelementptr inbounds %struct.LINE, ptr %152, i32 0, i32 0
  %154 = load ptr, ptr %153, align 8, !tbaa !22
  store ptr %154, ptr %14, align 8, !tbaa !9
  %155 = load ptr, ptr %14, align 8, !tbaa !9
  %156 = getelementptr inbounds %struct.LINE, ptr %155, i32 0, i32 1
  %157 = load ptr, ptr %156, align 8, !tbaa !19
  call void @lfree(ptr noundef %157)
  %158 = load ptr, ptr %14, align 8, !tbaa !9
  %159 = load ptr, ptr %13, align 8, !tbaa !9
  %160 = icmp eq ptr %158, %159
  br i1 %160, label %161, label %162

161:                                              ; preds = %151
  br label %348

162:                                              ; preds = %151
  %163 = load ptr, ptr %14, align 8, !tbaa !9
  %164 = getelementptr inbounds %struct.LINE, ptr %163, i32 0, i32 4
  %165 = getelementptr inbounds [32768 x i8], ptr %164, i64 0, i64 0
  store ptr %165, ptr %8, align 8, !tbaa !9
  %166 = load ptr, ptr %8, align 8, !tbaa !9
  %167 = load ptr, ptr %14, align 8, !tbaa !9
  %168 = getelementptr inbounds %struct.LINE, ptr %167, i32 0, i32 3
  %169 = load i16, ptr %168, align 2, !tbaa !15
  %170 = sext i16 %169 to i32
  %171 = and i32 65535, %170
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds i8, ptr %166, i64 %172
  store ptr %173, ptr %17, align 8, !tbaa !9
  store i32 1, ptr %11, align 4, !tbaa !5
  store i8 32, ptr %6, align 1, !tbaa !18
  br label %195

174:                                              ; preds = %145
  %175 = load i8, ptr %9, align 1, !tbaa !18
  %176 = sext i8 %175 to i32
  %177 = icmp ne i32 %176, 32
  br i1 %177, label %190, label %178

178:                                              ; preds = %174
  %179 = load i8, ptr %10, align 1, !tbaa !18
  %180 = sext i8 %179 to i32
  %181 = icmp ne i32 %180, 46
  br i1 %181, label %182, label %194

182:                                              ; preds = %178
  %183 = load i8, ptr %10, align 1, !tbaa !18
  %184 = sext i8 %183 to i32
  %185 = icmp ne i32 %184, 63
  br i1 %185, label %186, label %194

186:                                              ; preds = %182
  %187 = load i8, ptr %10, align 1, !tbaa !18
  %188 = sext i8 %187 to i32
  %189 = icmp ne i32 %188, 33
  br i1 %189, label %190, label %194

190:                                              ; preds = %186, %174
  %191 = load ptr, ptr %8, align 8, !tbaa !9
  %192 = getelementptr inbounds i8, ptr %191, i32 1
  store ptr %192, ptr %8, align 8, !tbaa !9
  %193 = load i8, ptr %191, align 1, !tbaa !18
  store i8 %193, ptr %6, align 1, !tbaa !18
  br label %194

194:                                              ; preds = %190, %186, %182, %178
  br label %195

195:                                              ; preds = %194, %162
  %196 = load i8, ptr %6, align 1, !tbaa !18
  %197 = sext i8 %196 to i32
  %198 = icmp eq i32 %197, 9
  br i1 %198, label %199, label %213

199:                                              ; preds = %195
  %200 = load i32, ptr %11, align 4, !tbaa !5
  %201 = icmp ne i32 %200, 0
  br i1 %201, label %202, label %203

202:                                              ; preds = %199
  store i8 32, ptr %6, align 1, !tbaa !18
  br label %212

203:                                              ; preds = %199
  %204 = load i32, ptr @tabsize, align 4, !tbaa !5
  %205 = sub nsw i32 %204, 1
  %206 = load ptr, ptr %18, align 8, !tbaa !9
  %207 = sext i32 %205 to i64
  %208 = sub i64 0, %207
  %209 = getelementptr inbounds i8, ptr %206, i64 %208
  store ptr %209, ptr %18, align 8, !tbaa !9
  %210 = load i32, ptr %16, align 4, !tbaa !5
  %211 = add nsw i32 %210, 1
  store i32 %211, ptr %16, align 4, !tbaa !5
  br label %212

212:                                              ; preds = %203, %202
  br label %213

213:                                              ; preds = %212, %195
  %214 = load i8, ptr %6, align 1, !tbaa !18
  %215 = sext i8 %214 to i32
  %216 = icmp eq i32 %215, 32
  br i1 %216, label %217, label %240

217:                                              ; preds = %213
  %218 = load i32, ptr %11, align 4, !tbaa !5
  %219 = icmp ne i32 %218, 0
  br i1 %219, label %220, label %225

220:                                              ; preds = %217
  %221 = load i8, ptr %9, align 1, !tbaa !18
  %222 = sext i8 %221 to i32
  %223 = icmp eq i32 %222, 32
  br i1 %223, label %224, label %225

224:                                              ; preds = %220
  br label %145

225:                                              ; preds = %220, %217
  %226 = load ptr, ptr %7, align 8, !tbaa !9
  %227 = load ptr, ptr %15, align 8, !tbaa !9
  %228 = getelementptr inbounds %struct.LINE, ptr %227, i32 0, i32 4
  %229 = getelementptr inbounds [32768 x i8], ptr %228, i64 0, i64 0
  %230 = icmp ugt ptr %226, %229
  br i1 %230, label %231, label %239

231:                                              ; preds = %225
  %232 = load ptr, ptr %7, align 8, !tbaa !9
  %233 = getelementptr inbounds i8, ptr %232, i64 -1
  %234 = load i8, ptr %233, align 1, !tbaa !18
  %235 = sext i8 %234 to i32
  %236 = icmp ne i32 %235, 32
  br i1 %236, label %237, label %239

237:                                              ; preds = %231
  %238 = load ptr, ptr %7, align 8, !tbaa !9
  store ptr %238, ptr %19, align 8, !tbaa !9
  br label %239

239:                                              ; preds = %237, %231, %225
  br label %240

240:                                              ; preds = %239, %213
  %241 = load i8, ptr %6, align 1, !tbaa !18
  %242 = sext i8 %241 to i32
  %243 = icmp ne i32 %242, 32
  br i1 %243, label %244, label %249

244:                                              ; preds = %240
  %245 = load i8, ptr %6, align 1, !tbaa !18
  %246 = sext i8 %245 to i32
  %247 = icmp ne i32 %246, 9
  br i1 %247, label %248, label %249

248:                                              ; preds = %244
  store i32 1, ptr %11, align 4, !tbaa !5
  br label %249

249:                                              ; preds = %248, %244, %240
  %250 = load i8, ptr %6, align 1, !tbaa !18
  %251 = load ptr, ptr %7, align 8, !tbaa !9
  %252 = getelementptr inbounds i8, ptr %251, i32 1
  store ptr %252, ptr %7, align 8, !tbaa !9
  store i8 %250, ptr %251, align 1, !tbaa !18
  %253 = load ptr, ptr %7, align 8, !tbaa !9
  %254 = load ptr, ptr %18, align 8, !tbaa !9
  %255 = icmp uge ptr %253, %254
  br i1 %255, label %256, label %347

256:                                              ; preds = %249
  %257 = load ptr, ptr %19, align 8, !tbaa !9
  %258 = load ptr, ptr %15, align 8, !tbaa !9
  %259 = getelementptr inbounds %struct.LINE, ptr %258, i32 0, i32 4
  %260 = getelementptr inbounds [32768 x i8], ptr %259, i64 0, i64 0
  %261 = load i32, ptr %16, align 4, !tbaa !5
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i8, ptr %260, i64 %262
  %264 = icmp ugt ptr %257, %263
  br i1 %264, label %265, label %295

265:                                              ; preds = %256
  %266 = load ptr, ptr %7, align 8, !tbaa !9
  %267 = load ptr, ptr %19, align 8, !tbaa !9
  %268 = ptrtoint ptr %266 to i64
  %269 = ptrtoint ptr %267 to i64
  %270 = sub i64 %268, %269
  %271 = sub nsw i64 %270, 1
  %272 = load ptr, ptr %8, align 8, !tbaa !9
  %273 = sub i64 0, %271
  %274 = getelementptr inbounds i8, ptr %272, i64 %273
  store ptr %274, ptr %8, align 8, !tbaa !9
  %275 = load ptr, ptr %8, align 8, !tbaa !9
  %276 = load ptr, ptr %14, align 8, !tbaa !9
  %277 = getelementptr inbounds %struct.LINE, ptr %276, i32 0, i32 4
  %278 = getelementptr inbounds [32768 x i8], ptr %277, i64 0, i64 0
  %279 = icmp ult ptr %275, %278
  br i1 %279, label %280, label %284

280:                                              ; preds = %265
  %281 = load ptr, ptr %14, align 8, !tbaa !9
  %282 = getelementptr inbounds %struct.LINE, ptr %281, i32 0, i32 4
  %283 = getelementptr inbounds [32768 x i8], ptr %282, i64 0, i64 0
  store ptr %283, ptr %8, align 8, !tbaa !9
  br label %284

284:                                              ; preds = %280, %265
  %285 = load ptr, ptr %19, align 8, !tbaa !9
  %286 = load ptr, ptr %15, align 8, !tbaa !9
  %287 = getelementptr inbounds %struct.LINE, ptr %286, i32 0, i32 4
  %288 = getelementptr inbounds [32768 x i8], ptr %287, i64 0, i64 0
  %289 = ptrtoint ptr %285 to i64
  %290 = ptrtoint ptr %288 to i64
  %291 = sub i64 %289, %290
  %292 = trunc i64 %291 to i16
  %293 = load ptr, ptr %15, align 8, !tbaa !9
  %294 = getelementptr inbounds %struct.LINE, ptr %293, i32 0, i32 3
  store i16 %292, ptr %294, align 2, !tbaa !15
  br label %306

295:                                              ; preds = %256
  %296 = load ptr, ptr %7, align 8, !tbaa !9
  %297 = load ptr, ptr %15, align 8, !tbaa !9
  %298 = getelementptr inbounds %struct.LINE, ptr %297, i32 0, i32 4
  %299 = getelementptr inbounds [32768 x i8], ptr %298, i64 0, i64 0
  %300 = ptrtoint ptr %296 to i64
  %301 = ptrtoint ptr %299 to i64
  %302 = sub i64 %300, %301
  %303 = trunc i64 %302 to i16
  %304 = load ptr, ptr %15, align 8, !tbaa !9
  %305 = getelementptr inbounds %struct.LINE, ptr %304, i32 0, i32 3
  store i16 %303, ptr %305, align 2, !tbaa !15
  br label %306

306:                                              ; preds = %295, %284
  %307 = load i32, ptr %4, align 4, !tbaa !5
  %308 = icmp ne i32 %307, 0
  br i1 %308, label %309, label %321

309:                                              ; preds = %306
  %310 = load ptr, ptr %15, align 8, !tbaa !9
  %311 = call ptr @falloc(ptr noundef %310, i32 noundef 1)
  store ptr %311, ptr %15, align 8, !tbaa !9
  %312 = load ptr, ptr %15, align 8, !tbaa !9
  %313 = icmp eq ptr %312, null
  br i1 %313, label %314, label %315

314:                                              ; preds = %309
  br label %348

315:                                              ; preds = %309
  %316 = load ptr, ptr %15, align 8, !tbaa !9
  %317 = getelementptr inbounds %struct.LINE, ptr %316, i32 0, i32 4
  %318 = getelementptr inbounds [32768 x i8], ptr %317, i64 0, i64 0
  store i8 9, ptr %318, align 4, !tbaa !18
  %319 = load ptr, ptr %15, align 8, !tbaa !9
  %320 = getelementptr inbounds %struct.LINE, ptr %319, i32 0, i32 3
  store i16 1, ptr %320, align 2, !tbaa !15
  br label %321

321:                                              ; preds = %315, %306
  %322 = load ptr, ptr %15, align 8, !tbaa !9
  %323 = call ptr @falloc(ptr noundef %322, i32 noundef 0)
  store ptr %323, ptr %15, align 8, !tbaa !9
  %324 = load ptr, ptr %15, align 8, !tbaa !9
  %325 = icmp eq ptr %324, null
  br i1 %325, label %326, label %327

326:                                              ; preds = %321
  br label %348

327:                                              ; preds = %321
  %328 = load ptr, ptr %15, align 8, !tbaa !9
  %329 = getelementptr inbounds %struct.LINE, ptr %328, i32 0, i32 3
  %330 = load i16, ptr %329, align 2, !tbaa !15
  %331 = sext i16 %330 to i32
  %332 = and i32 65535, %331
  store i32 %332, ptr %16, align 4, !tbaa !5
  %333 = load ptr, ptr %15, align 8, !tbaa !9
  %334 = getelementptr inbounds %struct.LINE, ptr %333, i32 0, i32 4
  %335 = getelementptr inbounds [32768 x i8], ptr %334, i64 0, i64 0
  %336 = load i32, ptr %16, align 4, !tbaa !5
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds i8, ptr %335, i64 %337
  store ptr %338, ptr %7, align 8, !tbaa !9
  %339 = load ptr, ptr %7, align 8, !tbaa !9
  store ptr %339, ptr %19, align 8, !tbaa !9
  %340 = load ptr, ptr %7, align 8, !tbaa !9
  %341 = load i32, ptr @fillcol, align 4, !tbaa !5
  %342 = add nsw i32 %341, 1
  %343 = load i32, ptr @lmargin, align 4, !tbaa !5
  %344 = sub nsw i32 %342, %343
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds i8, ptr %340, i64 %345
  store ptr %346, ptr %18, align 8, !tbaa !9
  store i8 32, ptr %6, align 1, !tbaa !18
  store i8 32, ptr %9, align 1, !tbaa !18
  store i32 1, ptr %11, align 4, !tbaa !5
  br label %347

347:                                              ; preds = %327, %249
  br label %145

348:                                              ; preds = %326, %314, %161
  %349 = load ptr, ptr %7, align 8, !tbaa !9
  %350 = load ptr, ptr %15, align 8, !tbaa !9
  %351 = getelementptr inbounds %struct.LINE, ptr %350, i32 0, i32 4
  %352 = getelementptr inbounds [32768 x i8], ptr %351, i64 0, i64 0
  %353 = ptrtoint ptr %349 to i64
  %354 = ptrtoint ptr %352 to i64
  %355 = sub i64 %353, %354
  %356 = trunc i64 %355 to i16
  %357 = load ptr, ptr %15, align 8, !tbaa !9
  %358 = getelementptr inbounds %struct.LINE, ptr %357, i32 0, i32 3
  store i16 %356, ptr %358, align 2, !tbaa !15
  %359 = load ptr, ptr %15, align 8, !tbaa !9
  %360 = getelementptr inbounds %struct.LINE, ptr %359, i32 0, i32 3
  %361 = load i16, ptr %360, align 2, !tbaa !15
  %362 = sext i16 %361 to i32
  %363 = and i32 65535, %362
  %364 = load i32, ptr %16, align 4, !tbaa !5
  %365 = icmp eq i32 %363, %364
  br i1 %365, label %366, label %369

366:                                              ; preds = %348
  %367 = load ptr, ptr %15, align 8, !tbaa !9
  %368 = getelementptr inbounds %struct.LINE, ptr %367, i32 0, i32 3
  store i16 0, ptr %368, align 2, !tbaa !15
  br label %369

369:                                              ; preds = %366, %348
  call void @lchange(i32 noundef 4)
  %370 = load ptr, ptr %13, align 8, !tbaa !9
  %371 = load ptr, ptr @curwp, align 8, !tbaa !9
  %372 = getelementptr inbounds %struct.WINDOW, ptr %371, i32 0, i32 3
  store ptr %370, ptr %372, align 8, !tbaa !11
  %373 = load ptr, ptr @curwp, align 8, !tbaa !9
  %374 = getelementptr inbounds %struct.WINDOW, ptr %373, i32 0, i32 4
  store i32 0, ptr %374, align 8, !tbaa !24
  %375 = load ptr, ptr @curwp, align 8, !tbaa !9
  %376 = getelementptr inbounds %struct.WINDOW, ptr %375, i32 0, i32 10
  store i32 0, ptr %376, align 8, !tbaa !25
  %377 = load ptr, ptr @curwp, align 8, !tbaa !9
  %378 = getelementptr inbounds %struct.WINDOW, ptr %377, i32 0, i32 11
  %379 = load i32, ptr %378, align 4, !tbaa !26
  %380 = or i32 %379, 11
  store i32 %380, ptr %378, align 4, !tbaa !26
  store i32 1, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %381

381:                                              ; preds = %369, %134, %113, %107, %26
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #3
  %382 = load i32, ptr %3, align 4
  ret i32 %382
}

declare void @lfree(ptr noundef) #2

declare void @lchange(i32 noundef) #2

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

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

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


; 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"

@lmargin = external local_unnamed_addr global i32, align 4
@tabsize = external local_unnamed_addr global i32, align 4
@curwp = external local_unnamed_addr global ptr, align 8
@curbp = external local_unnamed_addr global ptr, align 8
@fillcol = external local_unnamed_addr global i32, align 4
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1

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

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

declare void @kdelete(...) local_unnamed_addr #1

declare void @mlwrite(ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @reformat(i32 noundef %0, i32 noundef %1) local_unnamed_addr #0 {
  %3 = load i32, ptr @fillcol, align 4, !tbaa !5
  %4 = load i32, ptr @lmargin, align 4, !tbaa !5
  %5 = sub nsw i32 %3, %4
  %6 = load i32, ptr @tabsize, align 4, !tbaa !5
  %7 = icmp slt i32 %5, %6
  br i1 %7, label %8, label %9

8:                                                ; preds = %2
  tail call void (ptr, ...) @mlwrite(ptr noundef nonnull @.str.3) #3
  br label %148

9:                                                ; preds = %2
  %10 = load ptr, ptr @curwp, align 8, !tbaa !9
  %11 = getelementptr inbounds i8, ptr %10, i64 24
  %12 = load ptr, ptr %11, align 8, !tbaa !11
  %13 = load ptr, ptr @curbp, align 8, !tbaa !9
  %14 = getelementptr inbounds i8, ptr %13, i64 40
  %15 = load ptr, ptr %14, align 8, !tbaa !13
  %.not243 = icmp eq ptr %12, %15
  br i1 %.not243, label %.critedge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %9
  %16 = getelementptr inbounds i8, ptr %12, i64 18
  %17 = load i16, ptr %16, align 2, !tbaa !15
  %.not153307 = icmp eq i16 %17, 0
  br i1 %.not153307, label %.critedge, label %.lr.ph310

.lr.ph:                                           ; preds = %22
  %18 = getelementptr inbounds i8, ptr %24, i64 18
  %19 = load i16, ptr %18, align 2, !tbaa !15
  %.not153 = icmp eq i16 %19, 0
  br i1 %.not153, label %.critedge, label %.lr.ph310, !llvm.loop !18

.lr.ph310:                                        ; preds = %.lr.ph.preheader, %.lr.ph
  %.0122244309 = phi ptr [ %24, %.lr.ph ], [ %12, %.lr.ph.preheader ]
  %.0120245308 = phi ptr [ %.0122244309, %.lr.ph ], [ %12, %.lr.ph.preheader ]
  %20 = getelementptr inbounds i8, ptr %.0122244309, i64 20
  %21 = load i8, ptr %20, align 4, !tbaa !20
  switch i8 %21, label %22 [
    i8 46, label %.critedge
    i8 92, label %.critedge
  ]

22:                                               ; preds = %.lr.ph310
  %23 = getelementptr inbounds i8, ptr %.0122244309, i64 8
  %24 = load ptr, ptr %23, align 8, !tbaa !21
  %.not = icmp eq ptr %24, %15
  br i1 %.not, label %.critedge, label %.lr.ph, !llvm.loop !18

.critedge:                                        ; preds = %.lr.ph310, %.lr.ph310, %22, %.lr.ph, %.lr.ph.preheader, %9
  %.0120.lcssa = phi ptr [ %12, %9 ], [ %12, %.lr.ph.preheader ], [ %.0122244309, %.lr.ph ], [ %.0122244309, %22 ], [ %.0120245308, %.lr.ph310 ], [ %.0120245308, %.lr.ph310 ]
  %.not156256 = icmp eq ptr %.0120.lcssa, %15
  br i1 %.not156256, label %.critedge2, label %.lr.ph258

.lr.ph258:                                        ; preds = %.critedge, %30
  %.1121257 = phi ptr [ %31, %30 ], [ %.0120.lcssa, %.critedge ]
  %25 = getelementptr inbounds i8, ptr %.1121257, i64 18
  %26 = load i16, ptr %25, align 2, !tbaa !15
  %.not157 = icmp eq i16 %26, 0
  br i1 %.not157, label %.critedge2, label %27

27:                                               ; preds = %.lr.ph258
  %28 = getelementptr inbounds i8, ptr %.1121257, i64 20
  %29 = load i8, ptr %28, align 4, !tbaa !20
  switch i8 %29, label %30 [
    i8 46, label %.critedge2
    i8 92, label %.critedge2
  ]

30:                                               ; preds = %27
  %31 = load ptr, ptr %.1121257, align 8, !tbaa !22
  %.not156 = icmp eq ptr %31, %15
  br i1 %.not156, label %.critedge2, label %.lr.ph258, !llvm.loop !23

.critedge2:                                       ; preds = %.lr.ph258, %30, %27, %27, %.critedge
  %.1121.lcssa = phi ptr [ %.0120.lcssa, %.critedge ], [ %.1121257, %27 ], [ %.1121257, %27 ], [ %31, %30 ], [ %.1121257, %.lr.ph258 ]
  %32 = icmp eq ptr %.0120.lcssa, %.1121.lcssa
  br i1 %32, label %148, label %33

33:                                               ; preds = %.critedge2
  %34 = tail call i32 @ppkill(ptr noundef %.0120.lcssa, ptr noundef %.1121.lcssa)
  %.not160 = icmp eq i32 %34, 1
  br i1 %.not160, label %35, label %148

35:                                               ; preds = %33
  %36 = getelementptr inbounds i8, ptr %.0120.lcssa, i64 18
  %37 = load i16, ptr %36, align 2, !tbaa !15
  %38 = getelementptr inbounds i8, ptr %.0120.lcssa, i64 8
  %39 = load ptr, ptr %38, align 8, !tbaa !21
  %40 = load i32, ptr @fillcol, align 4, !tbaa !5
  %41 = tail call ptr @falloc(ptr noundef %39, i32 noundef %40)
  %42 = icmp eq ptr %41, null
  br i1 %42, label %43, label %44

43:                                               ; preds = %35
  tail call void (...) @kdelete() #3
  br label %148

44:                                               ; preds = %35
  %45 = getelementptr inbounds i8, ptr %.0120.lcssa, i64 20
  %46 = zext i16 %37 to i64
  %47 = getelementptr inbounds i8, ptr %45, i64 %46
  %48 = getelementptr inbounds i8, ptr %41, i64 20
  %49 = load i32, ptr @fillcol, align 4, !tbaa !5
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds i8, ptr %48, i64 %50
  %52 = getelementptr inbounds i8, ptr %51, i64 1
  %.not167 = icmp eq i32 %0, 0
  br label %.outer.outer

.outer.outer:                                     ; preds = %117, %44
  %.0130.ph.ph = phi ptr [ %.3133, %117 ], [ %45, %44 ]
  %.0123.ph.ph = phi i32 [ 1, %117 ], [ 0, %44 ]
  %.0118.ph.ph = phi ptr [ %.1119177191224, %117 ], [ %.0120.lcssa, %44 ]
  %.0114.ph.ph = phi ptr [ %118, %117 ], [ %41, %44 ]
  %.0111.ph.ph = phi i32 [ %122, %117 ], [ 0, %44 ]
  %.0109.ph.ph = phi ptr [ %.1110178189225, %117 ], [ %47, %44 ]
  %.0106.ph.ph = phi ptr [ %131, %117 ], [ %52, %44 ]
  %.0.ph.ph = phi ptr [ %125, %117 ], [ %48, %44 ]
  %53 = getelementptr inbounds i8, ptr %.0114.ph.ph, i64 20
  br label %.outer

.outer:                                           ; preds = %.outer.outer, %.thread211
  %.0137.ph = phi i8 [ %.2139197222, %.thread211 ], [ 32, %.outer.outer ]
  %.0134.ph = phi ptr [ %98, %.thread211 ], [ %.0.ph.ph, %.outer.outer ]
  %.0130.ph = phi ptr [ %.1131175195223, %.thread211 ], [ %.0130.ph.ph, %.outer.outer ]
  %.0128.ph = phi i8 [ %.0137278, %.thread211 ], [ 32, %.outer.outer ]
  %.0123.ph = phi i32 [ %.2125, %.thread211 ], [ %.0123.ph.ph, %.outer.outer ]
  %.0118.ph = phi ptr [ %.1119177191224, %.thread211 ], [ %.0118.ph.ph, %.outer.outer ]
  %.0111.ph = phi i32 [ %.1112199221, %.thread211 ], [ %.0111.ph.ph, %.outer.outer ]
  %.0109.ph = phi ptr [ %.1110178189225, %.thread211 ], [ %.0109.ph.ph, %.outer.outer ]
  %.0106.ph = phi ptr [ %.1107201220, %.thread211 ], [ %.0106.ph.ph, %.outer.outer ]
  %.0.ph = phi ptr [ %.1226, %.thread211 ], [ %.0.ph.ph, %.outer.outer ]
  %.not161.peel = icmp ult ptr %.0130.ph, %.0109.ph
  br i1 %.not161.peel, label %65, label %54

54:                                               ; preds = %.outer
  %55 = load ptr, ptr %.0118.ph, align 8, !tbaa !22
  %56 = getelementptr inbounds i8, ptr %55, i64 8
  %57 = load ptr, ptr %56, align 8, !tbaa !21
  tail call void @lfree(ptr noundef %57) #3
  %58 = icmp eq ptr %55, %.1121.lcssa
  br i1 %58, label %.loopexit, label %59

59:                                               ; preds = %54
  %60 = getelementptr inbounds i8, ptr %55, i64 20
  %61 = getelementptr inbounds i8, ptr %55, i64 18
  %62 = load i16, ptr %61, align 2, !tbaa !15
  %63 = zext i16 %62 to i64
  %64 = getelementptr inbounds i8, ptr %60, i64 %63
  br label %.thread180.peel

65:                                               ; preds = %.outer
  %.not162.peel = icmp eq i8 %.0137.ph, 32
  br i1 %.not162.peel, label %66, label %67

66:                                               ; preds = %65
  switch i8 %.0128.ph, label %67 [
    i8 63, label %.thread180.peel
    i8 46, label %.thread180.peel
    i8 33, label %.thread180.peel
  ]

67:                                               ; preds = %66, %65
  %68 = getelementptr inbounds i8, ptr %.0130.ph, i64 1
  %69 = load i8, ptr %.0130.ph, align 1, !tbaa !20
  switch i8 %69, label %.thread211 [
    i8 9, label %70
    i8 32, label %.thread180.peel
  ]

70:                                               ; preds = %67
  %.not163.peel = icmp eq i32 %.0123.ph, 0
  br i1 %.not163.peel, label %.thread202, label %.thread180.peel

.thread180.peel:                                  ; preds = %70, %67, %66, %66, %66, %59
  %.1131175194.peel = phi ptr [ %68, %70 ], [ %.0130.ph, %66 ], [ %.0130.ph, %66 ], [ %.0130.ph, %66 ], [ %60, %59 ], [ %68, %67 ]
  %.1124176192.peel = phi i32 [ %.0123.ph, %70 ], [ %.0123.ph, %66 ], [ %.0123.ph, %66 ], [ %.0123.ph, %66 ], [ 1, %59 ], [ %.0123.ph, %67 ]
  %.1119177190.peel = phi ptr [ %.0118.ph, %70 ], [ %.0118.ph, %66 ], [ %.0118.ph, %66 ], [ %.0118.ph, %66 ], [ %55, %59 ], [ %.0118.ph, %67 ]
  %.1110178188.peel = phi ptr [ %.0109.ph, %70 ], [ %.0109.ph, %66 ], [ %.0109.ph, %66 ], [ %.0109.ph, %66 ], [ %64, %59 ], [ %.0109.ph, %67 ]
  %71 = icmp ne i32 %.1124176192.peel, 0
  %72 = icmp eq i8 %.0137.ph, 32
  %or.cond10.peel = and i1 %72, %71
  br i1 %or.cond10.peel, label %.peel.next.outer, label %93

.peel.next.outer:                                 ; preds = %.thread180.peel, %78
  %.0130.ph316 = phi ptr [ %79, %78 ], [ %.1131175194.peel, %.thread180.peel ]
  %.0118.ph317 = phi ptr [ %74, %78 ], [ %.1119177190.peel, %.thread180.peel ]
  %.0109.ph318 = phi ptr [ %83, %78 ], [ %.1110178188.peel, %.thread180.peel ]
  br label %.peel.next

.peel.next:                                       ; preds = %.peel.next.backedge, %.peel.next.outer
  %.0130 = phi ptr [ %.0130.ph316, %.peel.next.outer ], [ %85, %.peel.next.backedge ]
  %.not161 = icmp ult ptr %.0130, %.0109.ph318
  br i1 %.not161, label %84, label %73

73:                                               ; preds = %.peel.next
  %74 = load ptr, ptr %.0118.ph317, align 8, !tbaa !22
  %75 = getelementptr inbounds i8, ptr %74, i64 8
  %76 = load ptr, ptr %75, align 8, !tbaa !21
  tail call void @lfree(ptr noundef %76) #3
  %77 = icmp eq ptr %74, %.1121.lcssa
  br i1 %77, label %.loopexit, label %78

78:                                               ; preds = %73
  %79 = getelementptr inbounds i8, ptr %74, i64 20
  %80 = getelementptr inbounds i8, ptr %74, i64 18
  %81 = load i16, ptr %80, align 2, !tbaa !15
  %82 = zext i16 %81 to i64
  %83 = getelementptr inbounds i8, ptr %79, i64 %82
  br label %.peel.next.outer

84:                                               ; preds = %.peel.next
  %85 = getelementptr inbounds i8, ptr %.0130, i64 1
  %86 = load i8, ptr %.0130, align 1, !tbaa !20
  switch i8 %86, label %.thread211 [
    i8 9, label %.peel.next.backedge
    i8 32, label %.peel.next.backedge
  ]

.peel.next.backedge:                              ; preds = %84, %84
  br label %.peel.next

.thread202:                                       ; preds = %70
  %87 = load i32, ptr @tabsize, align 4, !tbaa !5
  %88 = add nsw i32 %87, -1
  %89 = sext i32 %88 to i64
  %90 = sub nsw i64 0, %89
  %91 = getelementptr inbounds i8, ptr %.0106.ph, i64 %90
  %92 = add nsw i32 %.0111.ph, 1
  br label %.thread211

93:                                               ; preds = %.thread180.peel
  %94 = icmp ugt ptr %.0134.ph, %53
  br i1 %94, label %95, label %.thread211

95:                                               ; preds = %93
  %96 = getelementptr inbounds i8, ptr %.0134.ph, i64 -1
  %97 = load i8, ptr %96, align 1, !tbaa !20
  %.not164 = icmp eq i8 %97, 32
  %spec.select = select i1 %.not164, ptr %.0.ph, ptr %.0134.ph
  br label %.thread211

.thread211:                                       ; preds = %84, %67, %.thread202, %95, %93
  %.0137278 = phi i8 [ %.0137.ph, %.thread202 ], [ %.0137.ph, %95 ], [ %.0137.ph, %93 ], [ %.0137.ph, %67 ], [ 32, %84 ]
  %.1226 = phi ptr [ %.0.ph, %.thread202 ], [ %spec.select, %95 ], [ %.0.ph, %93 ], [ %.0.ph, %67 ], [ %.0.ph, %84 ]
  %.1110178189225 = phi ptr [ %.0109.ph, %.thread202 ], [ %.1110178188.peel, %95 ], [ %.1110178188.peel, %93 ], [ %.0109.ph, %67 ], [ %.0109.ph318, %84 ]
  %.1119177191224 = phi ptr [ %.0118.ph, %.thread202 ], [ %.1119177190.peel, %95 ], [ %.1119177190.peel, %93 ], [ %.0118.ph, %67 ], [ %.0118.ph317, %84 ]
  %.1131175195223 = phi ptr [ %68, %.thread202 ], [ %.1131175194.peel, %95 ], [ %.1131175194.peel, %93 ], [ %68, %67 ], [ %85, %84 ]
  %.2139197222 = phi i8 [ 9, %.thread202 ], [ 32, %95 ], [ 32, %93 ], [ %69, %67 ], [ %86, %84 ]
  %.1112199221 = phi i32 [ %92, %.thread202 ], [ %.0111.ph, %95 ], [ %.0111.ph, %93 ], [ %.0111.ph, %67 ], [ %.0111.ph, %84 ]
  %.1107201220 = phi ptr [ %91, %.thread202 ], [ %.0106.ph, %95 ], [ %.0106.ph, %93 ], [ %.0106.ph, %67 ], [ %.0106.ph, %84 ]
  %.2125 = phi i32 [ 0, %.thread202 ], [ %.1124176192.peel, %95 ], [ %.1124176192.peel, %93 ], [ 1, %67 ], [ 1, %84 ]
  %98 = getelementptr inbounds i8, ptr %.0134.ph, i64 1
  store i8 %.2139197222, ptr %.0134.ph, align 1, !tbaa !20
  %.not165 = icmp ult ptr %98, %.1107201220
  br i1 %.not165, label %.outer, label %99

99:                                               ; preds = %.thread211
  %100 = getelementptr inbounds i8, ptr %.0114.ph.ph, i64 20
  %101 = sext i32 %.1112199221 to i64
  %102 = getelementptr inbounds i8, ptr %100, i64 %101
  %103 = icmp ugt ptr %.1226, %102
  %104 = ptrtoint ptr %98 to i64
  %105 = ptrtoint ptr %.1226 to i64
  %reass.sub = sub i64 %105, %104
  %.neg166 = add i64 %reass.sub, 1
  %106 = getelementptr inbounds i8, ptr %.1131175195223, i64 %.neg166
  %107 = getelementptr inbounds i8, ptr %.1119177191224, i64 20
  %108 = icmp ult ptr %106, %107
  %spec.select168 = select i1 %108, ptr %107, ptr %106
  %.sink295 = select i1 %103, i64 %105, i64 %104
  %.3133 = select i1 %103, ptr %spec.select168, ptr %.1131175195223
  %109 = ptrtoint ptr %100 to i64
  %110 = sub i64 %.sink295, %109
  %.sink = trunc i64 %110 to i16
  %111 = getelementptr inbounds i8, ptr %.0114.ph.ph, i64 18
  store i16 %.sink, ptr %111, align 2
  br i1 %.not167, label %117, label %112

112:                                              ; preds = %99
  %113 = tail call ptr @falloc(ptr noundef nonnull %.0114.ph.ph, i32 noundef 1)
  %114 = icmp ne ptr %113, null
  tail call void @llvm.assume(i1 %114)
  %115 = getelementptr inbounds i8, ptr %113, i64 20
  store i8 9, ptr %115, align 4, !tbaa !20
  %116 = getelementptr inbounds i8, ptr %113, i64 18
  store i16 1, ptr %116, align 2, !tbaa !15
  br label %117

117:                                              ; preds = %112, %99
  %.1115 = phi ptr [ %113, %112 ], [ %.0114.ph.ph, %99 ]
  %118 = tail call ptr @falloc(ptr noundef nonnull %.1115, i32 noundef 0)
  %119 = icmp ne ptr %118, null
  tail call void @llvm.assume(i1 %119)
  %120 = getelementptr inbounds i8, ptr %118, i64 18
  %121 = load i16, ptr %120, align 2, !tbaa !15
  %122 = zext i16 %121 to i32
  %123 = getelementptr inbounds i8, ptr %118, i64 20
  %124 = zext i16 %121 to i64
  %125 = getelementptr inbounds i8, ptr %123, i64 %124
  %126 = load i32, ptr @fillcol, align 4, !tbaa !5
  %127 = add nsw i32 %126, 1
  %128 = load i32, ptr @lmargin, align 4, !tbaa !5
  %129 = sub i32 %127, %128
  %130 = sext i32 %129 to i64
  %131 = getelementptr inbounds i8, ptr %125, i64 %130
  br label %.outer.outer

.loopexit:                                        ; preds = %54, %73
  %132 = getelementptr inbounds i8, ptr %.0114.ph.ph, i64 20
  %133 = ptrtoint ptr %.0134.ph to i64
  %134 = ptrtoint ptr %132 to i64
  %135 = sub i64 %133, %134
  %136 = trunc i64 %135 to i16
  %137 = getelementptr inbounds i8, ptr %.0114.ph.ph, i64 18
  %138 = trunc i64 %135 to i32
  %139 = and i32 %138, 65535
  %140 = icmp eq i32 %139, %.0111.ph
  %spec.select169 = select i1 %140, i16 0, i16 %136
  store i16 %spec.select169, ptr %137, align 2, !tbaa !15
  tail call void @lchange(i32 noundef 4) #3
  %141 = load ptr, ptr @curwp, align 8, !tbaa !9
  %142 = getelementptr inbounds i8, ptr %141, i64 24
  store ptr %.1121.lcssa, ptr %142, align 8, !tbaa !11
  %143 = getelementptr inbounds i8, ptr %141, i64 32
  store i32 0, ptr %143, align 8, !tbaa !24
  %144 = getelementptr inbounds i8, ptr %141, i64 64
  store i32 0, ptr %144, align 8, !tbaa !25
  %145 = getelementptr inbounds i8, ptr %141, i64 68
  %146 = load i32, ptr %145, align 4, !tbaa !26
  %147 = or i32 %146, 11
  store i32 %147, ptr %145, align 4, !tbaa !26
  br label %148

148:                                              ; preds = %33, %.critedge2, %.loopexit, %43, %8
  %.0127 = phi i32 [ 0, %8 ], [ 0, %43 ], [ 1, %.loopexit ], [ 0, %.critedge2 ], [ 0, %33 ]
  ret i32 %.0127
}

declare void @lfree(ptr noundef) local_unnamed_addr #1

declare void @lchange(i32 noundef) local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write)
declare void @llvm.assume(i1 noundef) #2

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

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

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


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