; LLVM IR from wojciech-graj/TermGL :: termgl (tgl_flush)

; 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.TGLFmt = type { i8, %union.TGLFmtColor }
%union.TGLFmtColor = type { %struct.TGLRGB }
%struct.TGLRGB = type { i8, i8, i8 }
%struct.TGLPixFmt = type { %struct.TGLFmt, %struct.TGLFmt }
%struct.TGL = type { i32, i32, i32, i32, i32, ptr, ptr, ptr, i32, i8, i8 }
%struct.Pixel = type { i8, %struct.TGLPixFmt }

@.str.2 = external hidden unnamed_addr constant [11 x i8], align 1
@stdout = external global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@__const.tgl_flush.color = external hidden unnamed_addr constant { { i8, { i8, [2 x i8] } }, %struct.TGLFmt }, align 1
@.str.4 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

declare i32 @fputs(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @tgl_flush(ptr noundef %0) #3 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca %struct.TGLPixFmt, align 1
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca [16 x i8], align 16
  store ptr %0, ptr %3, align 8, !tbaa !5
  %13 = load ptr, ptr %3, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.TGL, ptr %13, i32 0, i32 10
  %15 = load i8, ptr %14, align 1, !tbaa !9
  %16 = zext i8 %15 to i32
  %17 = and i32 %16, 32
  %18 = icmp ne i32 %17, 0
  br i1 %18, label %19, label %31

19:                                               ; preds = %1
  br label %20

20:                                               ; preds = %19
  %21 = load ptr, ptr @stdout, align 8, !tbaa !5
  %22 = call i32 @fputs(ptr noundef @.str.3, ptr noundef %21)
  %23 = icmp eq i32 %22, -1
  %24 = zext i1 %23 to i32
  %25 = sext i32 %24 to i64
  %26 = call i64 @llvm.expect.i64(i64 %25, i64 0)
  %27 = icmp ne i64 %26, 0
  br i1 %27, label %28, label %29

28:                                               ; preds = %20
  store i32 -1, ptr %2, align 4
  br label %583

29:                                               ; preds = %20
  br label %30

30:                                               ; preds = %29
  br label %36

31:                                               ; preds = %1
  br label %32

32:                                               ; preds = %31
  %33 = load ptr, ptr @stdout, align 8, !tbaa !5
  %34 = call i32 @fputs(ptr noundef @.str.2, ptr noundef %33)
  br label %35

35:                                               ; preds = %32
  br label %36

36:                                               ; preds = %35, %30
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %4, ptr align 1 @__const.tgl_flush.color, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %37 = load ptr, ptr %3, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.TGL, ptr %37, i32 0, i32 5
  %39 = load ptr, ptr %38, align 8, !tbaa !13
  store ptr %39, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #6
  %40 = load ptr, ptr %3, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.TGL, ptr %40, i32 0, i32 10
  %42 = load i8, ptr %41, align 1, !tbaa !9
  %43 = zext i8 %42 to i32
  %44 = and i32 %43, 16
  %45 = icmp ne i32 %44, 0
  %46 = zext i1 %45 to i8
  store i8 %46, ptr %8, align 1, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #6
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.TGL, ptr %47, i32 0, i32 10
  %49 = load i8, ptr %48, align 1, !tbaa !9
  %50 = zext i8 %49 to i32
  %51 = and i32 %50, 8
  %52 = icmp ne i32 %51, 0
  %53 = zext i1 %52 to i8
  store i8 %53, ptr %9, align 1, !tbaa !14
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.TGL, ptr %54, i32 0, i32 8
  %56 = load i32, ptr %55, align 8, !tbaa !15
  %57 = icmp ne i32 %56, 0
  br i1 %57, label %58, label %296

58:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.TGL, ptr %59, i32 0, i32 7
  %61 = load ptr, ptr %60, align 8, !tbaa !16
  store ptr %61, ptr %10, align 8, !tbaa !5
  store i32 0, ptr %5, align 4, !tbaa !17
  br label %62

62:                                               ; preds = %267, %58
  %63 = load i32, ptr %5, align 4, !tbaa !17
  %64 = load ptr, ptr %3, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.TGL, ptr %64, i32 0, i32 1
  %66 = load i32, ptr %65, align 4, !tbaa !18
  %67 = icmp ult i32 %63, %66
  br i1 %67, label %68, label %270

68:                                               ; preds = %62
  %69 = load i8, ptr %9, align 1, !tbaa !14, !range !19, !noundef !20
  %70 = trunc i8 %69 to i1
  br i1 %70, label %71, label %78

71:                                               ; preds = %68
  %72 = load ptr, ptr %10, align 8, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %72, i32 1
  store ptr %73, ptr %10, align 8, !tbaa !5
  store i8 27, ptr %72, align 1, !tbaa !21
  %74 = load ptr, ptr %10, align 8, !tbaa !5
  %75 = getelementptr inbounds i8, ptr %74, i32 1
  store ptr %75, ptr %10, align 8, !tbaa !5
  store i8 35, ptr %74, align 1, !tbaa !21
  %76 = load ptr, ptr %10, align 8, !tbaa !5
  %77 = getelementptr inbounds i8, ptr %76, i32 1
  store ptr %77, ptr %10, align 8, !tbaa !5
  store i8 54, ptr %76, align 1, !tbaa !21
  br label %78

78:                                               ; preds = %71, %68
  store i32 0, ptr %6, align 4, !tbaa !17
  br label %79

79:                                               ; preds = %261, %78
  %80 = load i32, ptr %6, align 4, !tbaa !17
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.TGL, ptr %81, i32 0, i32 0
  %83 = load i32, ptr %82, align 8, !tbaa !22
  %84 = icmp ult i32 %80, %83
  br i1 %84, label %85, label %264

85:                                               ; preds = %79
  %86 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %87 = getelementptr inbounds %struct.TGLFmt, ptr %86, i32 0, i32 0
  %88 = load i8, ptr %87, align 1, !tbaa !23
  %89 = zext i8 %88 to i32
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.Pixel, ptr %90, i32 0, i32 1
  %92 = getelementptr inbounds %struct.TGLPixFmt, ptr %91, i32 0, i32 0
  %93 = getelementptr inbounds %struct.TGLFmt, ptr %92, i32 0, i32 0
  %94 = load i8, ptr %93, align 1, !tbaa !26
  %95 = zext i8 %94 to i32
  %96 = xor i32 %89, %95
  %97 = and i32 %96, 1
  %98 = icmp ne i32 %97, 0
  br i1 %98, label %235, label %99

99:                                               ; preds = %85
  %100 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %101 = getelementptr inbounds %struct.TGLFmt, ptr %100, i32 0, i32 0
  %102 = load i8, ptr %101, align 1, !tbaa !23
  %103 = zext i8 %102 to i32
  %104 = and i32 %103, 1
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %106, label %148

106:                                              ; preds = %99
  %107 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %108 = getelementptr inbounds %struct.TGLFmt, ptr %107, i32 0, i32 1
  %109 = getelementptr inbounds %struct.TGLRGB, ptr %108, i32 0, i32 0
  %110 = load i8, ptr %109, align 1, !tbaa !21
  %111 = zext i8 %110 to i32
  %112 = load ptr, ptr %7, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.Pixel, ptr %112, i32 0, i32 1
  %114 = getelementptr inbounds %struct.TGLPixFmt, ptr %113, i32 0, i32 0
  %115 = getelementptr inbounds %struct.TGLFmt, ptr %114, i32 0, i32 1
  %116 = getelementptr inbounds %struct.TGLRGB, ptr %115, i32 0, i32 0
  %117 = load i8, ptr %116, align 1, !tbaa !21
  %118 = zext i8 %117 to i32
  %119 = icmp eq i32 %111, %118
  br i1 %119, label %120, label %235

120:                                              ; preds = %106
  %121 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %122 = getelementptr inbounds %struct.TGLFmt, ptr %121, i32 0, i32 1
  %123 = getelementptr inbounds %struct.TGLRGB, ptr %122, i32 0, i32 1
  %124 = load i8, ptr %123, align 1, !tbaa !21
  %125 = zext i8 %124 to i32
  %126 = load ptr, ptr %7, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.Pixel, ptr %126, i32 0, i32 1
  %128 = getelementptr inbounds %struct.TGLPixFmt, ptr %127, i32 0, i32 0
  %129 = getelementptr inbounds %struct.TGLFmt, ptr %128, i32 0, i32 1
  %130 = getelementptr inbounds %struct.TGLRGB, ptr %129, i32 0, i32 1
  %131 = load i8, ptr %130, align 1, !tbaa !21
  %132 = zext i8 %131 to i32
  %133 = icmp eq i32 %125, %132
  br i1 %133, label %134, label %235

134:                                              ; preds = %120
  %135 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %136 = getelementptr inbounds %struct.TGLFmt, ptr %135, i32 0, i32 1
  %137 = getelementptr inbounds %struct.TGLRGB, ptr %136, i32 0, i32 2
  %138 = load i8, ptr %137, align 1, !tbaa !21
  %139 = zext i8 %138 to i32
  %140 = load ptr, ptr %7, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.Pixel, ptr %140, i32 0, i32 1
  %142 = getelementptr inbounds %struct.TGLPixFmt, ptr %141, i32 0, i32 0
  %143 = getelementptr inbounds %struct.TGLFmt, ptr %142, i32 0, i32 1
  %144 = getelementptr inbounds %struct.TGLRGB, ptr %143, i32 0, i32 2
  %145 = load i8, ptr %144, align 1, !tbaa !21
  %146 = zext i8 %145 to i32
  %147 = icmp eq i32 %139, %146
  br i1 %147, label %160, label %235

148:                                              ; preds = %99
  %149 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %150 = getelementptr inbounds %struct.TGLFmt, ptr %149, i32 0, i32 1
  %151 = load i8, ptr %150, align 1, !tbaa !21
  %152 = zext i8 %151 to i32
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.Pixel, ptr %153, i32 0, i32 1
  %155 = getelementptr inbounds %struct.TGLPixFmt, ptr %154, i32 0, i32 0
  %156 = getelementptr inbounds %struct.TGLFmt, ptr %155, i32 0, i32 1
  %157 = load i8, ptr %156, align 1, !tbaa !21
  %158 = zext i8 %157 to i32
  %159 = icmp eq i32 %152, %158
  br i1 %159, label %160, label %235

160:                                              ; preds = %148, %134
  %161 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %162 = getelementptr inbounds %struct.TGLFmt, ptr %161, i32 0, i32 0
  %163 = load i8, ptr %162, align 1, !tbaa !28
  %164 = zext i8 %163 to i32
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.Pixel, ptr %165, i32 0, i32 1
  %167 = getelementptr inbounds %struct.TGLPixFmt, ptr %166, i32 0, i32 1
  %168 = getelementptr inbounds %struct.TGLFmt, ptr %167, i32 0, i32 0
  %169 = load i8, ptr %168, align 1, !tbaa !29
  %170 = zext i8 %169 to i32
  %171 = xor i32 %164, %170
  %172 = and i32 %171, 1
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %235, label %174

174:                                              ; preds = %160
  %175 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %176 = getelementptr inbounds %struct.TGLFmt, ptr %175, i32 0, i32 0
  %177 = load i8, ptr %176, align 1, !tbaa !28
  %178 = zext i8 %177 to i32
  %179 = and i32 %178, 1
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %223

181:                                              ; preds = %174
  %182 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %183 = getelementptr inbounds %struct.TGLFmt, ptr %182, i32 0, i32 1
  %184 = getelementptr inbounds %struct.TGLRGB, ptr %183, i32 0, i32 0
  %185 = load i8, ptr %184, align 1, !tbaa !21
  %186 = zext i8 %185 to i32
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.Pixel, ptr %187, i32 0, i32 1
  %189 = getelementptr inbounds %struct.TGLPixFmt, ptr %188, i32 0, i32 1
  %190 = getelementptr inbounds %struct.TGLFmt, ptr %189, i32 0, i32 1
  %191 = getelementptr inbounds %struct.TGLRGB, ptr %190, i32 0, i32 0
  %192 = load i8, ptr %191, align 1, !tbaa !21
  %193 = zext i8 %192 to i32
  %194 = icmp eq i32 %186, %193
  br i1 %194, label %195, label %235

195:                                              ; preds = %181
  %196 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %197 = getelementptr inbounds %struct.TGLFmt, ptr %196, i32 0, i32 1
  %198 = getelementptr inbounds %struct.TGLRGB, ptr %197, i32 0, i32 1
  %199 = load i8, ptr %198, align 1, !tbaa !21
  %200 = zext i8 %199 to i32
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.Pixel, ptr %201, i32 0, i32 1
  %203 = getelementptr inbounds %struct.TGLPixFmt, ptr %202, i32 0, i32 1
  %204 = getelementptr inbounds %struct.TGLFmt, ptr %203, i32 0, i32 1
  %205 = getelementptr inbounds %struct.TGLRGB, ptr %204, i32 0, i32 1
  %206 = load i8, ptr %205, align 1, !tbaa !21
  %207 = zext i8 %206 to i32
  %208 = icmp eq i32 %200, %207
  br i1 %208, label %209, label %235

209:                                              ; preds = %195
  %210 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %211 = getelementptr inbounds %struct.TGLFmt, ptr %210, i32 0, i32 1
  %212 = getelementptr inbounds %struct.TGLRGB, ptr %211, i32 0, i32 2
  %213 = load i8, ptr %212, align 1, !tbaa !21
  %214 = zext i8 %213 to i32
  %215 = load ptr, ptr %7, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.Pixel, ptr %215, i32 0, i32 1
  %217 = getelementptr inbounds %struct.TGLPixFmt, ptr %216, i32 0, i32 1
  %218 = getelementptr inbounds %struct.TGLFmt, ptr %217, i32 0, i32 1
  %219 = getelementptr inbounds %struct.TGLRGB, ptr %218, i32 0, i32 2
  %220 = load i8, ptr %219, align 1, !tbaa !21
  %221 = zext i8 %220 to i32
  %222 = icmp eq i32 %214, %221
  br i1 %222, label %244, label %235

223:                                              ; preds = %174
  %224 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %225 = getelementptr inbounds %struct.TGLFmt, ptr %224, i32 0, i32 1
  %226 = load i8, ptr %225, align 1, !tbaa !21
  %227 = zext i8 %226 to i32
  %228 = load ptr, ptr %7, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.Pixel, ptr %228, i32 0, i32 1
  %230 = getelementptr inbounds %struct.TGLPixFmt, ptr %229, i32 0, i32 1
  %231 = getelementptr inbounds %struct.TGLFmt, ptr %230, i32 0, i32 1
  %232 = load i8, ptr %231, align 1, !tbaa !21
  %233 = zext i8 %232 to i32
  %234 = icmp eq i32 %227, %233
  br i1 %234, label %244, label %235

235:                                              ; preds = %223, %209, %195, %181, %160, %148, %134, %120, %106, %85
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.Pixel, ptr %236, i32 0, i32 1
  %238 = load ptr, ptr %10, align 8, !tbaa !5
  %239 = load i64, ptr %4, align 1
  %240 = load i64, ptr %237, align 1
  %241 = call ptr @itgl_generate_sgr(i64 %239, i64 %240, ptr noundef %238)
  store ptr %241, ptr %10, align 8, !tbaa !5
  %242 = load ptr, ptr %7, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.Pixel, ptr %242, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %4, ptr align 1 %243, i64 8, i1 false), !tbaa.struct !30
  br label %244

244:                                              ; preds = %235, %223, %209
  %245 = load ptr, ptr %7, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.Pixel, ptr %245, i32 0, i32 0
  %247 = load i8, ptr %246, align 1, !tbaa !31
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = getelementptr inbounds i8, ptr %248, i32 1
  store ptr %249, ptr %10, align 8, !tbaa !5
  store i8 %247, ptr %248, align 1, !tbaa !21
  %250 = load i8, ptr %8, align 1, !tbaa !14, !range !19, !noundef !20
  %251 = trunc i8 %250 to i1
  br i1 %251, label %252, label %258

252:                                              ; preds = %244
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.Pixel, ptr %253, i32 0, i32 0
  %255 = load i8, ptr %254, align 1, !tbaa !31
  %256 = load ptr, ptr %10, align 8, !tbaa !5
  %257 = getelementptr inbounds i8, ptr %256, i32 1
  store ptr %257, ptr %10, align 8, !tbaa !5
  store i8 %255, ptr %256, align 1, !tbaa !21
  br label %258

258:                                              ; preds = %252, %244
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.Pixel, ptr %259, i32 1
  store ptr %260, ptr %7, align 8, !tbaa !5
  br label %261

261:                                              ; preds = %258
  %262 = load i32, ptr %6, align 4, !tbaa !17
  %263 = add i32 %262, 1
  store i32 %263, ptr %6, align 4, !tbaa !17
  br label %79, !llvm.loop !32

264:                                              ; preds = %79
  %265 = load ptr, ptr %10, align 8, !tbaa !5
  %266 = getelementptr inbounds i8, ptr %265, i32 1
  store ptr %266, ptr %10, align 8, !tbaa !5
  store i8 10, ptr %265, align 1, !tbaa !21
  br label %267

267:                                              ; preds = %264
  %268 = load i32, ptr %5, align 4, !tbaa !17
  %269 = add i32 %268, 1
  store i32 %269, ptr %5, align 4, !tbaa !17
  br label %62, !llvm.loop !34

270:                                              ; preds = %62
  %271 = load ptr, ptr %10, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i32 1
  store ptr %272, ptr %10, align 8, !tbaa !5
  store i8 27, ptr %271, align 1, !tbaa !21
  %273 = load ptr, ptr %10, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i32 1
  store ptr %274, ptr %10, align 8, !tbaa !5
  store i8 91, ptr %273, align 1, !tbaa !21
  %275 = load ptr, ptr %10, align 8, !tbaa !5
  %276 = getelementptr inbounds i8, ptr %275, i32 1
  store ptr %276, ptr %10, align 8, !tbaa !5
  store i8 48, ptr %275, align 1, !tbaa !21
  %277 = load ptr, ptr %10, align 8, !tbaa !5
  store i8 109, ptr %277, align 1, !tbaa !21
  br label %278

278:                                              ; preds = %270
  %279 = load ptr, ptr %3, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.TGL, ptr %279, i32 0, i32 7
  %281 = load ptr, ptr %280, align 8, !tbaa !16
  %282 = load ptr, ptr @stdout, align 8, !tbaa !5
  %283 = call i32 @fputs(ptr noundef %281, ptr noundef %282)
  %284 = icmp eq i32 %283, -1
  %285 = zext i1 %284 to i32
  %286 = sext i32 %285 to i64
  %287 = call i64 @llvm.expect.i64(i64 %286, i64 0)
  %288 = icmp ne i64 %287, 0
  br i1 %288, label %289, label %290

289:                                              ; preds = %278
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %293

290:                                              ; preds = %278
  br label %291

291:                                              ; preds = %290
  br label %292

292:                                              ; preds = %291
  store i32 0, ptr %11, align 4
  br label %293

293:                                              ; preds = %292, %289
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  %294 = load i32, ptr %11, align 4
  switch i32 %294, label %582 [
    i32 0, label %295
  ]

295:                                              ; preds = %293
  br label %569

296:                                              ; preds = %36
  store i32 0, ptr %5, align 4, !tbaa !17
  br label %297

297:                                              ; preds = %553, %296
  %298 = load i32, ptr %5, align 4, !tbaa !17
  %299 = load ptr, ptr %3, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.TGL, ptr %299, i32 0, i32 1
  %301 = load i32, ptr %300, align 4, !tbaa !18
  %302 = icmp ult i32 %298, %301
  br i1 %302, label %303, label %556

303:                                              ; preds = %297
  %304 = load i8, ptr %9, align 1, !tbaa !14, !range !19, !noundef !20
  %305 = trunc i8 %304 to i1
  br i1 %305, label %306, label %319

306:                                              ; preds = %303
  br label %307

307:                                              ; preds = %306
  %308 = load ptr, ptr @stdout, align 8, !tbaa !5
  %309 = call i32 @fputs(ptr noundef @.str.4, ptr noundef %308)
  %310 = icmp eq i32 %309, -1
  %311 = zext i1 %310 to i32
  %312 = sext i32 %311 to i64
  %313 = call i64 @llvm.expect.i64(i64 %312, i64 0)
  %314 = icmp ne i64 %313, 0
  br i1 %314, label %315, label %316

315:                                              ; preds = %307
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %582

316:                                              ; preds = %307
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  br label %319

319:                                              ; preds = %318, %303
  store i32 0, ptr %6, align 4, !tbaa !17
  br label %320

320:                                              ; preds = %538, %319
  %321 = load i32, ptr %6, align 4, !tbaa !17
  %322 = load ptr, ptr %3, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.TGL, ptr %322, i32 0, i32 0
  %324 = load i32, ptr %323, align 8, !tbaa !22
  %325 = icmp ult i32 %321, %324
  br i1 %325, label %326, label %541

326:                                              ; preds = %320
  %327 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %328 = getelementptr inbounds %struct.TGLFmt, ptr %327, i32 0, i32 0
  %329 = load i8, ptr %328, align 1, !tbaa !23
  %330 = zext i8 %329 to i32
  %331 = load ptr, ptr %7, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.Pixel, ptr %331, i32 0, i32 1
  %333 = getelementptr inbounds %struct.TGLPixFmt, ptr %332, i32 0, i32 0
  %334 = getelementptr inbounds %struct.TGLFmt, ptr %333, i32 0, i32 0
  %335 = load i8, ptr %334, align 1, !tbaa !26
  %336 = zext i8 %335 to i32
  %337 = xor i32 %330, %336
  %338 = and i32 %337, 1
  %339 = icmp ne i32 %338, 0
  br i1 %339, label %476, label %340

340:                                              ; preds = %326
  %341 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %342 = getelementptr inbounds %struct.TGLFmt, ptr %341, i32 0, i32 0
  %343 = load i8, ptr %342, align 1, !tbaa !23
  %344 = zext i8 %343 to i32
  %345 = and i32 %344, 1
  %346 = icmp ne i32 %345, 0
  br i1 %346, label %347, label %389

347:                                              ; preds = %340
  %348 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %349 = getelementptr inbounds %struct.TGLFmt, ptr %348, i32 0, i32 1
  %350 = getelementptr inbounds %struct.TGLRGB, ptr %349, i32 0, i32 0
  %351 = load i8, ptr %350, align 1, !tbaa !21
  %352 = zext i8 %351 to i32
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.Pixel, ptr %353, i32 0, i32 1
  %355 = getelementptr inbounds %struct.TGLPixFmt, ptr %354, i32 0, i32 0
  %356 = getelementptr inbounds %struct.TGLFmt, ptr %355, i32 0, i32 1
  %357 = getelementptr inbounds %struct.TGLRGB, ptr %356, i32 0, i32 0
  %358 = load i8, ptr %357, align 1, !tbaa !21
  %359 = zext i8 %358 to i32
  %360 = icmp eq i32 %352, %359
  br i1 %360, label %361, label %476

361:                                              ; preds = %347
  %362 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %363 = getelementptr inbounds %struct.TGLFmt, ptr %362, i32 0, i32 1
  %364 = getelementptr inbounds %struct.TGLRGB, ptr %363, i32 0, i32 1
  %365 = load i8, ptr %364, align 1, !tbaa !21
  %366 = zext i8 %365 to i32
  %367 = load ptr, ptr %7, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.Pixel, ptr %367, i32 0, i32 1
  %369 = getelementptr inbounds %struct.TGLPixFmt, ptr %368, i32 0, i32 0
  %370 = getelementptr inbounds %struct.TGLFmt, ptr %369, i32 0, i32 1
  %371 = getelementptr inbounds %struct.TGLRGB, ptr %370, i32 0, i32 1
  %372 = load i8, ptr %371, align 1, !tbaa !21
  %373 = zext i8 %372 to i32
  %374 = icmp eq i32 %366, %373
  br i1 %374, label %375, label %476

375:                                              ; preds = %361
  %376 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %377 = getelementptr inbounds %struct.TGLFmt, ptr %376, i32 0, i32 1
  %378 = getelementptr inbounds %struct.TGLRGB, ptr %377, i32 0, i32 2
  %379 = load i8, ptr %378, align 1, !tbaa !21
  %380 = zext i8 %379 to i32
  %381 = load ptr, ptr %7, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.Pixel, ptr %381, i32 0, i32 1
  %383 = getelementptr inbounds %struct.TGLPixFmt, ptr %382, i32 0, i32 0
  %384 = getelementptr inbounds %struct.TGLFmt, ptr %383, i32 0, i32 1
  %385 = getelementptr inbounds %struct.TGLRGB, ptr %384, i32 0, i32 2
  %386 = load i8, ptr %385, align 1, !tbaa !21
  %387 = zext i8 %386 to i32
  %388 = icmp eq i32 %380, %387
  br i1 %388, label %401, label %476

389:                                              ; preds = %340
  %390 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 0
  %391 = getelementptr inbounds %struct.TGLFmt, ptr %390, i32 0, i32 1
  %392 = load i8, ptr %391, align 1, !tbaa !21
  %393 = zext i8 %392 to i32
  %394 = load ptr, ptr %7, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.Pixel, ptr %394, i32 0, i32 1
  %396 = getelementptr inbounds %struct.TGLPixFmt, ptr %395, i32 0, i32 0
  %397 = getelementptr inbounds %struct.TGLFmt, ptr %396, i32 0, i32 1
  %398 = load i8, ptr %397, align 1, !tbaa !21
  %399 = zext i8 %398 to i32
  %400 = icmp eq i32 %393, %399
  br i1 %400, label %401, label %476

401:                                              ; preds = %389, %375
  %402 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %403 = getelementptr inbounds %struct.TGLFmt, ptr %402, i32 0, i32 0
  %404 = load i8, ptr %403, align 1, !tbaa !28
  %405 = zext i8 %404 to i32
  %406 = load ptr, ptr %7, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.Pixel, ptr %406, i32 0, i32 1
  %408 = getelementptr inbounds %struct.TGLPixFmt, ptr %407, i32 0, i32 1
  %409 = getelementptr inbounds %struct.TGLFmt, ptr %408, i32 0, i32 0
  %410 = load i8, ptr %409, align 1, !tbaa !29
  %411 = zext i8 %410 to i32
  %412 = xor i32 %405, %411
  %413 = and i32 %412, 1
  %414 = icmp ne i32 %413, 0
  br i1 %414, label %476, label %415

415:                                              ; preds = %401
  %416 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %417 = getelementptr inbounds %struct.TGLFmt, ptr %416, i32 0, i32 0
  %418 = load i8, ptr %417, align 1, !tbaa !28
  %419 = zext i8 %418 to i32
  %420 = and i32 %419, 1
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %422, label %464

422:                                              ; preds = %415
  %423 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %424 = getelementptr inbounds %struct.TGLFmt, ptr %423, i32 0, i32 1
  %425 = getelementptr inbounds %struct.TGLRGB, ptr %424, i32 0, i32 0
  %426 = load i8, ptr %425, align 1, !tbaa !21
  %427 = zext i8 %426 to i32
  %428 = load ptr, ptr %7, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.Pixel, ptr %428, i32 0, i32 1
  %430 = getelementptr inbounds %struct.TGLPixFmt, ptr %429, i32 0, i32 1
  %431 = getelementptr inbounds %struct.TGLFmt, ptr %430, i32 0, i32 1
  %432 = getelementptr inbounds %struct.TGLRGB, ptr %431, i32 0, i32 0
  %433 = load i8, ptr %432, align 1, !tbaa !21
  %434 = zext i8 %433 to i32
  %435 = icmp eq i32 %427, %434
  br i1 %435, label %436, label %476

436:                                              ; preds = %422
  %437 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %438 = getelementptr inbounds %struct.TGLFmt, ptr %437, i32 0, i32 1
  %439 = getelementptr inbounds %struct.TGLRGB, ptr %438, i32 0, i32 1
  %440 = load i8, ptr %439, align 1, !tbaa !21
  %441 = zext i8 %440 to i32
  %442 = load ptr, ptr %7, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.Pixel, ptr %442, i32 0, i32 1
  %444 = getelementptr inbounds %struct.TGLPixFmt, ptr %443, i32 0, i32 1
  %445 = getelementptr inbounds %struct.TGLFmt, ptr %444, i32 0, i32 1
  %446 = getelementptr inbounds %struct.TGLRGB, ptr %445, i32 0, i32 1
  %447 = load i8, ptr %446, align 1, !tbaa !21
  %448 = zext i8 %447 to i32
  %449 = icmp eq i32 %441, %448
  br i1 %449, label %450, label %476

450:                                              ; preds = %436
  %451 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %452 = getelementptr inbounds %struct.TGLFmt, ptr %451, i32 0, i32 1
  %453 = getelementptr inbounds %struct.TGLRGB, ptr %452, i32 0, i32 2
  %454 = load i8, ptr %453, align 1, !tbaa !21
  %455 = zext i8 %454 to i32
  %456 = load ptr, ptr %7, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.Pixel, ptr %456, i32 0, i32 1
  %458 = getelementptr inbounds %struct.TGLPixFmt, ptr %457, i32 0, i32 1
  %459 = getelementptr inbounds %struct.TGLFmt, ptr %458, i32 0, i32 1
  %460 = getelementptr inbounds %struct.TGLRGB, ptr %459, i32 0, i32 2
  %461 = load i8, ptr %460, align 1, !tbaa !21
  %462 = zext i8 %461 to i32
  %463 = icmp eq i32 %455, %462
  br i1 %463, label %501, label %476

464:                                              ; preds = %415
  %465 = getelementptr inbounds %struct.TGLPixFmt, ptr %4, i32 0, i32 1
  %466 = getelementptr inbounds %struct.TGLFmt, ptr %465, i32 0, i32 1
  %467 = load i8, ptr %466, align 1, !tbaa !21
  %468 = zext i8 %467 to i32
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.Pixel, ptr %469, i32 0, i32 1
  %471 = getelementptr inbounds %struct.TGLPixFmt, ptr %470, i32 0, i32 1
  %472 = getelementptr inbounds %struct.TGLFmt, ptr %471, i32 0, i32 1
  %473 = load i8, ptr %472, align 1, !tbaa !21
  %474 = zext i8 %473 to i32
  %475 = icmp eq i32 %468, %474
  br i1 %475, label %501, label %476

476:                                              ; preds = %464, %450, %436, %422, %401, %389, %375, %361, %347, %326
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #6
  %477 = load ptr, ptr %7, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.Pixel, ptr %477, i32 0, i32 1
  %479 = getelementptr inbounds [16 x i8], ptr %12, i64 0, i64 0
  %480 = load i64, ptr %4, align 1
  %481 = load i64, ptr %478, align 1
  %482 = call ptr @itgl_generate_sgr(i64 %480, i64 %481, ptr noundef %479)
  store i8 0, ptr %482, align 1, !tbaa !21
  %483 = load ptr, ptr %7, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.Pixel, ptr %483, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %4, ptr align 1 %484, i64 8, i1 false), !tbaa.struct !30
  br label %485

485:                                              ; preds = %476
  %486 = getelementptr inbounds [16 x i8], ptr %12, i64 0, i64 0
  %487 = load ptr, ptr @stdout, align 8, !tbaa !5
  %488 = call i32 @fputs(ptr noundef %486, ptr noundef %487)
  %489 = icmp eq i32 %488, -1
  %490 = zext i1 %489 to i32
  %491 = sext i32 %490 to i64
  %492 = call i64 @llvm.expect.i64(i64 %491, i64 0)
  %493 = icmp ne i64 %492, 0
  br i1 %493, label %494, label %495

494:                                              ; preds = %485
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %498

495:                                              ; preds = %485
  br label %496

496:                                              ; preds = %495
  br label %497

497:                                              ; preds = %496
  store i32 0, ptr %11, align 4
  br label %498

498:                                              ; preds = %497, %494
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  %499 = load i32, ptr %11, align 4
  switch i32 %499, label %582 [
    i32 0, label %500
  ]

500:                                              ; preds = %498
  br label %501

501:                                              ; preds = %500, %464, %450
  br label %502

502:                                              ; preds = %501
  %503 = load ptr, ptr %7, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.Pixel, ptr %503, i32 0, i32 0
  %505 = load i8, ptr %504, align 1, !tbaa !31
  %506 = sext i8 %505 to i32
  %507 = call i32 @putchar(i32 noundef %506)
  %508 = icmp eq i32 %507, -1
  %509 = zext i1 %508 to i32
  %510 = sext i32 %509 to i64
  %511 = call i64 @llvm.expect.i64(i64 %510, i64 0)
  %512 = icmp ne i64 %511, 0
  br i1 %512, label %513, label %514

513:                                              ; preds = %502
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %582

514:                                              ; preds = %502
  br label %515

515:                                              ; preds = %514
  br label %516

516:                                              ; preds = %515
  %517 = load i8, ptr %8, align 1, !tbaa !14, !range !19, !noundef !20
  %518 = trunc i8 %517 to i1
  br i1 %518, label %519, label %535

519:                                              ; preds = %516
  br label %520

520:                                              ; preds = %519
  %521 = load ptr, ptr %7, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.Pixel, ptr %521, i32 0, i32 0
  %523 = load i8, ptr %522, align 1, !tbaa !31
  %524 = sext i8 %523 to i32
  %525 = call i32 @putchar(i32 noundef %524)
  %526 = icmp eq i32 %525, -1
  %527 = zext i1 %526 to i32
  %528 = sext i32 %527 to i64
  %529 = call i64 @llvm.expect.i64(i64 %528, i64 0)
  %530 = icmp ne i64 %529, 0
  br i1 %530, label %531, label %532

531:                                              ; preds = %520
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %582

532:                                              ; preds = %520
  br label %533

533:                                              ; preds = %532
  br label %534

534:                                              ; preds = %533
  br label %535

535:                                              ; preds = %534, %516
  %536 = load ptr, ptr %7, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.Pixel, ptr %536, i32 1
  store ptr %537, ptr %7, align 8, !tbaa !5
  br label %538

538:                                              ; preds = %535
  %539 = load i32, ptr %6, align 4, !tbaa !17
  %540 = add i32 %539, 1
  store i32 %540, ptr %6, align 4, !tbaa !17
  br label %320, !llvm.loop !35

541:                                              ; preds = %320
  br label %542

542:                                              ; preds = %541
  %543 = call i32 @putchar(i32 noundef 10)
  %544 = icmp eq i32 %543, -1
  %545 = zext i1 %544 to i32
  %546 = sext i32 %545 to i64
  %547 = call i64 @llvm.expect.i64(i64 %546, i64 0)
  %548 = icmp ne i64 %547, 0
  br i1 %548, label %549, label %550

549:                                              ; preds = %542
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %582

550:                                              ; preds = %542
  br label %551

551:                                              ; preds = %550
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552
  %554 = load i32, ptr %5, align 4, !tbaa !17
  %555 = add i32 %554, 1
  store i32 %555, ptr %5, align 4, !tbaa !17
  br label %297, !llvm.loop !36

556:                                              ; preds = %297
  br label %557

557:                                              ; preds = %556
  %558 = load ptr, ptr @stdout, align 8, !tbaa !5
  %559 = call i32 @fputs(ptr noundef @.str.5, ptr noundef %558)
  %560 = icmp eq i32 %559, -1
  %561 = zext i1 %560 to i32
  %562 = sext i32 %561 to i64
  %563 = call i64 @llvm.expect.i64(i64 %562, i64 0)
  %564 = icmp ne i64 %563, 0
  br i1 %564, label %565, label %566

565:                                              ; preds = %557
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %582

566:                                              ; preds = %557
  br label %567

567:                                              ; preds = %566
  br label %568

568:                                              ; preds = %567
  br label %569

569:                                              ; preds = %568, %295
  br label %570

570:                                              ; preds = %569
  %571 = load ptr, ptr @stdout, align 8, !tbaa !5
  %572 = call i32 @fflush(ptr noundef %571)
  %573 = icmp eq i32 %572, -1
  %574 = zext i1 %573 to i32
  %575 = sext i32 %574 to i64
  %576 = call i64 @llvm.expect.i64(i64 %575, i64 0)
  %577 = icmp ne i64 %576, 0
  br i1 %577, label %578, label %579

578:                                              ; preds = %570
  store i32 -1, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %582

579:                                              ; preds = %570
  br label %580

580:                                              ; preds = %579
  br label %581

581:                                              ; preds = %580
  store i32 0, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %582

582:                                              ; preds = %581, %578, %565, %549, %531, %513, %498, %315, %293
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  br label %583

583:                                              ; preds = %582, %28
  %584 = load i32, ptr %2, align 4
  ret i32 %584
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.expect.i64(i64, i64) #4

; Function Attrs: nounwind uwtable
declare hidden ptr @itgl_generate_sgr(i64, i64, ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare i32 @putchar(i32 noundef) #5

declare i32 @fflush(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !7, i64 53}
!10 = !{!"TGL", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !12, i64 52, !7, i64 53}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_Bool", !7, i64 0}
!13 = !{!10, !6, i64 24}
!14 = !{!12, !12, i64 0}
!15 = !{!10, !11, i64 48}
!16 = !{!10, !6, i64 40}
!17 = !{!11, !11, i64 0}
!18 = !{!10, !11, i64 4}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!7, !7, i64 0}
!22 = !{!10, !11, i64 0}
!23 = !{!24, !7, i64 0}
!24 = !{!"TGLPixFmt", !25, i64 0, !25, i64 4}
!25 = !{!"TGLFmt", !7, i64 0, !7, i64 1}
!26 = !{!27, !7, i64 1}
!27 = !{!"Pixel", !7, i64 0, !24, i64 1}
!28 = !{!24, !7, i64 4}
!29 = !{!27, !7, i64 5}
!30 = !{i64 0, i64 1, !21, i64 1, i64 3, !21, i64 4, i64 1, !21, i64 5, i64 3, !21}
!31 = !{!27, !7, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !33}


; 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.TGLFmt = type { i8, %union.TGLFmtColor }
%union.TGLFmtColor = type { %struct.TGLRGB }
%struct.TGLRGB = type { i8, i8, i8 }

@.str.2 = external hidden unnamed_addr constant [11 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@__const.tgl_flush.color = external hidden unnamed_addr constant { { i8, { i8, [2 x i8] } }, %struct.TGLFmt }, align 1
@.str.4 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [5 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nofree nounwind
declare noundef i32 @fputs(ptr nocapture noundef readonly, ptr nocapture noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @tgl_flush(ptr nocapture noundef readonly %0) local_unnamed_addr #2 {
  %2 = alloca [16 x i8], align 16
  %3 = getelementptr inbounds i8, ptr %0, i64 53
  %4 = load i8, ptr %3, align 1, !tbaa !5
  %5 = and i8 %4, 32
  %.not = icmp eq i8 %5, 0
  %6 = load ptr, ptr @stdout, align 8, !tbaa !12
  br i1 %.not, label %10, label %7

7:                                                ; preds = %1
  %8 = tail call i32 @fputs(ptr noundef nonnull @.str.3, ptr noundef %6)
  %9 = icmp eq i32 %8, -1
  br i1 %9, label %.loopexit, label %12, !prof !13

10:                                               ; preds = %1
  %11 = tail call i32 @fputs(ptr noundef nonnull @.str.2, ptr noundef %6)
  br label %12

12:                                               ; preds = %7, %10
  %.sroa.0.0.copyload = load i8, ptr @__const.tgl_flush.color, align 1
  %.sroa.11.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const.tgl_flush.color, i64 1), align 1
  %.sroa.15.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const.tgl_flush.color, i64 2), align 1
  %.sroa.17.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const.tgl_flush.color, i64 3), align 1
  %.sroa.19.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const.tgl_flush.color, i64 4), align 1
  %.sroa.23.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const.tgl_flush.color, i64 5), align 1
  %.sroa.27.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const.tgl_flush.color, i64 6), align 1
  %.sroa.29.0.copyload = load i8, ptr getelementptr inbounds (i8, ptr @__const.tgl_flush.color, i64 7), align 1
  %13 = getelementptr inbounds i8, ptr %0, i64 24
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = load i8, ptr %3, align 1, !tbaa !5
  %16 = zext i8 %15 to i32
  %17 = and i32 %16, 16
  %.not161 = icmp eq i32 %17, 0
  %18 = and i32 %16, 8
  %.not162 = icmp eq i32 %18, 0
  %19 = getelementptr inbounds i8, ptr %0, i64 48
  %20 = load i32, ptr %19, align 8, !tbaa !15
  %.not163 = icmp eq i32 %20, 0
  br i1 %.not163, label %.preheader, label %23

.preheader:                                       ; preds = %12
  %21 = getelementptr inbounds i8, ptr %0, i64 4
  %22 = load i32, ptr %21, align 4, !tbaa !16
  %.not255 = icmp eq i32 %22, 0
  br i1 %.not255, label %._crit_edge252, label %.lr.ph251

23:                                               ; preds = %12
  %24 = getelementptr inbounds i8, ptr %0, i64 40
  %25 = load ptr, ptr %24, align 8, !tbaa !17
  %26 = getelementptr inbounds i8, ptr %0, i64 4
  %27 = load i32, ptr %26, align 4, !tbaa !16
  %.not253 = icmp eq i32 %27, 0
  br i1 %.not253, label %._crit_edge217, label %.lr.ph216

.lr.ph216:                                        ; preds = %23, %._crit_edge
  %.0146214 = phi ptr [ %86, %._crit_edge ], [ %25, %23 ]
  %.sroa.29.0213 = phi i8 [ %.sroa.29.1.lcssa, %._crit_edge ], [ %.sroa.29.0.copyload, %23 ]
  %.0153212 = phi ptr [ %.1154.lcssa, %._crit_edge ], [ %14, %23 ]
  %.0159211 = phi i32 [ %87, %._crit_edge ], [ 0, %23 ]
  %.sroa.0.0210 = phi i8 [ %.sroa.0.1.lcssa, %._crit_edge ], [ %.sroa.0.0.copyload, %23 ]
  %.sroa.11.0209 = phi i8 [ %.sroa.11.1.lcssa, %._crit_edge ], [ %.sroa.11.0.copyload, %23 ]
  %.sroa.15.0208 = phi i8 [ %.sroa.15.1.lcssa, %._crit_edge ], [ %.sroa.15.0.copyload, %23 ]
  %.sroa.17.0207 = phi i8 [ %.sroa.17.1.lcssa, %._crit_edge ], [ %.sroa.17.0.copyload, %23 ]
  %.sroa.19.0206 = phi i8 [ %.sroa.19.1.lcssa, %._crit_edge ], [ %.sroa.19.0.copyload, %23 ]
  %.sroa.23.0205 = phi i8 [ %.sroa.23.1.lcssa, %._crit_edge ], [ %.sroa.23.0.copyload, %23 ]
  %.sroa.27.0204 = phi i8 [ %.sroa.27.1.lcssa, %._crit_edge ], [ %.sroa.27.0.copyload, %23 ]
  br i1 %.not162, label %32, label %28

28:                                               ; preds = %.lr.ph216
  %29 = getelementptr inbounds i8, ptr %.0146214, i64 1
  store i8 27, ptr %.0146214, align 1, !tbaa !18
  %30 = getelementptr inbounds i8, ptr %.0146214, i64 2
  store i8 35, ptr %29, align 1, !tbaa !18
  %31 = getelementptr inbounds i8, ptr %.0146214, i64 3
  store i8 54, ptr %30, align 1, !tbaa !18
  br label %32

32:                                               ; preds = %28, %.lr.ph216
  %.1147 = phi ptr [ %31, %28 ], [ %.0146214, %.lr.ph216 ]
  %33 = load i32, ptr %0, align 8, !tbaa !19
  %.not254 = icmp eq i32 %33, 0
  br i1 %.not254, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %32, %81
  %.2194 = phi ptr [ %.4, %81 ], [ %.1147, %32 ]
  %.sroa.29.1193 = phi i8 [ %.sroa.29.2, %81 ], [ %.sroa.29.0213, %32 ]
  %.1154192 = phi ptr [ %82, %81 ], [ %.0153212, %32 ]
  %.0157191 = phi i32 [ %83, %81 ], [ 0, %32 ]
  %.sroa.0.1190 = phi i8 [ %.sroa.0.2, %81 ], [ %.sroa.0.0210, %32 ]
  %.sroa.11.1189 = phi i8 [ %.sroa.11.2, %81 ], [ %.sroa.11.0209, %32 ]
  %.sroa.15.1188 = phi i8 [ %.sroa.15.2, %81 ], [ %.sroa.15.0208, %32 ]
  %.sroa.17.1187 = phi i8 [ %.sroa.17.2, %81 ], [ %.sroa.17.0207, %32 ]
  %.sroa.19.1186 = phi i8 [ %.sroa.19.2, %81 ], [ %.sroa.19.0206, %32 ]
  %.sroa.23.1185 = phi i8 [ %.sroa.23.2, %81 ], [ %.sroa.23.0205, %32 ]
  %.sroa.27.1184 = phi i8 [ %.sroa.27.2, %81 ], [ %.sroa.27.0204, %32 ]
  %34 = getelementptr inbounds i8, ptr %.1154192, i64 1
  %35 = load i8, ptr %34, align 1, !tbaa !20
  %36 = xor i8 %35, %.sroa.0.1190
  %37 = and i8 %36, 1
  %.not170 = icmp eq i8 %37, 0
  br i1 %.not170, label %38, label %73

38:                                               ; preds = %.lr.ph
  %39 = and i8 %.sroa.0.1190, 1
  %.not171 = icmp eq i8 %39, 0
  %40 = getelementptr inbounds i8, ptr %.1154192, i64 2
  %41 = load i8, ptr %40, align 1, !tbaa !18
  %42 = icmp eq i8 %.sroa.11.1189, %41
  br i1 %.not171, label %52, label %43

43:                                               ; preds = %38
  br i1 %42, label %44, label %73

44:                                               ; preds = %43
  %45 = getelementptr inbounds i8, ptr %.1154192, i64 3
  %46 = load i8, ptr %45, align 1, !tbaa !18
  %47 = icmp eq i8 %.sroa.15.1188, %46
  br i1 %47, label %48, label %73

48:                                               ; preds = %44
  %49 = getelementptr inbounds i8, ptr %.1154192, i64 4
  %50 = load i8, ptr %49, align 1, !tbaa !18
  %51 = icmp eq i8 %.sroa.17.1187, %50
  br i1 %51, label %53, label %73

52:                                               ; preds = %38
  br i1 %42, label %53, label %73

53:                                               ; preds = %52, %48
  %54 = getelementptr inbounds i8, ptr %.1154192, i64 5
  %55 = load i8, ptr %54, align 1, !tbaa !24
  %56 = xor i8 %55, %.sroa.19.1186
  %57 = and i8 %56, 1
  %.not172 = icmp eq i8 %57, 0
  br i1 %.not172, label %58, label %73

58:                                               ; preds = %53
  %59 = and i8 %.sroa.19.1186, 1
  %.not173 = icmp eq i8 %59, 0
  %60 = getelementptr inbounds i8, ptr %.1154192, i64 6
  %61 = load i8, ptr %60, align 1, !tbaa !18
  %62 = icmp eq i8 %.sroa.23.1185, %61
  br i1 %.not173, label %72, label %63

63:                                               ; preds = %58
  br i1 %62, label %64, label %73

64:                                               ; preds = %63
  %65 = getelementptr inbounds i8, ptr %.1154192, i64 7
  %66 = load i8, ptr %65, align 1, !tbaa !18
  %67 = icmp eq i8 %.sroa.27.1184, %66
  br i1 %67, label %68, label %73

68:                                               ; preds = %64
  %69 = getelementptr inbounds i8, ptr %.1154192, i64 8
  %70 = load i8, ptr %69, align 1, !tbaa !18
  %71 = icmp eq i8 %.sroa.29.1193, %70
  br i1 %71, label %76, label %73

72:                                               ; preds = %58
  br i1 %62, label %76, label %73

73:                                               ; preds = %72, %68, %64, %63, %53, %52, %48, %44, %43, %.lr.ph
  %.sroa.29.0.insert.ext = zext i8 %.sroa.29.1193 to i64
  %.sroa.29.0.insert.shift = shl nuw i64 %.sroa.29.0.insert.ext, 56
  %.sroa.27.0.insert.ext = zext i8 %.sroa.27.1184 to i64
  %.sroa.27.0.insert.shift = shl nuw nsw i64 %.sroa.27.0.insert.ext, 48
  %.sroa.27.0.insert.insert = or disjoint i64 %.sroa.29.0.insert.shift, %.sroa.27.0.insert.shift
  %.sroa.23.0.insert.ext = zext i8 %.sroa.23.1185 to i64
  %.sroa.23.0.insert.shift = shl nuw nsw i64 %.sroa.23.0.insert.ext, 40
  %.sroa.23.0.insert.insert = or disjoint i64 %.sroa.27.0.insert.insert, %.sroa.23.0.insert.shift
  %.sroa.19.0.insert.ext = zext i8 %.sroa.19.1186 to i64
  %.sroa.19.0.insert.shift = shl nuw nsw i64 %.sroa.19.0.insert.ext, 32
  %.sroa.19.0.insert.insert = or disjoint i64 %.sroa.23.0.insert.insert, %.sroa.19.0.insert.shift
  %.sroa.17.0.insert.ext = zext i8 %.sroa.17.1187 to i64
  %.sroa.17.0.insert.shift = shl nuw nsw i64 %.sroa.17.0.insert.ext, 24
  %.sroa.17.0.insert.insert = or disjoint i64 %.sroa.19.0.insert.insert, %.sroa.17.0.insert.shift
  %.sroa.15.0.insert.ext = zext i8 %.sroa.15.1188 to i64
  %.sroa.15.0.insert.shift = shl nuw nsw i64 %.sroa.15.0.insert.ext, 16
  %.sroa.11.0.insert.ext = zext i8 %.sroa.11.1189 to i64
  %.sroa.11.0.insert.shift = shl nuw nsw i64 %.sroa.11.0.insert.ext, 8
  %.sroa.11.0.insert.mask = or disjoint i64 %.sroa.17.0.insert.insert, %.sroa.15.0.insert.shift
  %.sroa.0.0.insert.ext = zext i8 %.sroa.0.1190 to i64
  %.sroa.0.0.insert.mask = or disjoint i64 %.sroa.11.0.insert.mask, %.sroa.11.0.insert.shift
  %.sroa.0.0.insert.insert = or i64 %.sroa.0.0.insert.mask, %.sroa.0.0.insert.ext
  %74 = load i64, ptr %34, align 1
  %75 = tail call ptr @itgl_generate_sgr(i64 %.sroa.0.0.insert.insert, i64 %74, ptr noundef %.2194)
  %.sroa.0.0.copyload59 = load i8, ptr %34, align 1, !tbaa !18
  %.sroa.11.0..sroa_idx = getelementptr inbounds i8, ptr %.1154192, i64 2
  %.sroa.11.0.copyload65 = load i8, ptr %.sroa.11.0..sroa_idx, align 1
  %.sroa.15.0..sroa_idx = getelementptr inbounds i8, ptr %.1154192, i64 3
  %.sroa.15.0.copyload76 = load i8, ptr %.sroa.15.0..sroa_idx, align 1
  %.sroa.17.0..sroa_idx = getelementptr inbounds i8, ptr %.1154192, i64 4
  %.sroa.17.0.copyload85 = load i8, ptr %.sroa.17.0..sroa_idx, align 1, !tbaa !18
  %.sroa.19.0..sroa_idx = getelementptr inbounds i8, ptr %.1154192, i64 5
  %.sroa.19.0.copyload94 = load i8, ptr %.sroa.19.0..sroa_idx, align 1, !tbaa !18
  %.sroa.23.0..sroa_idx = getelementptr inbounds i8, ptr %.1154192, i64 6
  %.sroa.23.0.copyload105 = load i8, ptr %.sroa.23.0..sroa_idx, align 1
  %.sroa.27.0..sroa_idx = getelementptr inbounds i8, ptr %.1154192, i64 7
  %.sroa.27.0.copyload116 = load i8, ptr %.sroa.27.0..sroa_idx, align 1
  %.sroa.29.0..sroa_idx = getelementptr inbounds i8, ptr %.1154192, i64 8
  %.sroa.29.0.copyload125 = load i8, ptr %.sroa.29.0..sroa_idx, align 1, !tbaa !18
  br label %76

76:                                               ; preds = %73, %72, %68
  %.sroa.27.2 = phi i8 [ %.sroa.27.0.copyload116, %73 ], [ %.sroa.27.1184, %68 ], [ %.sroa.27.1184, %72 ]
  %.sroa.23.2 = phi i8 [ %.sroa.23.0.copyload105, %73 ], [ %.sroa.23.1185, %68 ], [ %.sroa.23.1185, %72 ]
  %.sroa.19.2 = phi i8 [ %.sroa.19.0.copyload94, %73 ], [ %.sroa.19.1186, %68 ], [ %.sroa.19.1186, %72 ]
  %.sroa.17.2 = phi i8 [ %.sroa.17.0.copyload85, %73 ], [ %.sroa.17.1187, %68 ], [ %.sroa.17.1187, %72 ]
  %.sroa.15.2 = phi i8 [ %.sroa.15.0.copyload76, %73 ], [ %.sroa.15.1188, %68 ], [ %.sroa.15.1188, %72 ]
  %.sroa.11.2 = phi i8 [ %.sroa.11.0.copyload65, %73 ], [ %.sroa.11.1189, %68 ], [ %.sroa.11.1189, %72 ]
  %.sroa.0.2 = phi i8 [ %.sroa.0.0.copyload59, %73 ], [ %.sroa.0.1190, %68 ], [ %.sroa.0.1190, %72 ]
  %.sroa.29.2 = phi i8 [ %.sroa.29.0.copyload125, %73 ], [ %.sroa.29.1193, %68 ], [ %.sroa.29.1193, %72 ]
  %.3 = phi ptr [ %75, %73 ], [ %.2194, %68 ], [ %.2194, %72 ]
  %77 = load i8, ptr %.1154192, align 1, !tbaa !25
  %78 = getelementptr inbounds i8, ptr %.3, i64 1
  store i8 %77, ptr %.3, align 1, !tbaa !18
  br i1 %.not161, label %81, label %79

79:                                               ; preds = %76
  %80 = getelementptr inbounds i8, ptr %.3, i64 2
  store i8 %77, ptr %78, align 1, !tbaa !18
  br label %81

81:                                               ; preds = %79, %76
  %.4 = phi ptr [ %80, %79 ], [ %78, %76 ]
  %82 = getelementptr inbounds i8, ptr %.1154192, i64 9
  %83 = add nuw i32 %.0157191, 1
  %84 = load i32, ptr %0, align 8, !tbaa !19
  %85 = icmp ult i32 %83, %84
  br i1 %85, label %.lr.ph, label %._crit_edge, !llvm.loop !26

._crit_edge:                                      ; preds = %81, %32
  %.sroa.27.1.lcssa = phi i8 [ %.sroa.27.0204, %32 ], [ %.sroa.27.2, %81 ]
  %.sroa.23.1.lcssa = phi i8 [ %.sroa.23.0205, %32 ], [ %.sroa.23.2, %81 ]
  %.sroa.19.1.lcssa = phi i8 [ %.sroa.19.0206, %32 ], [ %.sroa.19.2, %81 ]
  %.sroa.17.1.lcssa = phi i8 [ %.sroa.17.0207, %32 ], [ %.sroa.17.2, %81 ]
  %.sroa.15.1.lcssa = phi i8 [ %.sroa.15.0208, %32 ], [ %.sroa.15.2, %81 ]
  %.sroa.11.1.lcssa = phi i8 [ %.sroa.11.0209, %32 ], [ %.sroa.11.2, %81 ]
  %.sroa.0.1.lcssa = phi i8 [ %.sroa.0.0210, %32 ], [ %.sroa.0.2, %81 ]
  %.1154.lcssa = phi ptr [ %.0153212, %32 ], [ %82, %81 ]
  %.sroa.29.1.lcssa = phi i8 [ %.sroa.29.0213, %32 ], [ %.sroa.29.2, %81 ]
  %.2.lcssa = phi ptr [ %.1147, %32 ], [ %.4, %81 ]
  %86 = getelementptr inbounds i8, ptr %.2.lcssa, i64 1
  store i8 10, ptr %.2.lcssa, align 1, !tbaa !18
  %87 = add nuw i32 %.0159211, 1
  %88 = load i32, ptr %26, align 4, !tbaa !16
  %89 = icmp ult i32 %87, %88
  br i1 %89, label %.lr.ph216, label %._crit_edge217, !llvm.loop !28

._crit_edge217:                                   ; preds = %._crit_edge, %23
  %.0146.lcssa = phi ptr [ %25, %23 ], [ %86, %._crit_edge ]
  store <4 x i8> <i8 27, i8 91, i8 48, i8 109>, ptr %.0146.lcssa, align 1, !tbaa !18
  %90 = load ptr, ptr %24, align 8, !tbaa !17
  %91 = load ptr, ptr @stdout, align 8, !tbaa !12
  %92 = tail call i32 @fputs(ptr noundef %90, ptr noundef %91)
  %.not169 = icmp eq i32 %92, -1
  br i1 %.not169, label %.loopexit, label %168

93:                                               ; preds = %._crit_edge231
  %94 = add nuw i32 %.1160248, 1
  %95 = load i32, ptr %21, align 4, !tbaa !16
  %96 = icmp ult i32 %94, %95
  br i1 %96, label %.lr.ph251, label %._crit_edge252, !llvm.loop !29

.lr.ph251:                                        ; preds = %.preheader, %93
  %.sroa.29.3250 = phi i8 [ %.sroa.29.4.lcssa, %93 ], [ %.sroa.29.0.copyload, %.preheader ]
  %.2155249 = phi ptr [ %.3156.lcssa, %93 ], [ %14, %.preheader ]
  %.1160248 = phi i32 [ %94, %93 ], [ 0, %.preheader ]
  %.sroa.0.3247 = phi i8 [ %.sroa.0.4.lcssa, %93 ], [ %.sroa.0.0.copyload, %.preheader ]
  %.sroa.11.3246 = phi i8 [ %.sroa.11.4.lcssa, %93 ], [ %.sroa.11.0.copyload, %.preheader ]
  %.sroa.15.3245 = phi i8 [ %.sroa.15.4.lcssa, %93 ], [ %.sroa.15.0.copyload, %.preheader ]
  %.sroa.17.3244 = phi i8 [ %.sroa.17.4.lcssa, %93 ], [ %.sroa.17.0.copyload, %.preheader ]
  %.sroa.19.3243 = phi i8 [ %.sroa.19.4.lcssa, %93 ], [ %.sroa.19.0.copyload, %.preheader ]
  %.sroa.23.3242 = phi i8 [ %.sroa.23.4.lcssa, %93 ], [ %.sroa.23.0.copyload, %.preheader ]
  %.sroa.27.3241 = phi i8 [ %.sroa.27.4.lcssa, %93 ], [ %.sroa.27.0.copyload, %.preheader ]
  br i1 %.not162, label %101, label %97

97:                                               ; preds = %.lr.ph251
  %98 = load ptr, ptr @stdout, align 8, !tbaa !12
  %99 = call i32 @fputs(ptr noundef nonnull @.str.4, ptr noundef %98)
  %100 = icmp eq i32 %99, -1
  br i1 %100, label %.loopexit, label %101, !prof !13

101:                                              ; preds = %97, %.lr.ph251
  %102 = load i32, ptr %0, align 8, !tbaa !19
  %.not256 = icmp eq i32 %102, 0
  br i1 %.not256, label %._crit_edge231, label %.lr.ph230

.lr.ph230:                                        ; preds = %101, %158
  %.sroa.29.4228 = phi i8 [ %.sroa.29.5, %158 ], [ %.sroa.29.3250, %101 ]
  %.3156227 = phi ptr [ %159, %158 ], [ %.2155249, %101 ]
  %.1158226 = phi i32 [ %160, %158 ], [ 0, %101 ]
  %.sroa.0.4225 = phi i8 [ %.sroa.0.5, %158 ], [ %.sroa.0.3247, %101 ]
  %.sroa.11.4224 = phi i8 [ %.sroa.11.5, %158 ], [ %.sroa.11.3246, %101 ]
  %.sroa.15.4223 = phi i8 [ %.sroa.15.5, %158 ], [ %.sroa.15.3245, %101 ]
  %.sroa.17.4222 = phi i8 [ %.sroa.17.5, %158 ], [ %.sroa.17.3244, %101 ]
  %.sroa.19.4221 = phi i8 [ %.sroa.19.5, %158 ], [ %.sroa.19.3243, %101 ]
  %.sroa.23.4220 = phi i8 [ %.sroa.23.5, %158 ], [ %.sroa.23.3242, %101 ]
  %.sroa.27.4219 = phi i8 [ %.sroa.27.5, %158 ], [ %.sroa.27.3241, %101 ]
  %103 = getelementptr inbounds i8, ptr %.3156227, i64 1
  %104 = load i8, ptr %103, align 1, !tbaa !20
  %105 = xor i8 %104, %.sroa.0.4225
  %106 = and i8 %105, 1
  %.not164 = icmp eq i8 %106, 0
  br i1 %.not164, label %107, label %142

107:                                              ; preds = %.lr.ph230
  %108 = and i8 %.sroa.0.4225, 1
  %.not165 = icmp eq i8 %108, 0
  %109 = getelementptr inbounds i8, ptr %.3156227, i64 2
  %110 = load i8, ptr %109, align 1, !tbaa !18
  %111 = icmp eq i8 %.sroa.11.4224, %110
  br i1 %.not165, label %121, label %112

112:                                              ; preds = %107
  br i1 %111, label %113, label %142

113:                                              ; preds = %112
  %114 = getelementptr inbounds i8, ptr %.3156227, i64 3
  %115 = load i8, ptr %114, align 1, !tbaa !18
  %116 = icmp eq i8 %.sroa.15.4223, %115
  br i1 %116, label %117, label %142

117:                                              ; preds = %113
  %118 = getelementptr inbounds i8, ptr %.3156227, i64 4
  %119 = load i8, ptr %118, align 1, !tbaa !18
  %120 = icmp eq i8 %.sroa.17.4222, %119
  br i1 %120, label %122, label %142

121:                                              ; preds = %107
  br i1 %111, label %122, label %142

122:                                              ; preds = %121, %117
  %123 = getelementptr inbounds i8, ptr %.3156227, i64 5
  %124 = load i8, ptr %123, align 1, !tbaa !24
  %125 = xor i8 %124, %.sroa.19.4221
  %126 = and i8 %125, 1
  %.not166 = icmp eq i8 %126, 0
  br i1 %.not166, label %127, label %142

127:                                              ; preds = %122
  %128 = and i8 %.sroa.19.4221, 1
  %.not167 = icmp eq i8 %128, 0
  %129 = getelementptr inbounds i8, ptr %.3156227, i64 6
  %130 = load i8, ptr %129, align 1, !tbaa !18
  %131 = icmp eq i8 %.sroa.23.4220, %130
  br i1 %.not167, label %141, label %132

132:                                              ; preds = %127
  br i1 %131, label %133, label %142

133:                                              ; preds = %132
  %134 = getelementptr inbounds i8, ptr %.3156227, i64 7
  %135 = load i8, ptr %134, align 1, !tbaa !18
  %136 = icmp eq i8 %.sroa.27.4219, %135
  br i1 %136, label %137, label %142

137:                                              ; preds = %133
  %138 = getelementptr inbounds i8, ptr %.3156227, i64 8
  %139 = load i8, ptr %138, align 1, !tbaa !18
  %140 = icmp eq i8 %.sroa.29.4228, %139
  br i1 %140, label %147, label %142

141:                                              ; preds = %127
  br i1 %131, label %147, label %142

142:                                              ; preds = %141, %137, %133, %132, %122, %121, %117, %113, %112, %.lr.ph230
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #4
  %.sroa.29.0.insert.ext127 = zext i8 %.sroa.29.4228 to i64
  %.sroa.29.0.insert.shift128 = shl nuw i64 %.sroa.29.0.insert.ext127, 56
  %.sroa.27.0.insert.ext118 = zext i8 %.sroa.27.4219 to i64
  %.sroa.27.0.insert.shift119 = shl nuw nsw i64 %.sroa.27.0.insert.ext118, 48
  %.sroa.27.0.insert.insert121 = or disjoint i64 %.sroa.29.0.insert.shift128, %.sroa.27.0.insert.shift119
  %.sroa.23.0.insert.ext107 = zext i8 %.sroa.23.4220 to i64
  %.sroa.23.0.insert.shift108 = shl nuw nsw i64 %.sroa.23.0.insert.ext107, 40
  %.sroa.23.0.insert.insert110 = or disjoint i64 %.sroa.27.0.insert.insert121, %.sroa.23.0.insert.shift108
  %.sroa.19.0.insert.ext96 = zext i8 %.sroa.19.4221 to i64
  %.sroa.19.0.insert.shift97 = shl nuw nsw i64 %.sroa.19.0.insert.ext96, 32
  %.sroa.19.0.insert.insert99 = or disjoint i64 %.sroa.23.0.insert.insert110, %.sroa.19.0.insert.shift97
  %.sroa.17.0.insert.ext87 = zext i8 %.sroa.17.4222 to i64
  %.sroa.17.0.insert.shift88 = shl nuw nsw i64 %.sroa.17.0.insert.ext87, 24
  %.sroa.17.0.insert.insert90 = or disjoint i64 %.sroa.19.0.insert.insert99, %.sroa.17.0.insert.shift88
  %.sroa.15.0.insert.ext78 = zext i8 %.sroa.15.4223 to i64
  %.sroa.15.0.insert.shift79 = shl nuw nsw i64 %.sroa.15.0.insert.ext78, 16
  %.sroa.11.0.insert.ext67 = zext i8 %.sroa.11.4224 to i64
  %.sroa.11.0.insert.shift68 = shl nuw nsw i64 %.sroa.11.0.insert.ext67, 8
  %.sroa.11.0.insert.mask69 = or disjoint i64 %.sroa.17.0.insert.insert90, %.sroa.15.0.insert.shift79
  %.sroa.0.0.insert.ext61 = zext i8 %.sroa.0.4225 to i64
  %.sroa.0.0.insert.mask62 = or disjoint i64 %.sroa.11.0.insert.mask69, %.sroa.11.0.insert.shift68
  %.sroa.0.0.insert.insert63 = or i64 %.sroa.0.0.insert.mask62, %.sroa.0.0.insert.ext61
  %143 = load i64, ptr %103, align 1
  %144 = call ptr @itgl_generate_sgr(i64 %.sroa.0.0.insert.insert63, i64 %143, ptr noundef nonnull %2)
  store i8 0, ptr %144, align 1, !tbaa !18
  %.sroa.0.0.copyload64 = load i8, ptr %103, align 1, !tbaa !18
  %.sroa.11.0..sroa_idx71 = getelementptr inbounds i8, ptr %.3156227, i64 2
  %.sroa.11.0.copyload72 = load i8, ptr %.sroa.11.0..sroa_idx71, align 1
  %.sroa.15.0..sroa_idx82 = getelementptr inbounds i8, ptr %.3156227, i64 3
  %.sroa.15.0.copyload83 = load i8, ptr %.sroa.15.0..sroa_idx82, align 1
  %.sroa.17.0..sroa_idx91 = getelementptr inbounds i8, ptr %.3156227, i64 4
  %.sroa.17.0.copyload92 = load i8, ptr %.sroa.17.0..sroa_idx91, align 1, !tbaa !18
  %.sroa.19.0..sroa_idx100 = getelementptr inbounds i8, ptr %.3156227, i64 5
  %.sroa.19.0.copyload101 = load i8, ptr %.sroa.19.0..sroa_idx100, align 1, !tbaa !18
  %.sroa.23.0..sroa_idx111 = getelementptr inbounds i8, ptr %.3156227, i64 6
  %.sroa.23.0.copyload112 = load i8, ptr %.sroa.23.0..sroa_idx111, align 1
  %.sroa.27.0..sroa_idx122 = getelementptr inbounds i8, ptr %.3156227, i64 7
  %.sroa.27.0.copyload123 = load i8, ptr %.sroa.27.0..sroa_idx122, align 1
  %.sroa.29.0..sroa_idx131 = getelementptr inbounds i8, ptr %.3156227, i64 8
  %.sroa.29.0.copyload132 = load i8, ptr %.sroa.29.0..sroa_idx131, align 1, !tbaa !18
  %145 = load ptr, ptr @stdout, align 8, !tbaa !12
  %146 = call i32 @fputs(ptr noundef nonnull %2, ptr noundef %145)
  %.not168 = icmp eq i32 %146, -1
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #4
  br i1 %.not168, label %.loopexit, label %147

147:                                              ; preds = %137, %141, %142
  %.sroa.27.5 = phi i8 [ %.sroa.27.0.copyload123, %142 ], [ %.sroa.27.4219, %137 ], [ %.sroa.27.4219, %141 ]
  %.sroa.23.5 = phi i8 [ %.sroa.23.0.copyload112, %142 ], [ %.sroa.23.4220, %137 ], [ %.sroa.23.4220, %141 ]
  %.sroa.19.5 = phi i8 [ %.sroa.19.0.copyload101, %142 ], [ %.sroa.19.4221, %137 ], [ %.sroa.19.4221, %141 ]
  %.sroa.17.5 = phi i8 [ %.sroa.17.0.copyload92, %142 ], [ %.sroa.17.4222, %137 ], [ %.sroa.17.4222, %141 ]
  %.sroa.15.5 = phi i8 [ %.sroa.15.0.copyload83, %142 ], [ %.sroa.15.4223, %137 ], [ %.sroa.15.4223, %141 ]
  %.sroa.11.5 = phi i8 [ %.sroa.11.0.copyload72, %142 ], [ %.sroa.11.4224, %137 ], [ %.sroa.11.4224, %141 ]
  %.sroa.0.5 = phi i8 [ %.sroa.0.0.copyload64, %142 ], [ %.sroa.0.4225, %137 ], [ %.sroa.0.4225, %141 ]
  %.sroa.29.5 = phi i8 [ %.sroa.29.0.copyload132, %142 ], [ %.sroa.29.4228, %137 ], [ %.sroa.29.4228, %141 ]
  %148 = load i8, ptr %.3156227, align 1, !tbaa !25
  %149 = sext i8 %148 to i32
  %150 = call i32 @putchar(i32 noundef %149)
  %151 = icmp eq i32 %150, -1
  br i1 %151, label %.loopexit, label %152, !prof !13

152:                                              ; preds = %147
  br i1 %.not161, label %158, label %153

153:                                              ; preds = %152
  %154 = load i8, ptr %.3156227, align 1, !tbaa !25
  %155 = sext i8 %154 to i32
  %156 = call i32 @putchar(i32 noundef %155)
  %157 = icmp eq i32 %156, -1
  br i1 %157, label %.loopexit, label %158, !prof !13

158:                                              ; preds = %153, %152
  %159 = getelementptr inbounds i8, ptr %.3156227, i64 9
  %160 = add nuw i32 %.1158226, 1
  %161 = load i32, ptr %0, align 8, !tbaa !19
  %162 = icmp ult i32 %160, %161
  br i1 %162, label %.lr.ph230, label %._crit_edge231, !llvm.loop !30

._crit_edge231:                                   ; preds = %158, %101
  %.sroa.27.4.lcssa = phi i8 [ %.sroa.27.3241, %101 ], [ %.sroa.27.5, %158 ]
  %.sroa.23.4.lcssa = phi i8 [ %.sroa.23.3242, %101 ], [ %.sroa.23.5, %158 ]
  %.sroa.19.4.lcssa = phi i8 [ %.sroa.19.3243, %101 ], [ %.sroa.19.5, %158 ]
  %.sroa.17.4.lcssa = phi i8 [ %.sroa.17.3244, %101 ], [ %.sroa.17.5, %158 ]
  %.sroa.15.4.lcssa = phi i8 [ %.sroa.15.3245, %101 ], [ %.sroa.15.5, %158 ]
  %.sroa.11.4.lcssa = phi i8 [ %.sroa.11.3246, %101 ], [ %.sroa.11.5, %158 ]
  %.sroa.0.4.lcssa = phi i8 [ %.sroa.0.3247, %101 ], [ %.sroa.0.5, %158 ]
  %.3156.lcssa = phi ptr [ %.2155249, %101 ], [ %159, %158 ]
  %.sroa.29.4.lcssa = phi i8 [ %.sroa.29.3250, %101 ], [ %.sroa.29.5, %158 ]
  %163 = call i32 @putchar(i32 noundef 10)
  %164 = icmp eq i32 %163, -1
  br i1 %164, label %.loopexit, label %93, !prof !13

._crit_edge252:                                   ; preds = %93, %.preheader
  %165 = load ptr, ptr @stdout, align 8, !tbaa !12
  %166 = call i32 @fputs(ptr noundef nonnull @.str.5, ptr noundef %165)
  %167 = icmp eq i32 %166, -1
  br i1 %167, label %.loopexit, label %168, !prof !13

168:                                              ; preds = %._crit_edge217, %._crit_edge252
  %169 = load ptr, ptr @stdout, align 8, !tbaa !12
  %170 = call i32 @fflush(ptr noundef %169)
  %171 = icmp eq i32 %170, -1
  %. = sext i1 %171 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %97, %._crit_edge231, %142, %147, %153, %._crit_edge217, %._crit_edge252, %168, %7
  %.6 = phi i32 [ -1, %7 ], [ -1, %._crit_edge217 ], [ -1, %._crit_edge252 ], [ %., %168 ], [ -1, %153 ], [ -1, %147 ], [ -1, %142 ], [ -1, %._crit_edge231 ], [ -1, %97 ]
  ret i32 %.6
}

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

; Function Attrs: inlinehint nofree nounwind uwtable
declare noundef i32 @putchar(i32 noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nofree 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 = { inlinehint nofree nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !8, i64 53}
!6 = !{!"TGL", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !7, i64 48, !11, i64 52, !8, i64 53}
!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 = !{!10, !10, i64 0}
!13 = !{!"branch_weights", !"expected", i32 1, i32 2000}
!14 = !{!6, !10, i64 24}
!15 = !{!6, !7, i64 48}
!16 = !{!6, !7, i64 4}
!17 = !{!6, !10, i64 40}
!18 = !{!8, !8, i64 0}
!19 = !{!6, !7, i64 0}
!20 = !{!21, !8, i64 1}
!21 = !{!"Pixel", !8, i64 0, !22, i64 1}
!22 = !{!"TGLPixFmt", !23, i64 0, !23, i64 4}
!23 = !{!"TGLFmt", !8, i64 0, !8, i64 1}
!24 = !{!21, !8, i64 5}
!25 = !{!21, !8, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = distinct !{!29, !27}
!30 = distinct !{!30, !27}


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