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

; 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.TERM = type { i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@ttrow = external dso_local global i32, align 4
@ttcol = external dso_local global i32, align 4
@term = external global %struct.TERM, align 8
@kbdmop = external global ptr, align 8
@kbdmip = external global ptr, align 8
@kbdm = external global [0 x i32], align 4
@deldir = external global i32, align 4

; 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 void @mlwrite(ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @mlputc(i32 noundef) #1

declare i32 @getkey(...) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @mlreply(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4) #1 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store i32 %3, ptr %10, align 4, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %23 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 5), align 8, !tbaa !11
  store ptr %23, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %13, align 4, !tbaa !9
  %24 = load ptr, ptr @kbdmop, align 8, !tbaa !5
  %25 = icmp ne ptr %24, null
  br i1 %25, label %26, label %42

26:                                               ; preds = %5
  br label %27

27:                                               ; preds = %38, %26
  %28 = load ptr, ptr @kbdmop, align 8, !tbaa !5
  %29 = getelementptr inbounds i32, ptr %28, i32 1
  store ptr %29, ptr @kbdmop, align 8, !tbaa !5
  %30 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %30, ptr %12, align 4, !tbaa !9
  %31 = load i32, ptr %12, align 4, !tbaa !9
  %32 = trunc i32 %31 to i8
  %33 = load ptr, ptr %9, align 8, !tbaa !5
  %34 = load i32, ptr %13, align 4, !tbaa !9
  %35 = add nsw i32 %34, 1
  store i32 %35, ptr %13, align 4, !tbaa !9
  %36 = sext i32 %34 to i64
  %37 = getelementptr inbounds i8, ptr %33, i64 %36
  store i8 %32, ptr %37, align 1, !tbaa !13
  br label %38

38:                                               ; preds = %27
  %39 = load i32, ptr %12, align 4, !tbaa !9
  %40 = icmp ne i32 %39, 0
  br i1 %40, label %27, label %41, !llvm.loop !14

41:                                               ; preds = %38
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

42:                                               ; preds = %5
  %43 = load i32, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 1), align 4, !tbaa !16
  %44 = sub nsw i32 %43, 1
  %45 = sext i32 %44 to i64
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = call i64 @strlen(ptr noundef %46) #5
  %48 = sub i64 %45, %47
  %49 = trunc i64 %48 to i32
  store i32 %49, ptr %13, align 4, !tbaa !9
  %50 = load i32, ptr %10, align 4, !tbaa !9
  %51 = load i32, ptr %13, align 4, !tbaa !9
  %52 = icmp sgt i32 %50, %51
  br i1 %52, label %53, label %55

53:                                               ; preds = %42
  %54 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %54, ptr %10, align 4, !tbaa !9
  br label %55

55:                                               ; preds = %53, %42
  %56 = load i32, ptr %10, align 4, !tbaa !9
  %57 = sub nsw i32 %56, 3
  store i32 %57, ptr %10, align 4, !tbaa !9
  br label %58

58:                                               ; preds = %368, %146, %55
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  call void (ptr, ...) @mlwrite(ptr noundef %59)
  %60 = load ptr, ptr %21, align 8, !tbaa !5
  %61 = call i32 (i32, ...) %60(i32 noundef 58)
  %62 = load ptr, ptr %21, align 8, !tbaa !5
  %63 = call i32 (i32, ...) %62(i32 noundef 32)
  %64 = load i32, ptr @ttcol, align 4, !tbaa !9
  %65 = add nsw i32 %64, 2
  store i32 %65, ptr @ttcol, align 4, !tbaa !9
  %66 = load i32, ptr @ttcol, align 4, !tbaa !9
  store i32 %66, ptr %17, align 4, !tbaa !9
  %67 = load i32, ptr @ttrow, align 4, !tbaa !9
  store i32 %67, ptr %18, align 4, !tbaa !9
  store i32 1, ptr %19, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  %68 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %68, ptr %15, align 8, !tbaa !5
  %69 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %69, ptr %16, align 8, !tbaa !5
  %70 = load ptr, ptr %16, align 8, !tbaa !5
  %71 = icmp ne ptr %70, null
  br i1 %71, label %72, label %94

72:                                               ; preds = %58
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %73

73:                                               ; preds = %86, %72
  %74 = load ptr, ptr %16, align 8, !tbaa !5
  %75 = getelementptr inbounds i8, ptr %74, i32 1
  store ptr %75, ptr %16, align 8, !tbaa !5
  %76 = load i8, ptr %74, align 1, !tbaa !13
  %77 = sext i8 %76 to i32
  store i32 %77, ptr %12, align 4, !tbaa !9
  %78 = icmp ne i32 %77, 0
  br i1 %78, label %79, label %84

79:                                               ; preds = %73
  %80 = load i32, ptr %13, align 4, !tbaa !9
  %81 = add nsw i32 %80, 1
  store i32 %81, ptr %13, align 4, !tbaa !9
  %82 = load i32, ptr %10, align 4, !tbaa !9
  %83 = icmp sle i32 %80, %82
  br label %84

84:                                               ; preds = %79, %73
  %85 = phi i1 [ false, %73 ], [ %83, %79 ]
  br i1 %85, label %86, label %93

86:                                               ; preds = %84
  %87 = load i32, ptr %12, align 4, !tbaa !9
  %88 = trunc i32 %87 to i8
  %89 = load ptr, ptr %15, align 8, !tbaa !5
  %90 = getelementptr inbounds i8, ptr %89, i32 1
  store ptr %90, ptr %15, align 8, !tbaa !5
  store i8 %88, ptr %89, align 1, !tbaa !13
  %91 = load i32, ptr %12, align 4, !tbaa !9
  %92 = call i32 @mlputc(i32 noundef %91)
  br label %73, !llvm.loop !17

93:                                               ; preds = %84
  br label %94

94:                                               ; preds = %93, %58
  %95 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 8), align 8, !tbaa !18
  %96 = call i32 (...) %95()
  br label %97

97:                                               ; preds = %102, %94
  %98 = load i32, ptr %13, align 4, !tbaa !9
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %13, align 4, !tbaa !9
  %100 = load i32, ptr %10, align 4, !tbaa !9
  %101 = icmp sle i32 %98, %100
  br i1 %101, label %102, label %105

102:                                              ; preds = %97
  %103 = load ptr, ptr %15, align 8, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %103, i32 1
  store ptr %104, ptr %15, align 8, !tbaa !5
  store i8 0, ptr %103, align 1, !tbaa !13
  br label %97, !llvm.loop !19

105:                                              ; preds = %97
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %570, %567, %478, %436, %407, %330, %289, %285, %253, %105
  %107 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 7), align 8, !tbaa !20
  %108 = load i32, ptr %18, align 4, !tbaa !9
  %109 = load i32, ptr %17, align 4, !tbaa !9
  %110 = load i32, ptr %13, align 4, !tbaa !9
  %111 = add nsw i32 %109, %110
  %112 = call i32 (i32, i32, ...) %107(i32 noundef %108, i32 noundef %111)
  %113 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 6), align 8, !tbaa !21
  %114 = call i32 (...) %113()
  %115 = call i32 (...) @getkey()
  store i32 %115, ptr %12, align 4, !tbaa !9
  %116 = load i32, ptr %12, align 4, !tbaa !9
  %117 = icmp eq i32 %116, 92
  br i1 %117, label %121, label %118

118:                                              ; preds = %106
  %119 = load i32, ptr %12, align 4, !tbaa !9
  %120 = icmp eq i32 %119, 347
  br i1 %120, label %121, label %129

121:                                              ; preds = %118, %106
  %122 = load i32, ptr %11, align 4, !tbaa !9
  %123 = icmp ne i32 %122, 0
  br i1 %123, label %124, label %129

124:                                              ; preds = %121
  %125 = load i32, ptr %20, align 4, !tbaa !9
  %126 = icmp ne i32 %125, 0
  br i1 %126, label %129, label %127

127:                                              ; preds = %124
  %128 = call i32 (...) @getkey()
  store i32 %128, ptr %12, align 4, !tbaa !9
  store i32 1, ptr %20, align 4, !tbaa !9
  br label %440

129:                                              ; preds = %124, %121, %118
  %130 = load i32, ptr %12, align 4, !tbaa !9
  %131 = icmp eq i32 %130, 347
  br i1 %131, label %132, label %136

132:                                              ; preds = %129
  %133 = load i32, ptr %11, align 4, !tbaa !9
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %136, label %135

135:                                              ; preds = %132
  store i32 2, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

136:                                              ; preds = %132, %129
  %137 = load i32, ptr %12, align 4, !tbaa !9
  %138 = icmp eq i32 %137, 327
  br i1 %138, label %142, label %139

139:                                              ; preds = %136
  %140 = load i32, ptr %12, align 4, !tbaa !9
  %141 = icmp eq i32 %140, 323
  br i1 %141, label %142, label %143

142:                                              ; preds = %139, %136
  store i32 2, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

143:                                              ; preds = %139
  %144 = load i32, ptr %12, align 4, !tbaa !9
  %145 = icmp eq i32 %144, 341
  br i1 %145, label %146, label %147

146:                                              ; preds = %143
  br label %58

147:                                              ; preds = %143
  %148 = load i32, ptr %12, align 4, !tbaa !9
  %149 = icmp eq i32 %148, 333
  br i1 %149, label %153, label %150

150:                                              ; preds = %147
  %151 = load i32, ptr %12, align 4, !tbaa !9
  %152 = icmp eq i32 %151, 330
  br i1 %152, label %153, label %205

153:                                              ; preds = %150, %147
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %154, i64 0
  %156 = load i8, ptr %155, align 1, !tbaa !13
  %157 = sext i8 %156 to i32
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %159, label %160

159:                                              ; preds = %153
  store i32 2, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

160:                                              ; preds = %153
  %161 = load ptr, ptr @kbdmip, align 8, !tbaa !5
  %162 = icmp ne ptr %161, null
  br i1 %162, label %163, label %196

163:                                              ; preds = %160
  %164 = load ptr, ptr @kbdmip, align 8, !tbaa !5
  %165 = load i32, ptr %13, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds i32, ptr %164, i64 %166
  %168 = icmp ugt ptr %167, getelementptr inbounds ([0 x i32], ptr @kbdm, i64 0, i64 253)
  br i1 %168, label %169, label %171

169:                                              ; preds = %163
  %170 = call i32 (...) @ctrlg()
  store i32 %170, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

171:                                              ; preds = %163
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %172

172:                                              ; preds = %190, %171
  %173 = load ptr, ptr %9, align 8, !tbaa !5
  %174 = load i32, ptr %14, align 4, !tbaa !9
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds i8, ptr %173, i64 %175
  %177 = load i8, ptr %176, align 1, !tbaa !13
  %178 = sext i8 %177 to i32
  store i32 %178, ptr %12, align 4, !tbaa !9
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %180, label %193

180:                                              ; preds = %172
  %181 = load ptr, ptr %9, align 8, !tbaa !5
  %182 = load i32, ptr %14, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i8, ptr %181, i64 %183
  %185 = load i8, ptr %184, align 1, !tbaa !13
  %186 = sext i8 %185 to i32
  %187 = and i32 %186, 255
  %188 = load ptr, ptr @kbdmip, align 8, !tbaa !5
  %189 = getelementptr inbounds i32, ptr %188, i32 1
  store ptr %189, ptr @kbdmip, align 8, !tbaa !5
  store i32 %187, ptr %188, align 4, !tbaa !9
  br label %190

190:                                              ; preds = %180
  %191 = load i32, ptr %14, align 4, !tbaa !9
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %14, align 4, !tbaa !9
  br label %172, !llvm.loop !22

193:                                              ; preds = %172
  %194 = load ptr, ptr @kbdmip, align 8, !tbaa !5
  %195 = getelementptr inbounds i32, ptr %194, i32 1
  store ptr %195, ptr @kbdmip, align 8, !tbaa !5
  store i32 0, ptr %194, align 4, !tbaa !9
  br label %196

196:                                              ; preds = %193, %160
  %197 = load ptr, ptr %21, align 8, !tbaa !5
  %198 = call i32 (i32, ...) %197(i32 noundef 13)
  store i32 0, ptr @ttcol, align 4, !tbaa !9
  %199 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 6), align 8, !tbaa !21
  %200 = call i32 (...) %199()
  %201 = load i32, ptr %19, align 4, !tbaa !9
  %202 = icmp ne i32 %201, 0
  br i1 %202, label %203, label %204

203:                                              ; preds = %196
  store i32 0, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

204:                                              ; preds = %196
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

205:                                              ; preds = %150
  %206 = load i32, ptr %12, align 4, !tbaa !9
  %207 = icmp eq i32 %206, 336
  br i1 %207, label %211, label %208

208:                                              ; preds = %205
  %209 = load i32, ptr %12, align 4, !tbaa !9
  %210 = icmp eq i32 %209, 334
  br i1 %210, label %211, label %213

211:                                              ; preds = %208, %205
  %212 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %212, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %571

213:                                              ; preds = %208
  %214 = load i32, ptr %12, align 4, !tbaa !9
  %215 = icmp eq i32 %214, 326
  br i1 %215, label %216, label %254

216:                                              ; preds = %213
  store i32 0, ptr %19, align 4, !tbaa !9
  %217 = load i32, ptr %13, align 4, !tbaa !9
  %218 = load i32, ptr %10, align 4, !tbaa !9
  %219 = icmp slt i32 %217, %218
  br i1 %219, label %220, label %253

220:                                              ; preds = %216
  %221 = load ptr, ptr %9, align 8, !tbaa !5
  %222 = load i32, ptr %13, align 4, !tbaa !9
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i8, ptr %221, i64 %223
  %225 = load i8, ptr %224, align 1, !tbaa !13
  %226 = sext i8 %225 to i32
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %228, label %253

228:                                              ; preds = %220
  %229 = load ptr, ptr %9, align 8, !tbaa !5
  %230 = load i32, ptr %13, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i8, ptr %229, i64 %231
  %233 = load i8, ptr %232, align 1, !tbaa !13
  %234 = sext i8 %233 to i32
  %235 = and i32 %234, 255
  store i32 %235, ptr %12, align 4, !tbaa !9
  %236 = load i32, ptr %12, align 4, !tbaa !9
  %237 = icmp slt i32 %236, 32
  br i1 %237, label %241, label %238

238:                                              ; preds = %228
  %239 = load i32, ptr %12, align 4, !tbaa !9
  %240 = icmp eq i32 %239, 127
  br i1 %240, label %241, label %250

241:                                              ; preds = %238, %228
  %242 = load i32, ptr %12, align 4, !tbaa !9
  %243 = icmp ne i32 %242, 31
  br i1 %243, label %244, label %250

244:                                              ; preds = %241
  %245 = load i32, ptr %12, align 4, !tbaa !9
  %246 = icmp ne i32 %245, 255
  br i1 %246, label %247, label %250

247:                                              ; preds = %244
  %248 = load i32, ptr %17, align 4, !tbaa !9
  %249 = add nsw i32 %248, 1
  store i32 %249, ptr %17, align 4, !tbaa !9
  br label %250

250:                                              ; preds = %247, %244, %241, %238
  %251 = load i32, ptr %13, align 4, !tbaa !9
  %252 = add nsw i32 %251, 1
  store i32 %252, ptr %13, align 4, !tbaa !9
  br label %253

253:                                              ; preds = %250, %220, %216
  br label %106

254:                                              ; preds = %213
  %255 = load i32, ptr %12, align 4, !tbaa !9
  %256 = icmp eq i32 %255, 322
  br i1 %256, label %257, label %286

257:                                              ; preds = %254
  store i32 0, ptr %19, align 4, !tbaa !9
  %258 = load i32, ptr %13, align 4, !tbaa !9
  %259 = icmp sgt i32 %258, 0
  br i1 %259, label %260, label %285

260:                                              ; preds = %257
  %261 = load i32, ptr %13, align 4, !tbaa !9
  %262 = add nsw i32 %261, -1
  store i32 %262, ptr %13, align 4, !tbaa !9
  %263 = load ptr, ptr %9, align 8, !tbaa !5
  %264 = load i32, ptr %13, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds i8, ptr %263, i64 %265
  %267 = load i8, ptr %266, align 1, !tbaa !13
  %268 = sext i8 %267 to i32
  %269 = and i32 %268, 255
  store i32 %269, ptr %12, align 4, !tbaa !9
  %270 = load i32, ptr %12, align 4, !tbaa !9
  %271 = icmp slt i32 %270, 32
  br i1 %271, label %275, label %272

272:                                              ; preds = %260
  %273 = load i32, ptr %12, align 4, !tbaa !9
  %274 = icmp eq i32 %273, 127
  br i1 %274, label %275, label %284

275:                                              ; preds = %272, %260
  %276 = load i32, ptr %12, align 4, !tbaa !9
  %277 = icmp ne i32 %276, 31
  br i1 %277, label %278, label %284

278:                                              ; preds = %275
  %279 = load i32, ptr %12, align 4, !tbaa !9
  %280 = icmp ne i32 %279, 255
  br i1 %280, label %281, label %284

281:                                              ; preds = %278
  %282 = load i32, ptr %17, align 4, !tbaa !9
  %283 = add nsw i32 %282, -1
  store i32 %283, ptr %17, align 4, !tbaa !9
  br label %284

284:                                              ; preds = %281, %278, %275, %272
  br label %285

285:                                              ; preds = %284, %257
  br label %106

286:                                              ; preds = %254
  %287 = load i32, ptr %12, align 4, !tbaa !9
  %288 = icmp eq i32 %287, 321
  br i1 %288, label %289, label %291

289:                                              ; preds = %286
  store i32 0, ptr %13, align 4, !tbaa !9
  %290 = load i32, ptr @ttcol, align 4, !tbaa !9
  store i32 %290, ptr %17, align 4, !tbaa !9
  br label %106

291:                                              ; preds = %286
  %292 = load i32, ptr %12, align 4, !tbaa !9
  %293 = icmp eq i32 %292, 325
  br i1 %293, label %294, label %331

294:                                              ; preds = %291
  %295 = load ptr, ptr %9, align 8, !tbaa !5
  %296 = getelementptr inbounds i8, ptr %295, i64 0
  store ptr %296, ptr %15, align 8, !tbaa !5
  store i32 0, ptr %13, align 4, !tbaa !9
  %297 = load i32, ptr @ttcol, align 4, !tbaa !9
  store i32 %297, ptr %17, align 4, !tbaa !9
  br label %298

298:                                              ; preds = %329, %294
  %299 = load i32, ptr %13, align 4, !tbaa !9
  %300 = load i32, ptr %10, align 4, !tbaa !9
  %301 = icmp slt i32 %299, %300
  br i1 %301, label %302, label %308

302:                                              ; preds = %298
  %303 = load ptr, ptr %15, align 8, !tbaa !5
  %304 = load i8, ptr %303, align 1, !tbaa !13
  %305 = sext i8 %304 to i32
  %306 = and i32 %305, 255
  store i32 %306, ptr %12, align 4, !tbaa !9
  %307 = icmp ne i32 %306, 0
  br label %308

308:                                              ; preds = %302, %298
  %309 = phi i1 [ false, %298 ], [ %307, %302 ]
  br i1 %309, label %310, label %330

310:                                              ; preds = %308
  %311 = load ptr, ptr %15, align 8, !tbaa !5
  %312 = getelementptr inbounds i8, ptr %311, i32 1
  store ptr %312, ptr %15, align 8, !tbaa !5
  %313 = load i32, ptr %13, align 4, !tbaa !9
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %13, align 4, !tbaa !9
  %315 = load i32, ptr %12, align 4, !tbaa !9
  %316 = icmp slt i32 %315, 32
  br i1 %316, label %320, label %317

317:                                              ; preds = %310
  %318 = load i32, ptr %12, align 4, !tbaa !9
  %319 = icmp eq i32 %318, 127
  br i1 %319, label %320, label %329

320:                                              ; preds = %317, %310
  %321 = load i32, ptr %12, align 4, !tbaa !9
  %322 = icmp ne i32 %321, 31
  br i1 %322, label %323, label %329

323:                                              ; preds = %320
  %324 = load i32, ptr %12, align 4, !tbaa !9
  %325 = icmp ne i32 %324, 255
  br i1 %325, label %326, label %329

326:                                              ; preds = %323
  %327 = load i32, ptr %17, align 4, !tbaa !9
  %328 = add nsw i32 %327, 1
  store i32 %328, ptr %17, align 4, !tbaa !9
  br label %329

329:                                              ; preds = %326, %323, %320, %317
  br label %298, !llvm.loop !23

330:                                              ; preds = %308
  br label %106

331:                                              ; preds = %291
  %332 = load i32, ptr %12, align 4, !tbaa !9
  %333 = icmp eq i32 %332, 328
  br i1 %333, label %340, label %334

334:                                              ; preds = %331
  %335 = load i32, ptr @deldir, align 4, !tbaa !9
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %337, label %370

337:                                              ; preds = %334
  %338 = load i32, ptr %12, align 4, !tbaa !9
  %339 = icmp eq i32 %338, 319
  br i1 %339, label %340, label %370

340:                                              ; preds = %337, %331
  %341 = load i32, ptr %13, align 4, !tbaa !9
  %342 = icmp sgt i32 %341, 0
  br i1 %342, label %343, label %368

343:                                              ; preds = %340
  %344 = load i32, ptr %13, align 4, !tbaa !9
  %345 = add nsw i32 %344, -1
  store i32 %345, ptr %13, align 4, !tbaa !9
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = load i32, ptr %13, align 4, !tbaa !9
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds i8, ptr %346, i64 %348
  %350 = load i8, ptr %349, align 1, !tbaa !13
  %351 = sext i8 %350 to i32
  %352 = and i32 %351, 255
  store i32 %352, ptr %14, align 4, !tbaa !9
  %353 = load i32, ptr %14, align 4, !tbaa !9
  %354 = icmp slt i32 %353, 32
  br i1 %354, label %358, label %355

355:                                              ; preds = %343
  %356 = load i32, ptr %14, align 4, !tbaa !9
  %357 = icmp eq i32 %356, 127
  br i1 %357, label %358, label %367

358:                                              ; preds = %355, %343
  %359 = load i32, ptr %14, align 4, !tbaa !9
  %360 = icmp ne i32 %359, 31
  br i1 %360, label %361, label %367

361:                                              ; preds = %358
  %362 = load i32, ptr %14, align 4, !tbaa !9
  %363 = icmp ne i32 %362, 255
  br i1 %363, label %364, label %367

364:                                              ; preds = %361
  %365 = load i32, ptr %17, align 4, !tbaa !9
  %366 = add nsw i32 %365, -1
  store i32 %366, ptr %17, align 4, !tbaa !9
  br label %367

367:                                              ; preds = %364, %361, %358, %355
  br label %369

368:                                              ; preds = %340
  br label %58

369:                                              ; preds = %367
  br label %370

370:                                              ; preds = %369, %337, %334
  %371 = load i32, ptr %12, align 4, !tbaa !9
  %372 = icmp eq i32 %371, 319
  br i1 %372, label %379, label %373

373:                                              ; preds = %370
  %374 = load i32, ptr %12, align 4, !tbaa !9
  %375 = icmp eq i32 %374, 324
  br i1 %375, label %379, label %376

376:                                              ; preds = %373
  %377 = load i32, ptr %12, align 4, !tbaa !9
  %378 = icmp eq i32 %377, 328
  br i1 %378, label %379, label %411

379:                                              ; preds = %376, %373, %370
  store i32 0, ptr %19, align 4, !tbaa !9
  %380 = load ptr, ptr %9, align 8, !tbaa !5
  %381 = load i32, ptr %13, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds i8, ptr %380, i64 %382
  store ptr %383, ptr %15, align 8, !tbaa !5
  %384 = load ptr, ptr %15, align 8, !tbaa !5
  %385 = getelementptr inbounds i8, ptr %384, i64 1
  store ptr %385, ptr %16, align 8, !tbaa !5
  %386 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 7), align 8, !tbaa !20
  %387 = load i32, ptr %18, align 4, !tbaa !9
  %388 = load i32, ptr %17, align 4, !tbaa !9
  %389 = load i32, ptr %13, align 4, !tbaa !9
  %390 = add nsw i32 %388, %389
  %391 = call i32 (i32, i32, ...) %386(i32 noundef %387, i32 noundef %390)
  br label %392

392:                                              ; preds = %397, %379
  %393 = load ptr, ptr %16, align 8, !tbaa !5
  %394 = load i8, ptr %393, align 1, !tbaa !13
  %395 = sext i8 %394 to i32
  %396 = icmp ne i32 %395, 0
  br i1 %396, label %397, label %407

397:                                              ; preds = %392
  %398 = load ptr, ptr %16, align 8, !tbaa !5
  %399 = load i8, ptr %398, align 1, !tbaa !13
  %400 = sext i8 %399 to i32
  %401 = call i32 @mlputc(i32 noundef %400)
  %402 = load ptr, ptr %16, align 8, !tbaa !5
  %403 = getelementptr inbounds i8, ptr %402, i32 1
  store ptr %403, ptr %16, align 8, !tbaa !5
  %404 = load i8, ptr %402, align 1, !tbaa !13
  %405 = load ptr, ptr %15, align 8, !tbaa !5
  %406 = getelementptr inbounds i8, ptr %405, i32 1
  store ptr %406, ptr %15, align 8, !tbaa !5
  store i8 %404, ptr %405, align 1, !tbaa !13
  br label %392, !llvm.loop !24

407:                                              ; preds = %392
  %408 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 8), align 8, !tbaa !18
  %409 = call i32 (...) %408()
  %410 = load ptr, ptr %15, align 8, !tbaa !5
  store i8 0, ptr %410, align 1, !tbaa !13
  br label %106

411:                                              ; preds = %376
  %412 = load i32, ptr %12, align 4, !tbaa !9
  %413 = icmp eq i32 %412, 331
  br i1 %413, label %414, label %439

414:                                              ; preds = %411
  store i32 0, ptr %19, align 4, !tbaa !9
  %415 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %415, ptr %14, align 4, !tbaa !9
  br label %416

416:                                              ; preds = %430, %414
  %417 = load i32, ptr %14, align 4, !tbaa !9
  %418 = load i32, ptr %10, align 4, !tbaa !9
  %419 = icmp sle i32 %417, %418
  br i1 %419, label %420, label %428

420:                                              ; preds = %416
  %421 = load ptr, ptr %9, align 8, !tbaa !5
  %422 = load i32, ptr %14, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i8, ptr %421, i64 %423
  %425 = load i8, ptr %424, align 1, !tbaa !13
  %426 = sext i8 %425 to i32
  %427 = icmp ne i32 %426, 0
  br label %428

428:                                              ; preds = %420, %416
  %429 = phi i1 [ false, %416 ], [ %427, %420 ]
  br i1 %429, label %430, label %436

430:                                              ; preds = %428
  %431 = load ptr, ptr %9, align 8, !tbaa !5
  %432 = load i32, ptr %14, align 4, !tbaa !9
  %433 = add nsw i32 %432, 1
  store i32 %433, ptr %14, align 4, !tbaa !9
  %434 = sext i32 %432 to i64
  %435 = getelementptr inbounds i8, ptr %431, i64 %434
  store i8 0, ptr %435, align 1, !tbaa !13
  br label %416, !llvm.loop !25

436:                                              ; preds = %428
  %437 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 8), align 8, !tbaa !18
  %438 = call i32 (...) %437()
  br label %106

439:                                              ; preds = %411
  br label %440

440:                                              ; preds = %439, %127
  %441 = load i32, ptr %19, align 4, !tbaa !9
  %442 = icmp ne i32 %441, 0
  br i1 %442, label %443, label %471

443:                                              ; preds = %440
  %444 = load i32, ptr %13, align 4, !tbaa !9
  %445 = icmp eq i32 %444, 0
  br i1 %445, label %446, label %471

446:                                              ; preds = %443
  %447 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %447, ptr %14, align 4, !tbaa !9
  br label %448

448:                                              ; preds = %462, %446
  %449 = load i32, ptr %14, align 4, !tbaa !9
  %450 = load i32, ptr %10, align 4, !tbaa !9
  %451 = icmp sle i32 %449, %450
  br i1 %451, label %452, label %460

452:                                              ; preds = %448
  %453 = load ptr, ptr %9, align 8, !tbaa !5
  %454 = load i32, ptr %14, align 4, !tbaa !9
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds i8, ptr %453, i64 %455
  %457 = load i8, ptr %456, align 1, !tbaa !13
  %458 = sext i8 %457 to i32
  %459 = icmp ne i32 %458, 0
  br label %460

460:                                              ; preds = %452, %448
  %461 = phi i1 [ false, %448 ], [ %459, %452 ]
  br i1 %461, label %462, label %468

462:                                              ; preds = %460
  %463 = load ptr, ptr %9, align 8, !tbaa !5
  %464 = load i32, ptr %14, align 4, !tbaa !9
  %465 = add nsw i32 %464, 1
  store i32 %465, ptr %14, align 4, !tbaa !9
  %466 = sext i32 %464 to i64
  %467 = getelementptr inbounds i8, ptr %463, i64 %466
  store i8 0, ptr %467, align 1, !tbaa !13
  br label %448, !llvm.loop !26

468:                                              ; preds = %460
  %469 = load ptr, ptr getelementptr inbounds (%struct.TERM, ptr @term, i32 0, i32 8), align 8, !tbaa !18
  %470 = call i32 (...) %469()
  br label %471

471:                                              ; preds = %468, %443, %440
  store i32 0, ptr %19, align 4, !tbaa !9
  %472 = load i32, ptr %12, align 4, !tbaa !9
  %473 = and i32 %472, 256
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %475, label %488

475:                                              ; preds = %471
  %476 = load i32, ptr %11, align 4, !tbaa !9
  %477 = icmp ne i32 %476, 0
  br i1 %477, label %479, label %478

478:                                              ; preds = %475
  br label %106

479:                                              ; preds = %475
  %480 = load i32, ptr %12, align 4, !tbaa !9
  %481 = and i32 %480, 255
  store i32 %481, ptr %12, align 4, !tbaa !9
  %482 = load i32, ptr %12, align 4, !tbaa !9
  %483 = xor i32 %482, 64
  store i32 %483, ptr %12, align 4, !tbaa !9
  %484 = load i32, ptr %12, align 4, !tbaa !9
  %485 = icmp eq i32 %484, 13
  br i1 %485, label %486, label %487

486:                                              ; preds = %479
  store i32 10, ptr %12, align 4, !tbaa !9
  br label %487

487:                                              ; preds = %486, %479
  br label %488

488:                                              ; preds = %487, %471
  %489 = load i32, ptr %11, align 4, !tbaa !9
  %490 = icmp ne i32 %489, 0
  br i1 %490, label %491, label %509

491:                                              ; preds = %488
  %492 = load i32, ptr %20, align 4, !tbaa !9
  %493 = icmp ne i32 %492, 0
  br i1 %493, label %509, label %494

494:                                              ; preds = %491
  %495 = load i32, ptr %12, align 4, !tbaa !9
  %496 = icmp eq i32 %495, 23
  br i1 %496, label %497, label %498

497:                                              ; preds = %494
  store i32 13, ptr %12, align 4, !tbaa !9
  br label %508

498:                                              ; preds = %494
  %499 = load i32, ptr %12, align 4, !tbaa !9
  %500 = icmp eq i32 %499, 46
  br i1 %500, label %501, label %502

501:                                              ; preds = %498
  store i32 31, ptr %12, align 4, !tbaa !9
  br label %507

502:                                              ; preds = %498
  %503 = load i32, ptr %12, align 4, !tbaa !9
  %504 = icmp eq i32 %503, 33
  br i1 %504, label %505, label %506

505:                                              ; preds = %502
  store i32 255, ptr %12, align 4, !tbaa !9
  br label %506

506:                                              ; preds = %505, %502
  br label %507

507:                                              ; preds = %506, %501
  br label %508

508:                                              ; preds = %507, %497
  br label %509

509:                                              ; preds = %508, %491, %488
  store i32 0, ptr %20, align 4, !tbaa !9
  %510 = load i32, ptr %13, align 4, !tbaa !9
  %511 = load i32, ptr %10, align 4, !tbaa !9
  %512 = icmp slt i32 %510, %511
  br i1 %512, label %513, label %570

513:                                              ; preds = %509
  %514 = load i32, ptr %12, align 4, !tbaa !9
  %515 = call i32 @mlputc(i32 noundef %514)
  %516 = load i32, ptr %17, align 4, !tbaa !9
  %517 = add nsw i32 %516, %515
  store i32 %517, ptr %17, align 4, !tbaa !9
  %518 = load ptr, ptr %9, align 8, !tbaa !5
  %519 = load i32, ptr %13, align 4, !tbaa !9
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds i8, ptr %518, i64 %520
  store ptr %521, ptr %15, align 8, !tbaa !5
  %522 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %522, ptr %16, align 8, !tbaa !5
  %523 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %523, ptr %14, align 4, !tbaa !9
  br label %524

524:                                              ; preds = %537, %513
  %525 = load i32, ptr %14, align 4, !tbaa !9
  %526 = add nsw i32 %525, 1
  store i32 %526, ptr %14, align 4, !tbaa !9
  %527 = load i32, ptr %10, align 4, !tbaa !9
  %528 = icmp slt i32 %525, %527
  br i1 %528, label %529, label %535

529:                                              ; preds = %524
  %530 = load ptr, ptr %16, align 8, !tbaa !5
  %531 = getelementptr inbounds i8, ptr %530, i32 1
  store ptr %531, ptr %16, align 8, !tbaa !5
  %532 = load i8, ptr %530, align 1, !tbaa !13
  %533 = sext i8 %532 to i32
  %534 = icmp ne i32 %533, 0
  br label %535

535:                                              ; preds = %529, %524
  %536 = phi i1 [ false, %524 ], [ %534, %529 ]
  br i1 %536, label %537, label %538

537:                                              ; preds = %535
  br label %524, !llvm.loop !27

538:                                              ; preds = %535
  br label %539

539:                                              ; preds = %543, %538
  %540 = load ptr, ptr %16, align 8, !tbaa !5
  %541 = load ptr, ptr %15, align 8, !tbaa !5
  %542 = icmp ne ptr %540, %541
  br i1 %542, label %543, label %551

543:                                              ; preds = %539
  %544 = load ptr, ptr %16, align 8, !tbaa !5
  %545 = getelementptr inbounds i8, ptr %544, i64 -1
  %546 = load i8, ptr %545, align 1, !tbaa !13
  %547 = load ptr, ptr %16, align 8, !tbaa !5
  %548 = getelementptr inbounds i8, ptr %547, i64 0
  store i8 %546, ptr %548, align 1, !tbaa !13
  %549 = load ptr, ptr %16, align 8, !tbaa !5
  %550 = getelementptr inbounds i8, ptr %549, i32 -1
  store ptr %550, ptr %16, align 8, !tbaa !5
  br label %539, !llvm.loop !28

551:                                              ; preds = %539
  %552 = load i32, ptr %12, align 4, !tbaa !9
  %553 = trunc i32 %552 to i8
  %554 = load ptr, ptr %16, align 8, !tbaa !5
  %555 = getelementptr inbounds i8, ptr %554, i32 1
  store ptr %555, ptr %16, align 8, !tbaa !5
  store i8 %553, ptr %554, align 1, !tbaa !13
  br label %556

556:                                              ; preds = %561, %551
  %557 = load ptr, ptr %16, align 8, !tbaa !5
  %558 = load i8, ptr %557, align 1, !tbaa !13
  %559 = sext i8 %558 to i32
  %560 = icmp ne i32 %559, 0
  br i1 %560, label %561, label %567

561:                                              ; preds = %556
  %562 = load ptr, ptr %16, align 8, !tbaa !5
  %563 = getelementptr inbounds i8, ptr %562, i32 1
  store ptr %563, ptr %16, align 8, !tbaa !5
  %564 = load i8, ptr %562, align 1, !tbaa !13
  %565 = sext i8 %564 to i32
  %566 = call i32 @mlputc(i32 noundef %565)
  br label %556, !llvm.loop !29

567:                                              ; preds = %556
  %568 = load i32, ptr %13, align 4, !tbaa !9
  %569 = add nsw i32 %568, 1
  store i32 %569, ptr %13, align 4, !tbaa !9
  br label %106

570:                                              ; preds = %509
  br label %106

571:                                              ; preds = %211, %204, %203, %169, %159, %142, %135, %41
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  %572 = load i32, ptr %6, align 4
  ret i32 %572
}

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

declare i32 @ctrlg(...) #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 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 #4 = { nounwind }
attributes #5 = { nounwind willreturn memory(read) }

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

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


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

%struct.TERM = type { i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@ttrow = external dso_local local_unnamed_addr global i32, align 4
@ttcol = external dso_local local_unnamed_addr global i32, align 4
@term = external local_unnamed_addr global %struct.TERM, align 8
@kbdmop = external local_unnamed_addr global ptr, align 8
@kbdmip = external local_unnamed_addr global ptr, align 8
@kbdm = external global [0 x i32], align 4
@deldir = external local_unnamed_addr global i32, align 4

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

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

declare i32 @getkey(...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local i32 @mlreply(ptr noundef %0, ptr noundef readonly %1, ptr noundef %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #0 {
  %6 = ptrtoint ptr %2 to i64
  %7 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 32), align 8, !tbaa !5
  %8 = load ptr, ptr @kbdmop, align 8, !tbaa !11
  %.not = icmp eq ptr %8, null
  br i1 %.not, label %14, label %.preheader288

.preheader288:                                    ; preds = %5, %.preheader288
  %indvars.iv = phi i64 [ %indvars.iv.next, %.preheader288 ], [ 0, %5 ]
  %9 = load ptr, ptr @kbdmop, align 8, !tbaa !11
  %10 = getelementptr inbounds i8, ptr %9, i64 4
  store ptr %10, ptr @kbdmop, align 8, !tbaa !11
  %11 = load i32, ptr %9, align 4, !tbaa !12
  %12 = trunc i32 %11 to i8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %13 = getelementptr inbounds i8, ptr %2, i64 %indvars.iv
  store i8 %12, ptr %13, align 1, !tbaa !13
  %.not277 = icmp eq i32 %11, 0
  br i1 %.not277, label %.loopexit, label %.preheader288, !llvm.loop !14

14:                                               ; preds = %5
  %15 = load i32, ptr getelementptr inbounds (i8, ptr @term, i64 4), align 4, !tbaa !16
  %16 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %0) #5
  %17 = trunc i64 %16 to i32
  %18 = xor i32 %17, -1
  %19 = add i32 %15, %18
  %spec.select = tail call i32 @llvm.smin.i32(i32 %19, i32 %3)
  %20 = add i32 %spec.select, -3
  %.not258 = icmp eq ptr %1, null
  %21 = icmp ne i32 %4, 0
  %22 = icmp sgt i32 %spec.select, 3
  %.not263324 = icmp slt i32 %spec.select, 3
  %23 = icmp eq i32 %4, 0
  %smax = tail call i32 @llvm.smax.i32(i32 %20, i32 -1)
  %24 = add i32 %smax, 2
  %25 = add i32 %smax, 1
  %26 = add i32 %spec.select, -2
  %wide.trip.count = zext nneg i32 %26 to i64
  br label %.loopexit286

.loopexit286.loopexit:                            ; preds = %122, %60
  br label %.loopexit286

.loopexit286:                                     ; preds = %.loopexit286.loopexit, %14
  %.1236 = phi i32 [ %19, %14 ], [ %.5240, %.loopexit286.loopexit ]
  tail call void (ptr, ...) @mlwrite(ptr noundef %0)
  %27 = tail call i32 (i32, ...) %7(i32 noundef 58) #6
  %28 = tail call i32 (i32, ...) %7(i32 noundef 32) #6
  %29 = load i32, ptr @ttcol, align 4, !tbaa !12
  %30 = add nsw i32 %29, 2
  store i32 %30, ptr @ttcol, align 4, !tbaa !12
  %31 = load i32, ptr @ttrow, align 4, !tbaa !12
  br i1 %.not258, label %.critedge, label %.preheader287

.preheader287:                                    ; preds = %.loopexit286
  %32 = load i8, ptr %1, align 1, !tbaa !13
  %.not259294 = icmp eq i8 %32, 0
  br i1 %.not259294, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader287, %34
  %33 = phi i8 [ %40, %34 ], [ %32, %.preheader287 ]
  %.pn = phi ptr [ %36, %34 ], [ %1, %.preheader287 ]
  %.0226296 = phi ptr [ %38, %34 ], [ %2, %.preheader287 ]
  %.2237295 = phi i32 [ %35, %34 ], [ 0, %.preheader287 ]
  %exitcond = icmp eq i32 %.2237295, %25
  br i1 %exitcond, label %.critedge, label %34

34:                                               ; preds = %.lr.ph
  %35 = add nuw i32 %.2237295, 1
  %36 = getelementptr inbounds i8, ptr %.pn, i64 1
  %37 = sext i8 %33 to i32
  %38 = getelementptr inbounds i8, ptr %.0226296, i64 1
  store i8 %33, ptr %.0226296, align 1, !tbaa !13
  %39 = tail call i32 @mlputc(i32 noundef %37)
  %40 = load i8, ptr %36, align 1, !tbaa !13
  %.not259 = icmp eq i8 %40, 0
  br i1 %.not259, label %.critedge, label %.lr.ph, !llvm.loop !17

.critedge:                                        ; preds = %34, %.lr.ph, %.preheader287, %.loopexit286
  %.3238 = phi i32 [ %.1236, %.loopexit286 ], [ 0, %.preheader287 ], [ %35, %34 ], [ %24, %.lr.ph ]
  %.1227 = phi ptr [ %2, %.loopexit286 ], [ %2, %.preheader287 ], [ %38, %34 ], [ %.0226296, %.lr.ph ]
  %41 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 56), align 8, !tbaa !18
  %42 = tail call i32 (...) %41() #6
  %.not261301 = icmp sgt i32 %.3238, %20
  br i1 %.not261301, label %.preheader285.preheader, label %.lr.ph304.preheader

.lr.ph304.preheader:                              ; preds = %.critedge
  %43 = sub i32 %20, %.3238
  %44 = zext i32 %43 to i64
  %45 = add nuw nsw i64 %44, 1
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %.1227, i8 0, i64 %45, i1 false), !tbaa !13
  br label %.preheader285.preheader

.preheader285.preheader:                          ; preds = %.lr.ph304.preheader, %.critedge
  br label %.preheader285

.preheader285:                                    ; preds = %.preheader285.backedge, %.preheader285.preheader
  %.5240 = phi i32 [ 0, %.preheader285.preheader ], [ %.5240.be, %.preheader285.backedge ]
  %.0218 = phi i32 [ %30, %.preheader285.preheader ], [ %.0218.be, %.preheader285.backedge ]
  %.0216 = phi i32 [ 1, %.preheader285.preheader ], [ %.0216.be, %.preheader285.backedge ]
  %.0215 = phi i32 [ 0, %.preheader285.preheader ], [ %.0215.be, %.preheader285.backedge ]
  %46 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 48), align 8, !tbaa !19
  %47 = add nsw i32 %.0218, %.5240
  %48 = tail call i32 (i32, i32, ...) %46(i32 noundef %31, i32 noundef %47) #6
  %49 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 40), align 8, !tbaa !20
  %50 = tail call i32 (...) %49() #6
  %51 = tail call i32 (...) @getkey() #6
  %52 = icmp eq i32 %51, 92
  %53 = icmp eq i32 %51, 347
  %or.cond = or i1 %52, %53
  %or.cond3 = and i1 %21, %or.cond
  %54 = icmp eq i32 %.0215, 0
  %or.cond5.not = select i1 %or.cond3, i1 %54, i1 false
  br i1 %or.cond5.not, label %55, label %57

55:                                               ; preds = %.preheader285
  %56 = tail call i32 (...) @getkey() #6
  br label %155

57:                                               ; preds = %.preheader285
  %58 = icmp ne i32 %51, 347
  %or.cond7 = or i1 %21, %58
  %59 = and i32 %51, -5
  %or.cond9 = icmp ne i32 %59, 323
  %or.cond282.not = and i1 %or.cond9, %or.cond7
  br i1 %or.cond282.not, label %60, label %.loopexit

60:                                               ; preds = %57
  switch i32 %51, label %118 [
    i32 341, label %.loopexit286.loopexit
    i32 333, label %61
    i32 330, label %61
    i32 336, label %.loopexit
    i32 334, label %.loopexit
    i32 326, label %83
    i32 322, label %95
    i32 321, label %106
    i32 325, label %108
    i32 328, label %122
  ]

61:                                               ; preds = %60, %60
  %62 = load i8, ptr %2, align 1, !tbaa !13
  %63 = icmp eq i8 %62, 0
  br i1 %63, label %.loopexit, label %64

64:                                               ; preds = %61
  %65 = load ptr, ptr @kbdmip, align 8, !tbaa !11
  %.not274 = icmp eq ptr %65, null
  br i1 %.not274, label %79, label %66

66:                                               ; preds = %64
  %67 = sext i32 %.5240 to i64
  %68 = getelementptr inbounds i32, ptr %65, i64 %67
  %69 = icmp ugt ptr %68, getelementptr inbounds (i8, ptr @kbdm, i64 1012)
  br i1 %69, label %70, label %.lr.ph341

70:                                               ; preds = %66
  %71 = tail call i32 (...) @ctrlg() #6
  br label %.loopexit

.lr.ph341:                                        ; preds = %66, %.lr.ph341
  %indvars.iv366 = phi i64 [ %indvars.iv.next367, %.lr.ph341 ], [ 0, %66 ]
  %72 = phi i8 [ %77, %.lr.ph341 ], [ %62, %66 ]
  %73 = phi ptr [ %75, %.lr.ph341 ], [ %65, %66 ]
  %74 = zext i8 %72 to i32
  %75 = getelementptr inbounds i8, ptr %73, i64 4
  store ptr %75, ptr @kbdmip, align 8, !tbaa !11
  store i32 %74, ptr %73, align 4, !tbaa !12
  %indvars.iv.next367 = add nuw nsw i64 %indvars.iv366, 1
  %76 = getelementptr inbounds i8, ptr %2, i64 %indvars.iv.next367
  %77 = load i8, ptr %76, align 1, !tbaa !13
  %.not275 = icmp eq i8 %77, 0
  br i1 %.not275, label %._crit_edge342, label %.lr.ph341, !llvm.loop !21

._crit_edge342:                                   ; preds = %.lr.ph341
  %78 = getelementptr inbounds i8, ptr %73, i64 8
  store ptr %78, ptr @kbdmip, align 8, !tbaa !11
  store i32 0, ptr %75, align 4, !tbaa !12
  br label %79

79:                                               ; preds = %._crit_edge342, %64
  %80 = tail call i32 (i32, ...) %7(i32 noundef 13) #6
  store i32 0, ptr @ttcol, align 4, !tbaa !12
  %81 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 40), align 8, !tbaa !20
  %82 = tail call i32 (...) %81() #6
  %. = xor i32 %.0216, 1
  br label %.loopexit

83:                                               ; preds = %60
  %84 = icmp slt i32 %.5240, %20
  br i1 %84, label %85, label %.preheader285.backedge

85:                                               ; preds = %83
  %86 = sext i32 %.5240 to i64
  %87 = getelementptr inbounds i8, ptr %2, i64 %86
  %88 = load i8, ptr %87, align 1, !tbaa !13
  %.not273 = icmp eq i8 %88, 0
  br i1 %.not273, label %.preheader285.backedge, label %89

89:                                               ; preds = %85
  %90 = icmp ult i8 %88, 32
  %91 = icmp eq i8 %88, 127
  %or.cond15 = or i1 %90, %91
  %92 = icmp ne i8 %88, 31
  %or.cond17 = and i1 %92, %or.cond15
  %93 = zext i1 %or.cond17 to i32
  %spec.select278 = add nsw i32 %.0218, %93
  %94 = add nsw i32 %.5240, 1
  br label %.preheader285.backedge

95:                                               ; preds = %60
  %96 = icmp sgt i32 %.5240, 0
  br i1 %96, label %97, label %.preheader285.backedge

97:                                               ; preds = %95
  %98 = add nsw i32 %.5240, -1
  %99 = zext nneg i32 %98 to i64
  %100 = getelementptr inbounds i8, ptr %2, i64 %99
  %101 = load i8, ptr %100, align 1, !tbaa !13
  %102 = icmp ult i8 %101, 32
  %103 = icmp eq i8 %101, 127
  %or.cond21 = or i1 %102, %103
  %104 = icmp ne i8 %101, 31
  %or.cond23 = and i1 %104, %or.cond21
  %105 = sext i1 %or.cond23 to i32
  %spec.select279 = add nsw i32 %.0218, %105
  br label %.preheader285.backedge

106:                                              ; preds = %60
  %107 = load i32, ptr @ttcol, align 4, !tbaa !12
  br label %.preheader285.backedge

108:                                              ; preds = %60
  %109 = load i32, ptr @ttcol, align 4, !tbaa !12
  br i1 %22, label %.lr.ph308, label %.preheader285.backedge

.preheader285.backedge:                           ; preds = %.lr.ph308, %111, %108, %95, %97, %83, %85, %89, %106, %._crit_edge, %.critedge47, %._crit_edge338, %165, %176
  %.5240.be = phi i32 [ 0, %106 ], [ %.9, %._crit_edge ], [ %.9, %.critedge47 ], [ %206, %._crit_edge338 ], [ %.10, %176 ], [ %.10, %165 ], [ %94, %89 ], [ %.5240, %85 ], [ %.5240, %83 ], [ %.5240, %95 ], [ %98, %97 ], [ 0, %108 ], [ %20, %111 ], [ %.8305, %.lr.ph308 ]
  %.0218.be = phi i32 [ %107, %106 ], [ %.6, %._crit_edge ], [ %.6, %.critedge47 ], [ %180, %._crit_edge338 ], [ %.7, %176 ], [ %.7, %165 ], [ %spec.select278, %89 ], [ %.0218, %85 ], [ %.0218, %83 ], [ %.0218, %95 ], [ %spec.select279, %97 ], [ %109, %108 ], [ %spec.select280, %111 ], [ %.4307, %.lr.ph308 ]
  %.0216.be = phi i32 [ %.0216, %106 ], [ 0, %._crit_edge ], [ 0, %.critedge47 ], [ 0, %._crit_edge338 ], [ 0, %176 ], [ 0, %165 ], [ 0, %89 ], [ 0, %85 ], [ 0, %83 ], [ 0, %95 ], [ 0, %97 ], [ %.0216, %108 ], [ %.0216, %111 ], [ %.0216, %.lr.ph308 ]
  %.0215.be = phi i32 [ %.0215, %106 ], [ %.0215, %._crit_edge ], [ %.0215, %.critedge47 ], [ 0, %._crit_edge338 ], [ 0, %176 ], [ %.1, %165 ], [ %.0215, %89 ], [ %.0215, %85 ], [ %.0215, %83 ], [ %.0215, %95 ], [ %.0215, %97 ], [ %.0215, %108 ], [ %.0215, %111 ], [ %.0215, %.lr.ph308 ]
  br label %.preheader285

.lr.ph308:                                        ; preds = %108, %111
  %.4307 = phi i32 [ %spec.select280, %111 ], [ %109, %108 ]
  %.3229306 = phi ptr [ %112, %111 ], [ %2, %108 ]
  %.8305 = phi i32 [ %113, %111 ], [ 0, %108 ]
  %110 = load i8, ptr %.3229306, align 1, !tbaa !13
  %.not272 = icmp eq i8 %110, 0
  br i1 %.not272, label %.preheader285.backedge, label %111

111:                                              ; preds = %.lr.ph308
  %112 = getelementptr inbounds i8, ptr %.3229306, i64 1
  %113 = add nuw nsw i32 %.8305, 1
  %114 = icmp ult i8 %110, 32
  %115 = icmp eq i8 %110, 127
  %or.cond29 = or i1 %114, %115
  %116 = icmp ne i8 %110, 31
  %or.cond31 = and i1 %116, %or.cond29
  %117 = zext i1 %or.cond31 to i32
  %spec.select280 = add nsw i32 %.4307, %117
  %exitcond351.not = icmp eq i32 %113, %20
  br i1 %exitcond351.not, label %.preheader285.backedge, label %.lr.ph308, !llvm.loop !22

118:                                              ; preds = %60
  %119 = load i32, ptr @deldir, align 4, !tbaa !12
  %120 = icmp ne i32 %119, 0
  %121 = icmp eq i32 %51, 319
  %or.cond35 = and i1 %121, %120
  br i1 %or.cond35, label %122, label %133

122:                                              ; preds = %60, %118
  %123 = icmp sgt i32 %.5240, 0
  br i1 %123, label %124, label %.loopexit286.loopexit

124:                                              ; preds = %122
  %125 = add nsw i32 %.5240, -1
  %126 = zext nneg i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %2, i64 %126
  %128 = load i8, ptr %127, align 1, !tbaa !13
  %129 = icmp ult i8 %128, 32
  %130 = icmp eq i8 %128, 127
  %or.cond37 = or i1 %129, %130
  %131 = icmp ne i8 %128, 31
  %or.cond39 = and i1 %131, %or.cond37
  %132 = sext i1 %or.cond39 to i32
  %spec.select281 = add nsw i32 %.0218, %132
  br label %133

133:                                              ; preds = %124, %118
  %.9 = phi i32 [ %.5240, %118 ], [ %125, %124 ]
  %.6 = phi i32 [ %.0218, %118 ], [ %spec.select281, %124 ]
  switch i32 %51, label %155 [
    i32 328, label %135
    i32 324, label %135
    i32 319, label %135
    i32 331, label %.preheader284
  ]

.preheader284:                                    ; preds = %133
  %.not269314 = icmp sgt i32 %.9, %20
  br i1 %.not269314, label %.critedge47, label %.lr.ph316.preheader

.lr.ph316.preheader:                              ; preds = %.preheader284
  %134 = sext i32 %.9 to i64
  br label %.lr.ph316

135:                                              ; preds = %133, %133, %133
  %136 = sext i32 %.9 to i64
  %137 = getelementptr inbounds i8, ptr %2, i64 %136
  %138 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 48), align 8, !tbaa !19
  %139 = add nsw i32 %.6, %.9
  %140 = tail call i32 (i32, i32, ...) %138(i32 noundef %31, i32 noundef %139) #6
  %.1221318 = getelementptr inbounds i8, ptr %137, i64 1
  %141 = load i8, ptr %.1221318, align 1, !tbaa !13
  %.not271319 = icmp eq i8 %141, 0
  br i1 %.not271319, label %._crit_edge, label %.lr.ph322

.lr.ph322:                                        ; preds = %135, %.lr.ph322
  %142 = phi i8 [ %147, %.lr.ph322 ], [ %141, %135 ]
  %.1221321 = phi ptr [ %.1221, %.lr.ph322 ], [ %.1221318, %135 ]
  %.4230320 = phi ptr [ %146, %.lr.ph322 ], [ %137, %135 ]
  %143 = sext i8 %142 to i32
  %144 = tail call i32 @mlputc(i32 noundef %143)
  %145 = load i8, ptr %.1221321, align 1, !tbaa !13
  %146 = getelementptr inbounds i8, ptr %.4230320, i64 1
  store i8 %145, ptr %.4230320, align 1, !tbaa !13
  %.1221 = getelementptr inbounds i8, ptr %.1221321, i64 1
  %147 = load i8, ptr %.1221, align 1, !tbaa !13
  %.not271 = icmp eq i8 %147, 0
  br i1 %.not271, label %._crit_edge, label %.lr.ph322, !llvm.loop !23

._crit_edge:                                      ; preds = %.lr.ph322, %135
  %.4230.lcssa = phi ptr [ %137, %135 ], [ %146, %.lr.ph322 ]
  %148 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 56), align 8, !tbaa !18
  %149 = tail call i32 (...) %148() #6
  store i8 0, ptr %.4230.lcssa, align 1, !tbaa !13
  br label %.preheader285.backedge

.lr.ph316:                                        ; preds = %.lr.ph316.preheader, %152
  %indvars.iv352 = phi i64 [ %134, %.lr.ph316.preheader ], [ %indvars.iv.next353, %152 ]
  %150 = getelementptr inbounds i8, ptr %2, i64 %indvars.iv352
  %151 = load i8, ptr %150, align 1, !tbaa !13
  %.not270 = icmp eq i8 %151, 0
  br i1 %.not270, label %.critedge47, label %152

152:                                              ; preds = %.lr.ph316
  %indvars.iv.next353 = add nsw i64 %indvars.iv352, 1
  store i8 0, ptr %150, align 1, !tbaa !13
  %lftr.wideiv = trunc i64 %indvars.iv.next353 to i32
  %exitcond355.not = icmp eq i32 %26, %lftr.wideiv
  br i1 %exitcond355.not, label %.critedge47, label %.lr.ph316, !llvm.loop !24

.critedge47:                                      ; preds = %.lr.ph316, %152, %.preheader284
  %153 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 56), align 8, !tbaa !18
  %154 = tail call i32 (...) %153() #6
  br label %.preheader285.backedge

155:                                              ; preds = %133, %55
  %.0243 = phi i32 [ %56, %55 ], [ %51, %133 ]
  %.10 = phi i32 [ %.5240, %55 ], [ %.9, %133 ]
  %.7 = phi i32 [ %.0218, %55 ], [ %.6, %133 ]
  %.1 = phi i32 [ 1, %55 ], [ %.0215, %133 ]
  %156 = icmp ne i32 %.0216, 0
  %157 = icmp eq i32 %.10, 0
  %or.cond49 = and i1 %156, %157
  br i1 %or.cond49, label %.preheader283, label %163

.preheader283:                                    ; preds = %155
  br i1 %.not263324, label %.critedge51, label %.lr.ph326

.lr.ph326:                                        ; preds = %.preheader283, %160
  %indvars.iv356 = phi i64 [ %indvars.iv.next357, %160 ], [ 0, %.preheader283 ]
  %158 = getelementptr inbounds i8, ptr %2, i64 %indvars.iv356
  %159 = load i8, ptr %158, align 1, !tbaa !13
  %.not264 = icmp eq i8 %159, 0
  br i1 %.not264, label %.critedge51, label %160

160:                                              ; preds = %.lr.ph326
  %indvars.iv.next357 = add nuw nsw i64 %indvars.iv356, 1
  store i8 0, ptr %158, align 1, !tbaa !13
  %exitcond359.not = icmp eq i64 %indvars.iv.next357, %wide.trip.count
  br i1 %exitcond359.not, label %.critedge51, label %.lr.ph326, !llvm.loop !25

.critedge51:                                      ; preds = %.lr.ph326, %160, %.preheader283
  %161 = load ptr, ptr getelementptr inbounds (i8, ptr @term, i64 56), align 8, !tbaa !18
  %162 = tail call i32 (...) %161() #6
  br label %163

163:                                              ; preds = %.critedge51, %155
  %164 = and i32 %.0243, 256
  %.not265 = icmp eq i32 %164, 0
  br i1 %.not265, label %170, label %165

165:                                              ; preds = %163
  br i1 %21, label %166, label %.preheader285.backedge

166:                                              ; preds = %165
  %167 = and i32 %.0243, 255
  %168 = xor i32 %167, 64
  %169 = icmp eq i32 %167, 77
  %spec.store.select = select i1 %169, i32 10, i32 %168
  br label %170

170:                                              ; preds = %166, %163
  %.1244 = phi i32 [ %spec.store.select, %166 ], [ %.0243, %163 ]
  %171 = icmp ne i32 %.1, 0
  %or.cond53 = select i1 %23, i1 true, i1 %171
  br i1 %or.cond53, label %176, label %172

172:                                              ; preds = %170
  switch i32 %.1244, label %174 [
    i32 23, label %176
    i32 46, label %173
  ]

173:                                              ; preds = %172
  br label %176

174:                                              ; preds = %172
  %175 = icmp eq i32 %.1244, 33
  %spec.store.select54 = select i1 %175, i32 255, i32 %.1244
  br label %176

176:                                              ; preds = %172, %174, %173, %170
  %.2245 = phi i32 [ %.1244, %170 ], [ 31, %173 ], [ %spec.store.select54, %174 ], [ 13, %172 ]
  %177 = icmp slt i32 %.10, %20
  br i1 %177, label %178, label %.preheader285.backedge

178:                                              ; preds = %176
  %179 = tail call i32 @mlputc(i32 noundef %.2245)
  %180 = add nsw i32 %179, %.7
  %181 = sext i32 %.10 to i64
  %182 = getelementptr inbounds i8, ptr %2, i64 %181
  br label %183

183:                                              ; preds = %184, %178
  %.3234 = phi i32 [ %.10, %178 ], [ %185, %184 ]
  %.2222 = phi ptr [ %182, %178 ], [ %186, %184 ]
  %exitcond361.not = icmp eq i32 %.3234, %20
  br i1 %exitcond361.not, label %.critedge56, label %184

184:                                              ; preds = %183
  %185 = add i32 %.3234, 1
  %186 = getelementptr inbounds i8, ptr %.2222, i64 1
  %187 = load i8, ptr %.2222, align 1, !tbaa !13
  %.not266 = icmp eq i8 %187, 0
  br i1 %.not266, label %iter.check, label %183, !llvm.loop !26

.critedge56:                                      ; preds = %183
  %.not267328 = icmp eq ptr %.2222, %182
  br i1 %.not267328, label %._crit_edge331, label %iter.check

iter.check:                                       ; preds = %184, %.critedge56
  %.3223370 = phi ptr [ %.2222, %.critedge56 ], [ %186, %184 ]
  %.3223370389 = ptrtoint ptr %.3223370 to i64
  %188 = add i64 %6, %181
  %189 = sub i64 %.3223370389, %188
  %min.iters.check = icmp ult i64 %189, 4
  br i1 %min.iters.check, label %.lr.ph330.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check390 = icmp ult i64 %189, 16
  br i1 %min.iters.check390, label %vec.epilog.ph, label %vector.ph

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

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = sub i64 0, %index
  %next.gep = getelementptr i8, ptr %.3223370, i64 %offset.idx
  %190 = getelementptr inbounds i8, ptr %next.gep, i64 -16
  %wide.load = load <16 x i8>, ptr %190, align 1, !tbaa !13
  %191 = getelementptr i8, ptr %next.gep, i64 -15
  store <16 x i8> %wide.load, ptr %191, align 1, !tbaa !13
  %index.next = add nuw i64 %index, 16
  %192 = icmp eq i64 %index.next, %n.vec
  br i1 %192, label %middle.block, label %vector.body, !llvm.loop !27

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

vec.epilog.iter.check:                            ; preds = %middle.block
  %193 = sub i64 0, %n.vec
  %ind.end394 = getelementptr i8, ptr %.3223370, i64 %193
  %n.vec.remaining = and i64 %189, 12
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph330.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec393 = and i64 %189, -4
  %194 = sub i64 0, %n.vec393
  %ind.end = getelementptr i8, ptr %.3223370, i64 %194
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index395 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next401, %vec.epilog.vector.body ]
  %offset.idx396 = sub i64 0, %index395
  %next.gep397 = getelementptr i8, ptr %.3223370, i64 %offset.idx396
  %195 = getelementptr inbounds i8, ptr %next.gep397, i64 -4
  %wide.load398 = load <4 x i8>, ptr %195, align 1, !tbaa !13
  %196 = getelementptr i8, ptr %next.gep397, i64 -3
  store <4 x i8> %wide.load398, ptr %196, align 1, !tbaa !13
  %index.next401 = add nuw i64 %index395, 4
  %197 = icmp eq i64 %index.next401, %n.vec393
  br i1 %197, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !30

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n402 = icmp eq i64 %189, %n.vec393
  br i1 %cmp.n402, label %._crit_edge331, label %.lr.ph330.preheader

.lr.ph330.preheader:                              ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %.4224329.ph = phi ptr [ %.3223370, %iter.check ], [ %ind.end394, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  br label %.lr.ph330

.lr.ph330:                                        ; preds = %.lr.ph330.preheader, %.lr.ph330
  %.4224329 = phi ptr [ %198, %.lr.ph330 ], [ %.4224329.ph, %.lr.ph330.preheader ]
  %198 = getelementptr inbounds i8, ptr %.4224329, i64 -1
  %199 = load i8, ptr %198, align 1, !tbaa !13
  store i8 %199, ptr %.4224329, align 1, !tbaa !13
  %.not267 = icmp eq ptr %198, %182
  br i1 %.not267, label %._crit_edge331, label %.lr.ph330, !llvm.loop !31

._crit_edge331:                                   ; preds = %.lr.ph330, %middle.block, %vec.epilog.middle.block, %.critedge56
  %200 = trunc i32 %.2245 to i8
  store i8 %200, ptr %182, align 1, !tbaa !13
  %.5225333 = getelementptr inbounds i8, ptr %182, i64 1
  %201 = load i8, ptr %.5225333, align 1, !tbaa !13
  %.not268334 = icmp eq i8 %201, 0
  br i1 %.not268334, label %._crit_edge338, label %.lr.ph337

.lr.ph337:                                        ; preds = %._crit_edge331, %.lr.ph337
  %202 = phi i8 [ %205, %.lr.ph337 ], [ %201, %._crit_edge331 ]
  %.5225335 = phi ptr [ %.5225, %.lr.ph337 ], [ %.5225333, %._crit_edge331 ]
  %203 = sext i8 %202 to i32
  %204 = tail call i32 @mlputc(i32 noundef %203)
  %.5225 = getelementptr inbounds i8, ptr %.5225335, i64 1
  %205 = load i8, ptr %.5225, align 1, !tbaa !13
  %.not268 = icmp eq i8 %205, 0
  br i1 %.not268, label %._crit_edge338, label %.lr.ph337, !llvm.loop !32

._crit_edge338:                                   ; preds = %.lr.ph337, %._crit_edge331
  %206 = add nsw i32 %.10, 1
  br label %.preheader285.backedge

.loopexit:                                        ; preds = %.preheader288, %60, %60, %57, %79, %61, %70
  %.0 = phi i32 [ %71, %70 ], [ 2, %61 ], [ %., %79 ], [ %51, %60 ], [ %51, %60 ], [ 2, %57 ], [ 1, %.preheader288 ]
  ret i32 %.0
}

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

declare i32 @ctrlg(...) local_unnamed_addr #1

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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


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