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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.TCOD_key_t = type { i32, i8, [32 x i8], i8, i8, i8, i8, i8, i8, i8, i8 }
%struct.TCOD_Text = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, ptr, i8, i32, i32, %struct.TCOD_ColorRGB, %struct.TCOD_ColorRGB, float, i8, ptr }
%struct.TCOD_ColorRGB = type { i8, i8, i8 }

@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__.TCOD_text_update = external hidden unnamed_addr constant [48 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @TCOD_text_update(ptr noundef %0, ptr noundef byval(%struct.TCOD_key_t) align 8 %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %9 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %9, ptr %7, align 8, !tbaa !5
  %10 = load ptr, ptr %7, align 8, !tbaa !5
  %11 = icmp ne ptr %10, null
  br i1 %11, label %12, label %18

12:                                               ; preds = %2
  %13 = load ptr, ptr %7, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.TCOD_Text, ptr %13, i32 0, i32 15
  %15 = load ptr, ptr %14, align 8, !tbaa !9
  %16 = icmp ne ptr %15, null
  br i1 %16, label %17, label %18

17:                                               ; preds = %12
  br label %19

18:                                               ; preds = %12, %2
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 477, ptr noundef @__PRETTY_FUNCTION__.TCOD_text_update) #4
  unreachable

19:                                               ; preds = %17
  %20 = load ptr, ptr %7, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.TCOD_Text, ptr %20, i32 0, i32 8
  %22 = load i32, ptr %21, align 8, !tbaa !15
  store i32 %22, ptr %6, align 4, !tbaa !16
  %23 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 3
  %24 = load i8, ptr %23, align 1, !tbaa !17, !range !19, !noundef !20
  %25 = trunc i8 %24 to i1
  br i1 %25, label %26, label %451

26:                                               ; preds = %19
  %27 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 0
  %28 = load i32, ptr %27, align 8, !tbaa !21
  switch i32 %28, label %358 [
    i32 2, label %29
    i32 20, label %39
    i32 15, label %72
    i32 16, label %116
    i32 14, label %166
    i32 17, label %194
    i32 13, label %222
    i32 12, label %259
    i32 4, label %306
    i32 49, label %306
    i32 3, label %333
  ]

29:                                               ; preds = %26
  %30 = load ptr, ptr %7, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.TCOD_Text, ptr %30, i32 0, i32 9
  %32 = load i32, ptr %31, align 4, !tbaa !22
  %33 = icmp ne i32 %32, 2147483647
  br i1 %33, label %34, label %36

34:                                               ; preds = %29
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  call void @deleteSelection(ptr noundef %35)
  br label %38

36:                                               ; preds = %29
  %37 = load ptr, ptr %7, align 8, !tbaa !5
  call void @deleteChar(ptr noundef %37)
  br label %38

38:                                               ; preds = %36, %34
  br label %450

39:                                               ; preds = %26
  %40 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %41 = load i8, ptr %40, align 4, !tbaa !23, !range !19, !noundef !20
  %42 = trunc i8 %41 to i1
  br i1 %42, label %43, label %45

43:                                               ; preds = %39
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  call void @cut(ptr noundef %44)
  br label %71

45:                                               ; preds = %39
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.TCOD_Text, ptr %46, i32 0, i32 9
  %48 = load i32, ptr %47, align 4, !tbaa !22
  %49 = icmp ne i32 %48, 2147483647
  br i1 %49, label %50, label %52

50:                                               ; preds = %45
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  call void @deleteSelection(ptr noundef %51)
  br label %70

52:                                               ; preds = %45
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.TCOD_Text, ptr %53, i32 0, i32 23
  %55 = load ptr, ptr %54, align 8, !tbaa !24
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.TCOD_Text, ptr %56, i32 0, i32 8
  %58 = load i32, ptr %57, align 8, !tbaa !15
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i8, ptr %55, i64 %59
  %61 = load i8, ptr %60, align 1, !tbaa !25
  %62 = icmp ne i8 %61, 0
  br i1 %62, label %63, label %69

63:                                               ; preds = %52
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.TCOD_Text, ptr %64, i32 0, i32 8
  %66 = load i32, ptr %65, align 8, !tbaa !15
  %67 = add nsw i32 %66, 1
  store i32 %67, ptr %65, align 8, !tbaa !15
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  call void @deleteChar(ptr noundef %68)
  br label %69

69:                                               ; preds = %63, %52
  br label %70

70:                                               ; preds = %69, %50
  br label %71

71:                                               ; preds = %70, %43
  br label %450

72:                                               ; preds = %26
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.TCOD_Text, ptr %73, i32 0, i32 22
  %75 = load i8, ptr %74, align 8, !tbaa !26, !range !19, !noundef !20
  %76 = trunc i8 %75 to i1
  br i1 %76, label %77, label %92

77:                                               ; preds = %72
  %78 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %79 = load i8, ptr %78, align 4, !tbaa !23, !range !19, !noundef !20
  %80 = trunc i8 %79 to i1
  br i1 %80, label %81, label %92

81:                                               ; preds = %77
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.TCOD_Text, ptr %82, i32 0, i32 10
  %84 = load i32, ptr %83, align 8, !tbaa !27
  %85 = icmp eq i32 %84, -1
  br i1 %85, label %86, label %92

86:                                               ; preds = %81
  %87 = load ptr, ptr %7, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.TCOD_Text, ptr %87, i32 0, i32 8
  %89 = load i32, ptr %88, align 8, !tbaa !15
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.TCOD_Text, ptr %90, i32 0, i32 10
  store i32 %89, ptr %91, align 8, !tbaa !27
  br label %92

92:                                               ; preds = %86, %81, %77, %72
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.TCOD_Text, ptr %93, i32 0, i32 8
  %95 = load i32, ptr %94, align 8, !tbaa !15
  %96 = icmp sgt i32 %95, 0
  br i1 %96, label %97, label %115

97:                                               ; preds = %92
  %98 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 5
  %99 = load i8, ptr %98, align 1, !tbaa !28, !range !19, !noundef !20
  %100 = trunc i8 %99 to i1
  br i1 %100, label %105, label %101

101:                                              ; preds = %97
  %102 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 8
  %103 = load i8, ptr %102, align 2, !tbaa !29, !range !19, !noundef !20
  %104 = trunc i8 %103 to i1
  br i1 %104, label %105, label %107

105:                                              ; preds = %101, %97
  %106 = load ptr, ptr %7, align 8, !tbaa !5
  call void @previous_word(ptr noundef %106)
  br label %112

107:                                              ; preds = %101
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.TCOD_Text, ptr %108, i32 0, i32 8
  %110 = load i32, ptr %109, align 8, !tbaa !15
  %111 = add nsw i32 %110, -1
  store i32 %111, ptr %109, align 8, !tbaa !15
  br label %112

112:                                              ; preds = %107, %105
  %113 = load ptr, ptr %7, align 8, !tbaa !5
  %114 = load i32, ptr %6, align 4, !tbaa !16
  call void @selectStart(ptr noundef %113, i32 noundef %114, ptr noundef byval(%struct.TCOD_key_t) align 8 %1)
  br label %115

115:                                              ; preds = %112, %92
  br label %450

116:                                              ; preds = %26
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.TCOD_Text, ptr %117, i32 0, i32 22
  %119 = load i8, ptr %118, align 8, !tbaa !26, !range !19, !noundef !20
  %120 = trunc i8 %119 to i1
  br i1 %120, label %121, label %136

121:                                              ; preds = %116
  %122 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %123 = load i8, ptr %122, align 4, !tbaa !23, !range !19, !noundef !20
  %124 = trunc i8 %123 to i1
  br i1 %124, label %125, label %136

125:                                              ; preds = %121
  %126 = load ptr, ptr %7, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.TCOD_Text, ptr %126, i32 0, i32 9
  %128 = load i32, ptr %127, align 4, !tbaa !22
  %129 = icmp eq i32 %128, 2147483647
  br i1 %129, label %130, label %136

130:                                              ; preds = %125
  %131 = load ptr, ptr %7, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.TCOD_Text, ptr %131, i32 0, i32 8
  %133 = load i32, ptr %132, align 8, !tbaa !15
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.TCOD_Text, ptr %134, i32 0, i32 9
  store i32 %133, ptr %135, align 4, !tbaa !22
  br label %136

136:                                              ; preds = %130, %125, %121, %116
  %137 = load ptr, ptr %7, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.TCOD_Text, ptr %137, i32 0, i32 23
  %139 = load ptr, ptr %138, align 8, !tbaa !24
  %140 = load ptr, ptr %7, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.TCOD_Text, ptr %140, i32 0, i32 8
  %142 = load i32, ptr %141, align 8, !tbaa !15
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds i8, ptr %139, i64 %143
  %145 = load i8, ptr %144, align 1, !tbaa !25
  %146 = icmp ne i8 %145, 0
  br i1 %146, label %147, label %165

147:                                              ; preds = %136
  %148 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 5
  %149 = load i8, ptr %148, align 1, !tbaa !28, !range !19, !noundef !20
  %150 = trunc i8 %149 to i1
  br i1 %150, label %155, label %151

151:                                              ; preds = %147
  %152 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 8
  %153 = load i8, ptr %152, align 2, !tbaa !29, !range !19, !noundef !20
  %154 = trunc i8 %153 to i1
  br i1 %154, label %155, label %157

155:                                              ; preds = %151, %147
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  call void @next_word(ptr noundef %156)
  br label %162

157:                                              ; preds = %151
  %158 = load ptr, ptr %7, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.TCOD_Text, ptr %158, i32 0, i32 8
  %160 = load i32, ptr %159, align 8, !tbaa !15
  %161 = add nsw i32 %160, 1
  store i32 %161, ptr %159, align 8, !tbaa !15
  br label %162

162:                                              ; preds = %157, %155
  %163 = load ptr, ptr %7, align 8, !tbaa !5
  %164 = load i32, ptr %6, align 4, !tbaa !16
  call void @selectEnd(ptr noundef %163, i32 noundef %164, ptr noundef byval(%struct.TCOD_key_t) align 8 %1)
  br label %165

165:                                              ; preds = %162, %136
  br label %450

166:                                              ; preds = %26
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  call void @get_cursor_coords(ptr noundef %167, ptr noundef %4, ptr noundef %5)
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.TCOD_Text, ptr %168, i32 0, i32 22
  %170 = load i8, ptr %169, align 8, !tbaa !26, !range !19, !noundef !20
  %171 = trunc i8 %170 to i1
  br i1 %171, label %172, label %187

172:                                              ; preds = %166
  %173 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %174 = load i8, ptr %173, align 4, !tbaa !23, !range !19, !noundef !20
  %175 = trunc i8 %174 to i1
  br i1 %175, label %176, label %187

176:                                              ; preds = %172
  %177 = load ptr, ptr %7, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.TCOD_Text, ptr %177, i32 0, i32 10
  %179 = load i32, ptr %178, align 8, !tbaa !27
  %180 = icmp eq i32 %179, -1
  br i1 %180, label %181, label %187

181:                                              ; preds = %176
  %182 = load ptr, ptr %7, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.TCOD_Text, ptr %182, i32 0, i32 8
  %184 = load i32, ptr %183, align 8, !tbaa !15
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.TCOD_Text, ptr %185, i32 0, i32 10
  store i32 %184, ptr %186, align 8, !tbaa !27
  br label %187

187:                                              ; preds = %181, %176, %172, %166
  %188 = load ptr, ptr %7, align 8, !tbaa !5
  %189 = load i32, ptr %4, align 4, !tbaa !16
  %190 = load i32, ptr %5, align 4, !tbaa !16
  %191 = sub nsw i32 %190, 1
  call void @set_cursor_pos(ptr noundef %188, i32 noundef %189, i32 noundef %191, i1 noundef zeroext false)
  %192 = load ptr, ptr %7, align 8, !tbaa !5
  %193 = load i32, ptr %6, align 4, !tbaa !16
  call void @selectStart(ptr noundef %192, i32 noundef %193, ptr noundef byval(%struct.TCOD_key_t) align 8 %1)
  br label %450

194:                                              ; preds = %26
  %195 = load ptr, ptr %7, align 8, !tbaa !5
  call void @get_cursor_coords(ptr noundef %195, ptr noundef %4, ptr noundef %5)
  %196 = load ptr, ptr %7, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.TCOD_Text, ptr %196, i32 0, i32 22
  %198 = load i8, ptr %197, align 8, !tbaa !26, !range !19, !noundef !20
  %199 = trunc i8 %198 to i1
  br i1 %199, label %200, label %215

200:                                              ; preds = %194
  %201 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %202 = load i8, ptr %201, align 4, !tbaa !23, !range !19, !noundef !20
  %203 = trunc i8 %202 to i1
  br i1 %203, label %204, label %215

204:                                              ; preds = %200
  %205 = load ptr, ptr %7, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.TCOD_Text, ptr %205, i32 0, i32 9
  %207 = load i32, ptr %206, align 4, !tbaa !22
  %208 = icmp eq i32 %207, 2147483647
  br i1 %208, label %209, label %215

209:                                              ; preds = %204
  %210 = load ptr, ptr %7, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.TCOD_Text, ptr %210, i32 0, i32 8
  %212 = load i32, ptr %211, align 8, !tbaa !15
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.TCOD_Text, ptr %213, i32 0, i32 9
  store i32 %212, ptr %214, align 4, !tbaa !22
  br label %215

215:                                              ; preds = %209, %204, %200, %194
  %216 = load ptr, ptr %7, align 8, !tbaa !5
  %217 = load i32, ptr %4, align 4, !tbaa !16
  %218 = load i32, ptr %5, align 4, !tbaa !16
  %219 = add nsw i32 %218, 1
  call void @set_cursor_pos(ptr noundef %216, i32 noundef %217, i32 noundef %219, i1 noundef zeroext false)
  %220 = load ptr, ptr %7, align 8, !tbaa !5
  %221 = load i32, ptr %6, align 4, !tbaa !16
  call void @selectEnd(ptr noundef %220, i32 noundef %221, ptr noundef byval(%struct.TCOD_key_t) align 8 %1)
  br label %450

222:                                              ; preds = %26
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  call void @get_cursor_coords(ptr noundef %223, ptr noundef %4, ptr noundef %5)
  %224 = load ptr, ptr %7, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.TCOD_Text, ptr %224, i32 0, i32 22
  %226 = load i8, ptr %225, align 8, !tbaa !26, !range !19, !noundef !20
  %227 = trunc i8 %226 to i1
  br i1 %227, label %228, label %243

228:                                              ; preds = %222
  %229 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %230 = load i8, ptr %229, align 4, !tbaa !23, !range !19, !noundef !20
  %231 = trunc i8 %230 to i1
  br i1 %231, label %232, label %243

232:                                              ; preds = %228
  %233 = load ptr, ptr %7, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.TCOD_Text, ptr %233, i32 0, i32 10
  %235 = load i32, ptr %234, align 8, !tbaa !27
  %236 = icmp eq i32 %235, -1
  br i1 %236, label %237, label %243

237:                                              ; preds = %232
  %238 = load ptr, ptr %7, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.TCOD_Text, ptr %238, i32 0, i32 8
  %240 = load i32, ptr %239, align 8, !tbaa !15
  %241 = load ptr, ptr %7, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.TCOD_Text, ptr %241, i32 0, i32 10
  store i32 %240, ptr %242, align 8, !tbaa !27
  br label %243

243:                                              ; preds = %237, %232, %228, %222
  %244 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 5
  %245 = load i8, ptr %244, align 1, !tbaa !28, !range !19, !noundef !20
  %246 = trunc i8 %245 to i1
  br i1 %246, label %251, label %247

247:                                              ; preds = %243
  %248 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 8
  %249 = load i8, ptr %248, align 2, !tbaa !29, !range !19, !noundef !20
  %250 = trunc i8 %249 to i1
  br i1 %250, label %251, label %253

251:                                              ; preds = %247, %243
  %252 = load ptr, ptr %7, align 8, !tbaa !5
  call void @set_cursor_pos(ptr noundef %252, i32 noundef 0, i32 noundef 0, i1 noundef zeroext true)
  br label %256

253:                                              ; preds = %247
  %254 = load ptr, ptr %7, align 8, !tbaa !5
  %255 = load i32, ptr %5, align 4, !tbaa !16
  call void @set_cursor_pos(ptr noundef %254, i32 noundef 0, i32 noundef %255, i1 noundef zeroext true)
  br label %256

256:                                              ; preds = %253, %251
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = load i32, ptr %6, align 4, !tbaa !16
  call void @selectStart(ptr noundef %257, i32 noundef %258, ptr noundef byval(%struct.TCOD_key_t) align 8 %1)
  br label %450

259:                                              ; preds = %26
  %260 = load ptr, ptr %7, align 8, !tbaa !5
  call void @get_cursor_coords(ptr noundef %260, ptr noundef %4, ptr noundef %5)
  %261 = load ptr, ptr %7, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.TCOD_Text, ptr %261, i32 0, i32 22
  %263 = load i8, ptr %262, align 8, !tbaa !26, !range !19, !noundef !20
  %264 = trunc i8 %263 to i1
  br i1 %264, label %265, label %280

265:                                              ; preds = %259
  %266 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %267 = load i8, ptr %266, align 4, !tbaa !23, !range !19, !noundef !20
  %268 = trunc i8 %267 to i1
  br i1 %268, label %269, label %280

269:                                              ; preds = %265
  %270 = load ptr, ptr %7, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.TCOD_Text, ptr %270, i32 0, i32 9
  %272 = load i32, ptr %271, align 4, !tbaa !22
  %273 = icmp eq i32 %272, 2147483647
  br i1 %273, label %274, label %280

274:                                              ; preds = %269
  %275 = load ptr, ptr %7, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.TCOD_Text, ptr %275, i32 0, i32 8
  %277 = load i32, ptr %276, align 8, !tbaa !15
  %278 = load ptr, ptr %7, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.TCOD_Text, ptr %278, i32 0, i32 9
  store i32 %277, ptr %279, align 4, !tbaa !22
  br label %280

280:                                              ; preds = %274, %269, %265, %259
  %281 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 5
  %282 = load i8, ptr %281, align 1, !tbaa !28, !range !19, !noundef !20
  %283 = trunc i8 %282 to i1
  br i1 %283, label %288, label %284

284:                                              ; preds = %280
  %285 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 8
  %286 = load i8, ptr %285, align 2, !tbaa !29, !range !19, !noundef !20
  %287 = trunc i8 %286 to i1
  br i1 %287, label %288, label %296

288:                                              ; preds = %284, %280
  %289 = load ptr, ptr %7, align 8, !tbaa !5
  %290 = load ptr, ptr %7, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.TCOD_Text, ptr %290, i32 0, i32 2
  %292 = load i32, ptr %291, align 8, !tbaa !30
  %293 = load ptr, ptr %7, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.TCOD_Text, ptr %293, i32 0, i32 3
  %295 = load i32, ptr %294, align 4, !tbaa !31
  call void @set_cursor_pos(ptr noundef %289, i32 noundef %292, i32 noundef %295, i1 noundef zeroext true)
  br label %303

296:                                              ; preds = %284
  %297 = load ptr, ptr %7, align 8, !tbaa !5
  %298 = load ptr, ptr %7, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.TCOD_Text, ptr %298, i32 0, i32 2
  %300 = load i32, ptr %299, align 8, !tbaa !30
  %301 = sub nsw i32 %300, 1
  %302 = load i32, ptr %5, align 4, !tbaa !16
  call void @set_cursor_pos(ptr noundef %297, i32 noundef %301, i32 noundef %302, i1 noundef zeroext true)
  br label %303

303:                                              ; preds = %296, %288
  %304 = load ptr, ptr %7, align 8, !tbaa !5
  %305 = load i32, ptr %6, align 4, !tbaa !16
  call void @selectEnd(ptr noundef %304, i32 noundef %305, ptr noundef byval(%struct.TCOD_key_t) align 8 %1)
  br label %450

306:                                              ; preds = %26, %26
  %307 = load ptr, ptr %7, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.TCOD_Text, ptr %307, i32 0, i32 9
  %309 = load i32, ptr %308, align 4, !tbaa !22
  %310 = icmp ne i32 %309, 2147483647
  br i1 %310, label %311, label %313

311:                                              ; preds = %306
  %312 = load ptr, ptr %7, align 8, !tbaa !5
  call void @deleteSelection(ptr noundef %312)
  br label %313

313:                                              ; preds = %311, %306
  %314 = load ptr, ptr %7, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.TCOD_Text, ptr %314, i32 0, i32 22
  %316 = load i8, ptr %315, align 8, !tbaa !26, !range !19, !noundef !20
  %317 = trunc i8 %316 to i1
  br i1 %317, label %318, label %329

318:                                              ; preds = %313
  %319 = load ptr, ptr %7, align 8, !tbaa !5
  call void @get_cursor_coords(ptr noundef %319, ptr noundef %4, ptr noundef %5)
  %320 = load i32, ptr %5, align 4, !tbaa !16
  %321 = load ptr, ptr %7, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.TCOD_Text, ptr %321, i32 0, i32 3
  %323 = load i32, ptr %322, align 4, !tbaa !31
  %324 = sub nsw i32 %323, 1
  %325 = icmp slt i32 %320, %324
  br i1 %325, label %326, label %328

326:                                              ; preds = %318
  %327 = load ptr, ptr %7, align 8, !tbaa !5
  call void @insertChar(ptr noundef %327, i8 noundef signext 10)
  br label %328

328:                                              ; preds = %326, %318
  br label %332

329:                                              ; preds = %313
  %330 = load ptr, ptr %7, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.TCOD_Text, ptr %330, i32 0, i32 16
  store i8 0, ptr %331, align 8, !tbaa !32
  br label %332

332:                                              ; preds = %329, %328
  br label %450

333:                                              ; preds = %26
  %334 = load ptr, ptr %7, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.TCOD_Text, ptr %334, i32 0, i32 11
  %336 = load i32, ptr %335, align 4, !tbaa !33
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %338, label %357

338:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  %339 = load ptr, ptr %7, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.TCOD_Text, ptr %339, i32 0, i32 11
  %341 = load i32, ptr %340, align 4, !tbaa !33
  store i32 %341, ptr %8, align 4, !tbaa !16
  %342 = load ptr, ptr %7, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.TCOD_Text, ptr %342, i32 0, i32 9
  %344 = load i32, ptr %343, align 4, !tbaa !22
  %345 = icmp ne i32 %344, 2147483647
  br i1 %345, label %346, label %348

346:                                              ; preds = %338
  %347 = load ptr, ptr %7, align 8, !tbaa !5
  call void @deleteSelection(ptr noundef %347)
  br label %348

348:                                              ; preds = %346, %338
  br label %349

349:                                              ; preds = %352, %348
  %350 = load i32, ptr %8, align 4, !tbaa !16
  %351 = icmp sgt i32 %350, 0
  br i1 %351, label %352, label %356

352:                                              ; preds = %349
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  call void @insertChar(ptr noundef %353, i8 noundef signext 32)
  %354 = load i32, ptr %8, align 4, !tbaa !16
  %355 = add nsw i32 %354, -1
  store i32 %355, ptr %8, align 4, !tbaa !16
  br label %349, !llvm.loop !34

356:                                              ; preds = %349
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  br label %357

357:                                              ; preds = %356, %333
  br label %450

358:                                              ; preds = %26
  %359 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %360 = load i8, ptr %359, align 4, !tbaa !36
  %361 = sext i8 %360 to i32
  %362 = icmp eq i32 %361, 99
  br i1 %362, label %372, label %363

363:                                              ; preds = %358
  %364 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %365 = load i8, ptr %364, align 4, !tbaa !36
  %366 = sext i8 %365 to i32
  %367 = icmp eq i32 %366, 67
  br i1 %367, label %372, label %368

368:                                              ; preds = %363
  %369 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 0
  %370 = load i32, ptr %369, align 8, !tbaa !21
  %371 = icmp eq i32 %370, 19
  br i1 %371, label %372, label %382

372:                                              ; preds = %368, %363, %358
  %373 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 5
  %374 = load i8, ptr %373, align 1, !tbaa !28, !range !19, !noundef !20
  %375 = trunc i8 %374 to i1
  br i1 %375, label %380, label %376

376:                                              ; preds = %372
  %377 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 8
  %378 = load i8, ptr %377, align 2, !tbaa !29, !range !19, !noundef !20
  %379 = trunc i8 %378 to i1
  br i1 %379, label %380, label %382

380:                                              ; preds = %376, %372
  %381 = load ptr, ptr %7, align 8, !tbaa !5
  call void @copy(ptr noundef %381)
  br label %449

382:                                              ; preds = %376, %368
  %383 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %384 = load i8, ptr %383, align 4, !tbaa !36
  %385 = sext i8 %384 to i32
  %386 = icmp eq i32 %385, 120
  br i1 %386, label %392, label %387

387:                                              ; preds = %382
  %388 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %389 = load i8, ptr %388, align 4, !tbaa !36
  %390 = sext i8 %389 to i32
  %391 = icmp eq i32 %390, 88
  br i1 %391, label %392, label %402

392:                                              ; preds = %387, %382
  %393 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 5
  %394 = load i8, ptr %393, align 1, !tbaa !28, !range !19, !noundef !20
  %395 = trunc i8 %394 to i1
  br i1 %395, label %400, label %396

396:                                              ; preds = %392
  %397 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 8
  %398 = load i8, ptr %397, align 2, !tbaa !29, !range !19, !noundef !20
  %399 = trunc i8 %398 to i1
  br i1 %399, label %400, label %402

400:                                              ; preds = %396, %392
  %401 = load ptr, ptr %7, align 8, !tbaa !5
  call void @cut(ptr noundef %401)
  br label %448

402:                                              ; preds = %396, %387
  %403 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %404 = load i8, ptr %403, align 4, !tbaa !36
  %405 = sext i8 %404 to i32
  %406 = icmp eq i32 %405, 118
  br i1 %406, label %412, label %407

407:                                              ; preds = %402
  %408 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %409 = load i8, ptr %408, align 4, !tbaa !36
  %410 = sext i8 %409 to i32
  %411 = icmp eq i32 %410, 86
  br i1 %411, label %412, label %420

412:                                              ; preds = %407, %402
  %413 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 5
  %414 = load i8, ptr %413, align 1, !tbaa !28, !range !19, !noundef !20
  %415 = trunc i8 %414 to i1
  br i1 %415, label %428, label %416

416:                                              ; preds = %412
  %417 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 8
  %418 = load i8, ptr %417, align 2, !tbaa !29, !range !19, !noundef !20
  %419 = trunc i8 %418 to i1
  br i1 %419, label %428, label %420

420:                                              ; preds = %416, %407
  %421 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 0
  %422 = load i32, ptr %421, align 8, !tbaa !21
  %423 = icmp eq i32 %422, 19
  br i1 %423, label %424, label %430

424:                                              ; preds = %420
  %425 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 10
  %426 = load i8, ptr %425, align 4, !tbaa !23, !range !19, !noundef !20
  %427 = trunc i8 %426 to i1
  br i1 %427, label %428, label %430

428:                                              ; preds = %424, %416, %412
  %429 = load ptr, ptr %7, align 8, !tbaa !5
  call void @paste(ptr noundef %429)
  br label %447

430:                                              ; preds = %424, %420
  %431 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %432 = load i8, ptr %431, align 4, !tbaa !36
  %433 = sext i8 %432 to i32
  %434 = icmp sgt i32 %433, 31
  br i1 %434, label %435, label %446

435:                                              ; preds = %430
  %436 = load ptr, ptr %7, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.TCOD_Text, ptr %436, i32 0, i32 9
  %438 = load i32, ptr %437, align 4, !tbaa !22
  %439 = icmp ne i32 %438, 2147483647
  br i1 %439, label %440, label %442

440:                                              ; preds = %435
  %441 = load ptr, ptr %7, align 8, !tbaa !5
  call void @deleteSelection(ptr noundef %441)
  br label %442

442:                                              ; preds = %440, %435
  %443 = load ptr, ptr %7, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.TCOD_key_t, ptr %1, i32 0, i32 1
  %445 = load i8, ptr %444, align 4, !tbaa !36
  call void @insertChar(ptr noundef %443, i8 noundef signext %445)
  br label %446

446:                                              ; preds = %442, %430
  br label %447

447:                                              ; preds = %446, %428
  br label %448

448:                                              ; preds = %447, %400
  br label %449

449:                                              ; preds = %448, %380
  br label %450

450:                                              ; preds = %449, %357, %332, %303, %256, %215, %187, %165, %115, %71, %38
  br label %451

451:                                              ; preds = %450, %19
  %452 = load ptr, ptr %7, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.TCOD_Text, ptr %452, i32 0, i32 16
  %454 = load i8, ptr %453, align 8, !tbaa !32, !range !19, !noundef !20
  %455 = trunc i8 %454 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #3
  ret i1 %455
}

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden void @selectStart(ptr noundef, i32 noundef, ptr noundef byval(%struct.TCOD_key_t) align 8) #2

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

; Function Attrs: nounwind uwtable
declare hidden void @selectEnd(ptr noundef, i32 noundef, ptr noundef byval(%struct.TCOD_key_t) align 8) #2

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

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

; Function Attrs: nounwind uwtable
declare hidden void @insertChar(ptr noundef, i8 noundef signext) #2

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

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

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

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

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


; 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.TCOD_key_t = type { i32, i8, [32 x i8], i8, i8, i8, i8, i8, i8, i8, i8 }

@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [18 x i8], align 1
@__PRETTY_FUNCTION__.TCOD_text_update = external hidden unnamed_addr constant [48 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @TCOD_text_update(ptr noundef %0, ptr noundef byval(%struct.TCOD_key_t) align 8 %1) local_unnamed_addr #2 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #3
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %8, label %5

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 64
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %.not107 = icmp eq ptr %7, null
  br i1 %.not107, label %8, label %9

8:                                                ; preds = %5, %2
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 477, ptr noundef nonnull @__PRETTY_FUNCTION__.TCOD_text_update) #4
  unreachable

9:                                                ; preds = %5
  %10 = getelementptr inbounds i8, ptr %0, i64 32
  %11 = load i32, ptr %10, align 8, !tbaa !14
  %12 = getelementptr inbounds i8, ptr %1, i64 37
  %13 = load i8, ptr %12, align 1, !tbaa !15, !range !17, !noundef !18
  %14 = trunc nuw i8 %13 to i1
  br i1 %14, label %15, label %.loopexit

15:                                               ; preds = %9
  %16 = load i32, ptr %1, align 8
  switch i32 %16, label %217 [
    i32 2, label %17
    i32 20, label %22
    i32 15, label %39
    i32 16, label %66
    i32 14, label %97
    i32 17, label %115
    i32 13, label %133
    i32 12, label %156
    i32 4, label %189
    i32 49, label %189
    i32 3, label %206
  ]

17:                                               ; preds = %15
  %18 = getelementptr inbounds i8, ptr %0, i64 36
  %19 = load i32, ptr %18, align 4, !tbaa !19
  %.not114 = icmp eq i32 %19, 2147483647
  br i1 %.not114, label %21, label %20

20:                                               ; preds = %17
  tail call void @deleteSelection(ptr noundef nonnull %0)
  br label %.loopexit

21:                                               ; preds = %17
  tail call void @deleteChar(ptr noundef nonnull %0)
  br label %.loopexit

22:                                               ; preds = %15
  %23 = getelementptr inbounds i8, ptr %1, i64 44
  %24 = load i8, ptr %23, align 4, !tbaa !20, !range !17, !noundef !18
  %25 = trunc nuw i8 %24 to i1
  br i1 %25, label %26, label %27

26:                                               ; preds = %22
  tail call void @cut(ptr noundef nonnull %0)
  br label %.loopexit

27:                                               ; preds = %22
  %28 = getelementptr inbounds i8, ptr %0, i64 36
  %29 = load i32, ptr %28, align 4, !tbaa !19
  %.not112 = icmp eq i32 %29, 2147483647
  br i1 %.not112, label %31, label %30

30:                                               ; preds = %27
  tail call void @deleteSelection(ptr noundef nonnull %0)
  br label %.loopexit

31:                                               ; preds = %27
  %32 = getelementptr inbounds i8, ptr %0, i64 104
  %33 = load ptr, ptr %32, align 8, !tbaa !21
  %34 = sext i32 %11 to i64
  %35 = getelementptr inbounds i8, ptr %33, i64 %34
  %36 = load i8, ptr %35, align 1, !tbaa !22
  %.not113 = icmp eq i8 %36, 0
  br i1 %.not113, label %.loopexit, label %37

37:                                               ; preds = %31
  %38 = add nsw i32 %11, 1
  store i32 %38, ptr %10, align 8, !tbaa !14
  tail call void @deleteChar(ptr noundef nonnull %0)
  br label %.loopexit

39:                                               ; preds = %15
  %40 = getelementptr inbounds i8, ptr %0, i64 96
  %41 = load i8, ptr %40, align 8, !tbaa !23, !range !17, !noundef !18
  %42 = trunc nuw i8 %41 to i1
  br i1 %42, label %43, label %52

43:                                               ; preds = %39
  %44 = getelementptr inbounds i8, ptr %1, i64 44
  %45 = load i8, ptr %44, align 4, !tbaa !20, !range !17, !noundef !18
  %46 = trunc nuw i8 %45 to i1
  br i1 %46, label %47, label %52

47:                                               ; preds = %43
  %48 = getelementptr inbounds i8, ptr %0, i64 40
  %49 = load i32, ptr %48, align 8, !tbaa !24
  %50 = icmp eq i32 %49, -1
  br i1 %50, label %51, label %52

51:                                               ; preds = %47
  store i32 %11, ptr %48, align 8, !tbaa !24
  br label %52

52:                                               ; preds = %51, %47, %43, %39
  %53 = icmp sgt i32 %11, 0
  br i1 %53, label %54, label %.loopexit

54:                                               ; preds = %52
  %55 = getelementptr inbounds i8, ptr %1, i64 39
  %56 = load i8, ptr %55, align 1, !tbaa !25, !range !17, !noundef !18
  %57 = trunc nuw i8 %56 to i1
  br i1 %57, label %62, label %58

58:                                               ; preds = %54
  %59 = getelementptr inbounds i8, ptr %1, i64 42
  %60 = load i8, ptr %59, align 2, !tbaa !26, !range !17, !noundef !18
  %61 = trunc nuw i8 %60 to i1
  br i1 %61, label %62, label %63

62:                                               ; preds = %58, %54
  tail call void @previous_word(ptr noundef nonnull %0)
  br label %65

63:                                               ; preds = %58
  %64 = add nsw i32 %11, -1
  store i32 %64, ptr %10, align 8, !tbaa !14
  br label %65

65:                                               ; preds = %63, %62
  tail call void @selectStart(ptr noundef nonnull %0, i32 noundef %11, ptr noundef nonnull byval(%struct.TCOD_key_t) align 8 %1)
  br label %.loopexit

66:                                               ; preds = %15
  %67 = getelementptr inbounds i8, ptr %0, i64 96
  %68 = load i8, ptr %67, align 8, !tbaa !23, !range !17, !noundef !18
  %69 = trunc nuw i8 %68 to i1
  br i1 %69, label %70, label %79

70:                                               ; preds = %66
  %71 = getelementptr inbounds i8, ptr %1, i64 44
  %72 = load i8, ptr %71, align 4, !tbaa !20, !range !17, !noundef !18
  %73 = trunc nuw i8 %72 to i1
  br i1 %73, label %74, label %79

74:                                               ; preds = %70
  %75 = getelementptr inbounds i8, ptr %0, i64 36
  %76 = load i32, ptr %75, align 4, !tbaa !19
  %77 = icmp eq i32 %76, 2147483647
  br i1 %77, label %78, label %79

78:                                               ; preds = %74
  store i32 %11, ptr %75, align 4, !tbaa !19
  br label %79

79:                                               ; preds = %78, %74, %70, %66
  %80 = getelementptr inbounds i8, ptr %0, i64 104
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  %82 = sext i32 %11 to i64
  %83 = getelementptr inbounds i8, ptr %81, i64 %82
  %84 = load i8, ptr %83, align 1, !tbaa !22
  %.not111 = icmp eq i8 %84, 0
  br i1 %.not111, label %.loopexit, label %85

85:                                               ; preds = %79
  %86 = getelementptr inbounds i8, ptr %1, i64 39
  %87 = load i8, ptr %86, align 1, !tbaa !25, !range !17, !noundef !18
  %88 = trunc nuw i8 %87 to i1
  br i1 %88, label %93, label %89

89:                                               ; preds = %85
  %90 = getelementptr inbounds i8, ptr %1, i64 42
  %91 = load i8, ptr %90, align 2, !tbaa !26, !range !17, !noundef !18
  %92 = trunc nuw i8 %91 to i1
  br i1 %92, label %93, label %94

93:                                               ; preds = %89, %85
  tail call void @next_word(ptr noundef nonnull %0)
  br label %96

94:                                               ; preds = %89
  %95 = add nsw i32 %11, 1
  store i32 %95, ptr %10, align 8, !tbaa !14
  br label %96

96:                                               ; preds = %94, %93
  tail call void @selectEnd(ptr noundef nonnull %0, i32 noundef %11, ptr noundef nonnull byval(%struct.TCOD_key_t) align 8 %1)
  br label %.loopexit

97:                                               ; preds = %15
  call void @get_cursor_coords(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %98 = getelementptr inbounds i8, ptr %0, i64 96
  %99 = load i8, ptr %98, align 8, !tbaa !23, !range !17, !noundef !18
  %100 = trunc nuw i8 %99 to i1
  br i1 %100, label %101, label %111

101:                                              ; preds = %97
  %102 = getelementptr inbounds i8, ptr %1, i64 44
  %103 = load i8, ptr %102, align 4, !tbaa !20, !range !17, !noundef !18
  %104 = trunc nuw i8 %103 to i1
  br i1 %104, label %105, label %111

105:                                              ; preds = %101
  %106 = getelementptr inbounds i8, ptr %0, i64 40
  %107 = load i32, ptr %106, align 8, !tbaa !24
  %108 = icmp eq i32 %107, -1
  br i1 %108, label %109, label %111

109:                                              ; preds = %105
  %110 = load i32, ptr %10, align 8, !tbaa !14
  store i32 %110, ptr %106, align 8, !tbaa !24
  br label %111

111:                                              ; preds = %109, %105, %101, %97
  %112 = load i32, ptr %3, align 4, !tbaa !27
  %113 = load i32, ptr %4, align 4, !tbaa !27
  %114 = add nsw i32 %113, -1
  call void @set_cursor_pos(ptr noundef nonnull %0, i32 noundef %112, i32 noundef %114, i1 noundef zeroext false)
  call void @selectStart(ptr noundef nonnull %0, i32 noundef %11, ptr noundef nonnull byval(%struct.TCOD_key_t) align 8 %1)
  br label %.loopexit

115:                                              ; preds = %15
  call void @get_cursor_coords(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %116 = getelementptr inbounds i8, ptr %0, i64 96
  %117 = load i8, ptr %116, align 8, !tbaa !23, !range !17, !noundef !18
  %118 = trunc nuw i8 %117 to i1
  br i1 %118, label %119, label %129

119:                                              ; preds = %115
  %120 = getelementptr inbounds i8, ptr %1, i64 44
  %121 = load i8, ptr %120, align 4, !tbaa !20, !range !17, !noundef !18
  %122 = trunc nuw i8 %121 to i1
  br i1 %122, label %123, label %129

123:                                              ; preds = %119
  %124 = getelementptr inbounds i8, ptr %0, i64 36
  %125 = load i32, ptr %124, align 4, !tbaa !19
  %126 = icmp eq i32 %125, 2147483647
  br i1 %126, label %127, label %129

127:                                              ; preds = %123
  %128 = load i32, ptr %10, align 8, !tbaa !14
  store i32 %128, ptr %124, align 4, !tbaa !19
  br label %129

129:                                              ; preds = %127, %123, %119, %115
  %130 = load i32, ptr %3, align 4, !tbaa !27
  %131 = load i32, ptr %4, align 4, !tbaa !27
  %132 = add nsw i32 %131, 1
  call void @set_cursor_pos(ptr noundef nonnull %0, i32 noundef %130, i32 noundef %132, i1 noundef zeroext false)
  call void @selectEnd(ptr noundef nonnull %0, i32 noundef %11, ptr noundef nonnull byval(%struct.TCOD_key_t) align 8 %1)
  br label %.loopexit

133:                                              ; preds = %15
  call void @get_cursor_coords(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %134 = getelementptr inbounds i8, ptr %0, i64 96
  %135 = load i8, ptr %134, align 8, !tbaa !23, !range !17, !noundef !18
  %136 = trunc nuw i8 %135 to i1
  br i1 %136, label %137, label %147

137:                                              ; preds = %133
  %138 = getelementptr inbounds i8, ptr %1, i64 44
  %139 = load i8, ptr %138, align 4, !tbaa !20, !range !17, !noundef !18
  %140 = trunc nuw i8 %139 to i1
  br i1 %140, label %141, label %147

141:                                              ; preds = %137
  %142 = getelementptr inbounds i8, ptr %0, i64 40
  %143 = load i32, ptr %142, align 8, !tbaa !24
  %144 = icmp eq i32 %143, -1
  br i1 %144, label %145, label %147

145:                                              ; preds = %141
  %146 = load i32, ptr %10, align 8, !tbaa !14
  store i32 %146, ptr %142, align 8, !tbaa !24
  br label %147

147:                                              ; preds = %145, %141, %137, %133
  %148 = getelementptr inbounds i8, ptr %1, i64 39
  %149 = load i8, ptr %148, align 1, !tbaa !25, !range !17, !noundef !18
  %150 = trunc nuw i8 %149 to i1
  %151 = getelementptr inbounds i8, ptr %1, i64 42
  %152 = load i8, ptr %151, align 2, !range !17
  %153 = trunc nuw i8 %152 to i1
  %154 = load i32, ptr %4, align 4
  %155 = select i1 %150, i1 true, i1 %153
  %.sink = select i1 %155, i32 0, i32 %154
  call void @set_cursor_pos(ptr noundef nonnull %0, i32 noundef 0, i32 noundef %.sink, i1 noundef zeroext true)
  call void @selectStart(ptr noundef nonnull %0, i32 noundef %11, ptr noundef nonnull byval(%struct.TCOD_key_t) align 8 %1)
  br label %.loopexit

156:                                              ; preds = %15
  call void @get_cursor_coords(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %157 = getelementptr inbounds i8, ptr %0, i64 96
  %158 = load i8, ptr %157, align 8, !tbaa !23, !range !17, !noundef !18
  %159 = trunc nuw i8 %158 to i1
  br i1 %159, label %160, label %170

160:                                              ; preds = %156
  %161 = getelementptr inbounds i8, ptr %1, i64 44
  %162 = load i8, ptr %161, align 4, !tbaa !20, !range !17, !noundef !18
  %163 = trunc nuw i8 %162 to i1
  br i1 %163, label %164, label %170

164:                                              ; preds = %160
  %165 = getelementptr inbounds i8, ptr %0, i64 36
  %166 = load i32, ptr %165, align 4, !tbaa !19
  %167 = icmp eq i32 %166, 2147483647
  br i1 %167, label %168, label %170

168:                                              ; preds = %164
  %169 = load i32, ptr %10, align 8, !tbaa !14
  store i32 %169, ptr %165, align 4, !tbaa !19
  br label %170

170:                                              ; preds = %168, %164, %160, %156
  %171 = getelementptr inbounds i8, ptr %1, i64 39
  %172 = load i8, ptr %171, align 1, !tbaa !25, !range !17, !noundef !18
  %173 = trunc nuw i8 %172 to i1
  br i1 %173, label %178, label %174

174:                                              ; preds = %170
  %175 = getelementptr inbounds i8, ptr %1, i64 42
  %176 = load i8, ptr %175, align 2, !tbaa !26, !range !17, !noundef !18
  %177 = trunc nuw i8 %176 to i1
  br i1 %177, label %178, label %183

178:                                              ; preds = %174, %170
  %179 = getelementptr inbounds i8, ptr %0, i64 8
  %180 = load i32, ptr %179, align 8, !tbaa !28
  %181 = getelementptr inbounds i8, ptr %0, i64 12
  %182 = load i32, ptr %181, align 4, !tbaa !29
  call void @set_cursor_pos(ptr noundef nonnull %0, i32 noundef %180, i32 noundef %182, i1 noundef zeroext true)
  br label %188

183:                                              ; preds = %174
  %184 = getelementptr inbounds i8, ptr %0, i64 8
  %185 = load i32, ptr %184, align 8, !tbaa !28
  %186 = add nsw i32 %185, -1
  %187 = load i32, ptr %4, align 4, !tbaa !27
  call void @set_cursor_pos(ptr noundef nonnull %0, i32 noundef %186, i32 noundef %187, i1 noundef zeroext true)
  br label %188

188:                                              ; preds = %183, %178
  call void @selectEnd(ptr noundef nonnull %0, i32 noundef %11, ptr noundef nonnull byval(%struct.TCOD_key_t) align 8 %1)
  br label %.loopexit

189:                                              ; preds = %15, %15
  %190 = getelementptr inbounds i8, ptr %0, i64 36
  %191 = load i32, ptr %190, align 4, !tbaa !19
  %.not110 = icmp eq i32 %191, 2147483647
  br i1 %.not110, label %193, label %192

192:                                              ; preds = %189
  tail call void @deleteSelection(ptr noundef nonnull %0)
  br label %193

193:                                              ; preds = %192, %189
  %194 = getelementptr inbounds i8, ptr %0, i64 96
  %195 = load i8, ptr %194, align 8, !tbaa !23, !range !17, !noundef !18
  %196 = trunc nuw i8 %195 to i1
  br i1 %196, label %197, label %204

197:                                              ; preds = %193
  call void @get_cursor_coords(ptr noundef nonnull %0, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %198 = load i32, ptr %4, align 4, !tbaa !27
  %199 = getelementptr inbounds i8, ptr %0, i64 12
  %200 = load i32, ptr %199, align 4, !tbaa !29
  %201 = add nsw i32 %200, -1
  %202 = icmp slt i32 %198, %201
  br i1 %202, label %203, label %.loopexit

203:                                              ; preds = %197
  call void @insertChar(ptr noundef nonnull %0, i8 noundef signext 10)
  br label %.loopexit

204:                                              ; preds = %193
  %205 = getelementptr inbounds i8, ptr %0, i64 72
  store i8 0, ptr %205, align 8, !tbaa !30
  br label %.loopexit

206:                                              ; preds = %15
  %207 = getelementptr inbounds i8, ptr %0, i64 44
  %208 = load i32, ptr %207, align 4, !tbaa !31
  %.not108 = icmp eq i32 %208, 0
  br i1 %.not108, label %.loopexit, label %209

209:                                              ; preds = %206
  %210 = getelementptr inbounds i8, ptr %0, i64 36
  %211 = load i32, ptr %210, align 4, !tbaa !19
  %.not109 = icmp eq i32 %211, 2147483647
  br i1 %.not109, label %213, label %212

212:                                              ; preds = %209
  tail call void @deleteSelection(ptr noundef nonnull %0)
  br label %213

213:                                              ; preds = %212, %209
  %214 = icmp sgt i32 %208, 0
  br i1 %214, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %213, %.lr.ph
  %.0117 = phi i32 [ %215, %.lr.ph ], [ %208, %213 ]
  tail call void @insertChar(ptr noundef %0, i8 noundef signext 32)
  %215 = add nsw i32 %.0117, -1
  %216 = icmp ugt i32 %.0117, 1
  br i1 %216, label %.lr.ph, label %.loopexit, !llvm.loop !32

217:                                              ; preds = %15
  %218 = getelementptr inbounds i8, ptr %1, i64 4
  %219 = load i8, ptr %218, align 4
  %220 = and i8 %219, -33
  %or.cond = icmp eq i8 %220, 67
  %221 = icmp eq i32 %16, 19
  %or.cond6 = or i1 %221, %or.cond
  br i1 %or.cond6, label %222, label %231

222:                                              ; preds = %217
  %223 = getelementptr inbounds i8, ptr %1, i64 39
  %224 = load i8, ptr %223, align 1, !tbaa !25, !range !17, !noundef !18
  %225 = trunc nuw i8 %224 to i1
  br i1 %225, label %230, label %226

226:                                              ; preds = %222
  %227 = getelementptr inbounds i8, ptr %1, i64 42
  %228 = load i8, ptr %227, align 2, !tbaa !26, !range !17, !noundef !18
  %229 = trunc nuw i8 %228 to i1
  br i1 %229, label %230, label %231

230:                                              ; preds = %226, %222
  tail call void @copy(ptr noundef nonnull %0)
  br label %.loopexit

231:                                              ; preds = %217, %226
  switch i8 %220, label %.thread [
    i8 88, label %232
    i8 86, label %241
  ]

232:                                              ; preds = %231
  %233 = getelementptr inbounds i8, ptr %1, i64 39
  %234 = load i8, ptr %233, align 1, !tbaa !25, !range !17, !noundef !18
  %235 = trunc nuw i8 %234 to i1
  br i1 %235, label %240, label %236

236:                                              ; preds = %232
  %237 = getelementptr inbounds i8, ptr %1, i64 42
  %238 = load i8, ptr %237, align 2, !tbaa !26, !range !17, !noundef !18
  %239 = trunc nuw i8 %238 to i1
  br i1 %239, label %240, label %.thread

240:                                              ; preds = %236, %232
  tail call void @cut(ptr noundef nonnull %0)
  br label %.loopexit

241:                                              ; preds = %231
  %242 = getelementptr inbounds i8, ptr %1, i64 39
  %243 = load i8, ptr %242, align 1, !tbaa !25, !range !17, !noundef !18
  %244 = trunc nuw i8 %243 to i1
  br i1 %244, label %253, label %245

245:                                              ; preds = %241
  %246 = getelementptr inbounds i8, ptr %1, i64 42
  %247 = load i8, ptr %246, align 2, !tbaa !26, !range !17, !noundef !18
  %248 = trunc nuw i8 %247 to i1
  br i1 %248, label %253, label %.thread

.thread:                                          ; preds = %231, %236, %245
  br i1 %221, label %249, label %254

249:                                              ; preds = %.thread
  %250 = getelementptr inbounds i8, ptr %1, i64 44
  %251 = load i8, ptr %250, align 4, !tbaa !20, !range !17, !noundef !18
  %252 = trunc nuw i8 %251 to i1
  br i1 %252, label %253, label %254

253:                                              ; preds = %249, %245, %241
  tail call void @paste(ptr noundef nonnull %0)
  br label %.loopexit

254:                                              ; preds = %249, %.thread
  %255 = icmp sgt i8 %219, 31
  br i1 %255, label %256, label %.loopexit

256:                                              ; preds = %254
  %257 = getelementptr inbounds i8, ptr %0, i64 36
  %258 = load i32, ptr %257, align 4, !tbaa !19
  %.not115 = icmp eq i32 %258, 2147483647
  br i1 %.not115, label %260, label %259

259:                                              ; preds = %256
  tail call void @deleteSelection(ptr noundef nonnull %0)
  %.pre = load i8, ptr %218, align 4, !tbaa !34
  br label %260

260:                                              ; preds = %259, %256
  %261 = phi i8 [ %.pre, %259 ], [ %219, %256 ]
  tail call void @insertChar(ptr noundef nonnull %0, i8 noundef signext %261)
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph, %213, %111, %129, %147, %188, %21, %20, %30, %37, %31, %26, %65, %52, %96, %79, %197, %203, %204, %206, %240, %254, %260, %253, %230, %9
  %262 = getelementptr inbounds i8, ptr %0, i64 72
  %263 = load i8, ptr %262, align 8, !tbaa !30, !range !17, !noundef !18
  %264 = trunc nuw i8 %263 to i1
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #3
  ret i1 %264
}

; Function Attrs: nounwind uwtable
declare hidden void @deleteSelection(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @deleteChar(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @cut(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @previous_word(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @selectStart(ptr noundef, i32 noundef, ptr noundef byval(%struct.TCOD_key_t) align 8) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @next_word(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @selectEnd(ptr noundef, i32 noundef, ptr noundef byval(%struct.TCOD_key_t) align 8) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare hidden void @set_cursor_pos(ptr noundef, i32 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @insertChar(ptr noundef, i8 noundef signext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @copy(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @paste(ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }
attributes #4 = { noreturn 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 64}
!6 = !{!"TCOD_Text", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !10, i64 48, !7, i64 56, !7, i64 60, !10, i64 64, !11, i64 72, !7, i64 76, !7, i64 80, !12, i64 84, !12, i64 87, !13, i64 92, !11, i64 96, !10, i64 104}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"_Bool", !8, i64 0}
!12 = !{!"TCOD_ColorRGB", !8, i64 0, !8, i64 1, !8, i64 2}
!13 = !{!"float", !8, i64 0}
!14 = !{!6, !7, i64 32}
!15 = !{!16, !11, i64 37}
!16 = !{!"TCOD_key_t", !7, i64 0, !8, i64 4, !8, i64 5, !11, i64 37, !11, i64 38, !11, i64 39, !11, i64 40, !11, i64 41, !11, i64 42, !11, i64 43, !11, i64 44}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!6, !7, i64 36}
!20 = !{!16, !11, i64 44}
!21 = !{!6, !10, i64 104}
!22 = !{!8, !8, i64 0}
!23 = !{!6, !11, i64 96}
!24 = !{!6, !7, i64 40}
!25 = !{!16, !11, i64 39}
!26 = !{!16, !11, i64 42}
!27 = !{!7, !7, i64 0}
!28 = !{!6, !7, i64 8}
!29 = !{!6, !7, i64 12}
!30 = !{!6, !11, i64 72}
!31 = !{!6, !7, i64 44}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!16, !8, i64 4}


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