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

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

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

; Function Attrs: 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

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

; Function Attrs: nounwind uwtable
define dso_local void @tgl_line(ptr noundef %0, i64 %1, i64 %2, i64 %3, i64 %4, ptr noundef %5, ptr noundef %6) #3 {
  %8 = alloca %struct.TGLVert, align 4
  %9 = alloca %struct.TGLVert, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %struct.TGLVert, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i8, align 1
  %21 = alloca %struct.TGLPixFmt, align 1
  %22 = alloca %struct.Pixel, align 1
  %23 = alloca %struct.Pixel, align 1
  %24 = alloca %struct.TGLVert, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i8, align 1
  %32 = alloca %struct.TGLPixFmt, align 1
  %33 = alloca %struct.Pixel, align 1
  %34 = alloca %struct.Pixel, align 1
  %35 = getelementptr inbounds { i64, i64 }, ptr %8, i32 0, i32 0
  store i64 %1, ptr %35, align 4
  %36 = getelementptr inbounds { i64, i64 }, ptr %8, i32 0, i32 1
  store i64 %2, ptr %36, align 4
  %37 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 0
  store i64 %3, ptr %37, align 4
  %38 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 1
  store i64 %4, ptr %38, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %5, ptr %11, align 8, !tbaa !5
  store ptr %6, ptr %12, align 8, !tbaa !5
  %39 = load ptr, ptr %10, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %41 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  call void @itgl_clip(ptr noundef %39, ptr noundef %40, ptr noundef %41)
  %42 = load ptr, ptr %10, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %44 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  call void @itgl_clip(ptr noundef %42, ptr noundef %43, ptr noundef %44)
  %45 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %46 = load i32, ptr %45, align 4, !tbaa !9
  %47 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %48 = load i32, ptr %47, align 4, !tbaa !9
  %49 = sub nsw i32 %46, %48
  %50 = call i32 @llvm.abs.i32(i32 %49, i1 true)
  %51 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %52 = load i32, ptr %51, align 4, !tbaa !13
  %53 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %54 = load i32, ptr %53, align 4, !tbaa !13
  %55 = sub nsw i32 %52, %54
  %56 = call i32 @llvm.abs.i32(i32 %55, i1 true)
  %57 = icmp slt i32 %50, %56
  br i1 %57, label %58, label %319

58:                                               ; preds = %7
  %59 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %60 = load i32, ptr %59, align 4, !tbaa !13
  %61 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %62 = load i32, ptr %61, align 4, !tbaa !13
  %63 = icmp sgt i32 %60, %62
  br i1 %63, label %64, label %67

64:                                               ; preds = %58
  br label %65

65:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 4 %9, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %8, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 4 %13, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #5
  br label %66

66:                                               ; preds = %65
  br label %67

67:                                               ; preds = %66, %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %68 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %69 = load i32, ptr %68, align 4, !tbaa !13
  %70 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %71 = load i32, ptr %70, align 4, !tbaa !13
  %72 = sub nsw i32 %69, %71
  store i32 %72, ptr %14, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %73 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %74 = load i32, ptr %73, align 4, !tbaa !9
  %75 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %76 = load i32, ptr %75, align 4, !tbaa !9
  %77 = sub nsw i32 %74, %76
  store i32 %77, ptr %15, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %78 = load i32, ptr %15, align 4, !tbaa !15
  %79 = icmp sgt i32 %78, 0
  br i1 %79, label %80, label %81

80:                                               ; preds = %67
  store i32 1, ptr %16, align 4, !tbaa !15
  br label %84

81:                                               ; preds = %67
  store i32 -1, ptr %16, align 4, !tbaa !15
  %82 = load i32, ptr %15, align 4, !tbaa !15
  %83 = mul nsw i32 %82, -1
  store i32 %83, ptr %15, align 4, !tbaa !15
  br label %84

84:                                               ; preds = %81, %80
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %85 = load i32, ptr %15, align 4, !tbaa !15
  %86 = load i32, ptr %15, align 4, !tbaa !15
  %87 = add nsw i32 %85, %86
  %88 = load i32, ptr %14, align 4, !tbaa !15
  %89 = sub nsw i32 %87, %88
  store i32 %89, ptr %17, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %90 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %91 = load i32, ptr %90, align 4, !tbaa !9
  store i32 %91, ptr %18, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %92 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %93 = load i32, ptr %92, align 4, !tbaa !13
  store i32 %93, ptr %19, align 4, !tbaa !15
  br label %94

94:                                               ; preds = %315, %84
  %95 = load i32, ptr %19, align 4, !tbaa !15
  %96 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %97 = load i32, ptr %96, align 4, !tbaa !13
  %98 = icmp sle i32 %95, %97
  br i1 %98, label %99, label %318

99:                                               ; preds = %94
  br label %100

100:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %101 = load ptr, ptr %10, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.TGL, ptr %101, i32 0, i32 9
  %103 = load i8, ptr %102, align 4, !tbaa !18, !range !21, !noundef !22
  %104 = trunc i8 %103 to i1
  br i1 %104, label %166, label %105

105:                                              ; preds = %100
  %106 = load ptr, ptr %11, align 8, !tbaa !5
  %107 = load i32, ptr %19, align 4, !tbaa !15
  %108 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %109 = load i32, ptr %108, align 4, !tbaa !13
  %110 = sub nsw i32 %107, %109
  %111 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 3
  %112 = load i8, ptr %111, align 4, !tbaa !23
  %113 = zext i8 %112 to i32
  %114 = mul nsw i32 %110, %113
  %115 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %116 = load i32, ptr %115, align 4, !tbaa !13
  %117 = load i32, ptr %19, align 4, !tbaa !15
  %118 = sub nsw i32 %116, %117
  %119 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 3
  %120 = load i8, ptr %119, align 4, !tbaa !23
  %121 = zext i8 %120 to i32
  %122 = mul nsw i32 %118, %121
  %123 = add nsw i32 %114, %122
  %124 = load i32, ptr %14, align 4, !tbaa !15
  %125 = sdiv i32 %123, %124
  %126 = trunc i32 %125 to i8
  %127 = load i32, ptr %19, align 4, !tbaa !15
  %128 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %129 = load i32, ptr %128, align 4, !tbaa !13
  %130 = sub nsw i32 %127, %129
  %131 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 4
  %132 = load i8, ptr %131, align 1, !tbaa !24
  %133 = zext i8 %132 to i32
  %134 = mul nsw i32 %130, %133
  %135 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %136 = load i32, ptr %135, align 4, !tbaa !13
  %137 = load i32, ptr %19, align 4, !tbaa !15
  %138 = sub nsw i32 %136, %137
  %139 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 4
  %140 = load i8, ptr %139, align 1, !tbaa !24
  %141 = zext i8 %140 to i32
  %142 = mul nsw i32 %138, %141
  %143 = add nsw i32 %134, %142
  %144 = load i32, ptr %14, align 4, !tbaa !15
  %145 = sdiv i32 %143, %144
  %146 = trunc i32 %145 to i8
  %147 = load ptr, ptr %12, align 8, !tbaa !5
  call void %106(i8 noundef zeroext %126, i8 noundef zeroext %146, ptr noundef %21, ptr noundef %20, ptr noundef %147)
  br label %148

148:                                              ; preds = %105
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.TGL, ptr %149, i32 0, i32 5
  %151 = load ptr, ptr %150, align 8, !tbaa !25
  %152 = load i32, ptr %18, align 4, !tbaa !15
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.TGL, ptr %153, i32 0, i32 0
  %155 = load i32, ptr %154, align 8, !tbaa !26
  %156 = mul i32 %152, %155
  %157 = load i32, ptr %19, align 4, !tbaa !15
  %158 = add i32 %156, %157
  %159 = zext i32 %158 to i64
  %160 = getelementptr inbounds %struct.Pixel, ptr %151, i64 %159
  %161 = getelementptr inbounds %struct.Pixel, ptr %22, i32 0, i32 0
  %162 = load i8, ptr %20, align 1, !tbaa !17
  store i8 %162, ptr %161, align 1, !tbaa !27
  %163 = getelementptr inbounds %struct.Pixel, ptr %22, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %163, ptr align 1 %21, i64 8, i1 false), !tbaa.struct !31
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %160, ptr align 1 %22, i64 9, i1 false), !tbaa.struct !32
  br label %164

164:                                              ; preds = %148
  br label %165

165:                                              ; preds = %164
  br label %293

166:                                              ; preds = %100
  %167 = load i32, ptr %19, align 4, !tbaa !15
  %168 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %169 = load i32, ptr %168, align 4, !tbaa !13
  %170 = sub nsw i32 %167, %169
  %171 = sitofp i32 %170 to float
  %172 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 2
  %173 = load float, ptr %172, align 4, !tbaa !33
  %174 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %175 = load i32, ptr %174, align 4, !tbaa !13
  %176 = load i32, ptr %19, align 4, !tbaa !15
  %177 = sub nsw i32 %175, %176
  %178 = sitofp i32 %177 to float
  %179 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 2
  %180 = load float, ptr %179, align 4, !tbaa !33
  %181 = fmul float %178, %180
  %182 = call float @llvm.fmuladd.f32(float %171, float %173, float %181)
  %183 = load i32, ptr %14, align 4, !tbaa !15
  %184 = sitofp i32 %183 to float
  %185 = fdiv float %182, %184
  %186 = load ptr, ptr %10, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.TGL, ptr %186, i32 0, i32 6
  %188 = load ptr, ptr %187, align 8, !tbaa !34
  %189 = load i32, ptr %18, align 4, !tbaa !15
  %190 = load ptr, ptr %10, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.TGL, ptr %190, i32 0, i32 0
  %192 = load i32, ptr %191, align 8, !tbaa !26
  %193 = mul i32 %189, %192
  %194 = load i32, ptr %19, align 4, !tbaa !15
  %195 = add i32 %193, %194
  %196 = zext i32 %195 to i64
  %197 = getelementptr inbounds float, ptr %188, i64 %196
  %198 = load float, ptr %197, align 4, !tbaa !16
  %199 = fcmp oge float %185, %198
  br i1 %199, label %200, label %292

200:                                              ; preds = %166
  %201 = load ptr, ptr %11, align 8, !tbaa !5
  %202 = load i32, ptr %19, align 4, !tbaa !15
  %203 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %204 = load i32, ptr %203, align 4, !tbaa !13
  %205 = sub nsw i32 %202, %204
  %206 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 3
  %207 = load i8, ptr %206, align 4, !tbaa !23
  %208 = zext i8 %207 to i32
  %209 = mul nsw i32 %205, %208
  %210 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %211 = load i32, ptr %210, align 4, !tbaa !13
  %212 = load i32, ptr %19, align 4, !tbaa !15
  %213 = sub nsw i32 %211, %212
  %214 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 3
  %215 = load i8, ptr %214, align 4, !tbaa !23
  %216 = zext i8 %215 to i32
  %217 = mul nsw i32 %213, %216
  %218 = add nsw i32 %209, %217
  %219 = load i32, ptr %14, align 4, !tbaa !15
  %220 = sdiv i32 %218, %219
  %221 = trunc i32 %220 to i8
  %222 = load i32, ptr %19, align 4, !tbaa !15
  %223 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %224 = load i32, ptr %223, align 4, !tbaa !13
  %225 = sub nsw i32 %222, %224
  %226 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 4
  %227 = load i8, ptr %226, align 1, !tbaa !24
  %228 = zext i8 %227 to i32
  %229 = mul nsw i32 %225, %228
  %230 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %231 = load i32, ptr %230, align 4, !tbaa !13
  %232 = load i32, ptr %19, align 4, !tbaa !15
  %233 = sub nsw i32 %231, %232
  %234 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 4
  %235 = load i8, ptr %234, align 1, !tbaa !24
  %236 = zext i8 %235 to i32
  %237 = mul nsw i32 %233, %236
  %238 = add nsw i32 %229, %237
  %239 = load i32, ptr %14, align 4, !tbaa !15
  %240 = sdiv i32 %238, %239
  %241 = trunc i32 %240 to i8
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  call void %201(i8 noundef zeroext %221, i8 noundef zeroext %241, ptr noundef %21, ptr noundef %20, ptr noundef %242)
  br label %243

243:                                              ; preds = %200
  %244 = load ptr, ptr %10, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.TGL, ptr %244, i32 0, i32 5
  %246 = load ptr, ptr %245, align 8, !tbaa !25
  %247 = load i32, ptr %18, align 4, !tbaa !15
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.TGL, ptr %248, i32 0, i32 0
  %250 = load i32, ptr %249, align 8, !tbaa !26
  %251 = mul i32 %247, %250
  %252 = load i32, ptr %19, align 4, !tbaa !15
  %253 = add i32 %251, %252
  %254 = zext i32 %253 to i64
  %255 = getelementptr inbounds %struct.Pixel, ptr %246, i64 %254
  %256 = getelementptr inbounds %struct.Pixel, ptr %23, i32 0, i32 0
  %257 = load i8, ptr %20, align 1, !tbaa !17
  store i8 %257, ptr %256, align 1, !tbaa !27
  %258 = getelementptr inbounds %struct.Pixel, ptr %23, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %258, ptr align 1 %21, i64 8, i1 false), !tbaa.struct !31
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %255, ptr align 1 %23, i64 9, i1 false), !tbaa.struct !32
  br label %259

259:                                              ; preds = %243
  br label %260

260:                                              ; preds = %259
  %261 = load i32, ptr %19, align 4, !tbaa !15
  %262 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %263 = load i32, ptr %262, align 4, !tbaa !13
  %264 = sub nsw i32 %261, %263
  %265 = sitofp i32 %264 to float
  %266 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 2
  %267 = load float, ptr %266, align 4, !tbaa !33
  %268 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %269 = load i32, ptr %268, align 4, !tbaa !13
  %270 = load i32, ptr %19, align 4, !tbaa !15
  %271 = sub nsw i32 %269, %270
  %272 = sitofp i32 %271 to float
  %273 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 2
  %274 = load float, ptr %273, align 4, !tbaa !33
  %275 = fmul float %272, %274
  %276 = call float @llvm.fmuladd.f32(float %265, float %267, float %275)
  %277 = load i32, ptr %14, align 4, !tbaa !15
  %278 = sitofp i32 %277 to float
  %279 = fdiv float %276, %278
  %280 = load ptr, ptr %10, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.TGL, ptr %280, i32 0, i32 6
  %282 = load ptr, ptr %281, align 8, !tbaa !34
  %283 = load i32, ptr %18, align 4, !tbaa !15
  %284 = load ptr, ptr %10, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.TGL, ptr %284, i32 0, i32 0
  %286 = load i32, ptr %285, align 8, !tbaa !26
  %287 = mul i32 %283, %286
  %288 = load i32, ptr %19, align 4, !tbaa !15
  %289 = add i32 %287, %288
  %290 = zext i32 %289 to i64
  %291 = getelementptr inbounds float, ptr %282, i64 %290
  store float %279, ptr %291, align 4, !tbaa !16
  br label %292

292:                                              ; preds = %260, %166
  br label %293

293:                                              ; preds = %292, %165
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #5
  br label %294

294:                                              ; preds = %293
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %17, align 4, !tbaa !15
  %297 = icmp sgt i32 %296, 0
  br i1 %297, label %298, label %308

298:                                              ; preds = %295
  %299 = load i32, ptr %16, align 4, !tbaa !15
  %300 = load i32, ptr %18, align 4, !tbaa !15
  %301 = add nsw i32 %300, %299
  store i32 %301, ptr %18, align 4, !tbaa !15
  %302 = load i32, ptr %15, align 4, !tbaa !15
  %303 = load i32, ptr %14, align 4, !tbaa !15
  %304 = sub nsw i32 %302, %303
  %305 = mul nsw i32 2, %304
  %306 = load i32, ptr %17, align 4, !tbaa !15
  %307 = add nsw i32 %306, %305
  store i32 %307, ptr %17, align 4, !tbaa !15
  br label %314

308:                                              ; preds = %295
  %309 = load i32, ptr %15, align 4, !tbaa !15
  %310 = load i32, ptr %15, align 4, !tbaa !15
  %311 = add nsw i32 %309, %310
  %312 = load i32, ptr %17, align 4, !tbaa !15
  %313 = add nsw i32 %312, %311
  store i32 %313, ptr %17, align 4, !tbaa !15
  br label %314

314:                                              ; preds = %308, %298
  br label %315

315:                                              ; preds = %314
  %316 = load i32, ptr %19, align 4, !tbaa !15
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %19, align 4, !tbaa !15
  br label %94, !llvm.loop !35

318:                                              ; preds = %94
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %580

319:                                              ; preds = %7
  %320 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %321 = load i32, ptr %320, align 4, !tbaa !9
  %322 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = icmp sgt i32 %321, %323
  br i1 %324, label %325, label %328

325:                                              ; preds = %319
  br label %326

326:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %24, ptr align 4 %9, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %8, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8, ptr align 4 %24, i64 16, i1 false), !tbaa.struct !14
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  br label %327

327:                                              ; preds = %326
  br label %328

328:                                              ; preds = %327, %319
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %329 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 0
  %330 = load i32, ptr %329, align 4, !tbaa !13
  %331 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %332 = load i32, ptr %331, align 4, !tbaa !13
  %333 = sub nsw i32 %330, %332
  store i32 %333, ptr %25, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %334 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %335 = load i32, ptr %334, align 4, !tbaa !9
  %336 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %337 = load i32, ptr %336, align 4, !tbaa !9
  %338 = sub nsw i32 %335, %337
  store i32 %338, ptr %26, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %339 = load i32, ptr %25, align 4, !tbaa !15
  %340 = icmp sgt i32 %339, 0
  br i1 %340, label %341, label %342

341:                                              ; preds = %328
  store i32 1, ptr %27, align 4, !tbaa !15
  br label %345

342:                                              ; preds = %328
  store i32 -1, ptr %27, align 4, !tbaa !15
  %343 = load i32, ptr %25, align 4, !tbaa !15
  %344 = mul nsw i32 %343, -1
  store i32 %344, ptr %25, align 4, !tbaa !15
  br label %345

345:                                              ; preds = %342, %341
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %346 = load i32, ptr %25, align 4, !tbaa !15
  %347 = load i32, ptr %25, align 4, !tbaa !15
  %348 = add nsw i32 %346, %347
  %349 = load i32, ptr %26, align 4, !tbaa !15
  %350 = sub nsw i32 %348, %349
  store i32 %350, ptr %28, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %351 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 0
  %352 = load i32, ptr %351, align 4, !tbaa !13
  store i32 %352, ptr %29, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %353 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %354 = load i32, ptr %353, align 4, !tbaa !9
  store i32 %354, ptr %30, align 4, !tbaa !15
  br label %355

355:                                              ; preds = %576, %345
  %356 = load i32, ptr %30, align 4, !tbaa !15
  %357 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %358 = load i32, ptr %357, align 4, !tbaa !9
  %359 = icmp sle i32 %356, %358
  br i1 %359, label %360, label %579

360:                                              ; preds = %355
  br label %361

361:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %362 = load ptr, ptr %10, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.TGL, ptr %362, i32 0, i32 9
  %364 = load i8, ptr %363, align 4, !tbaa !18, !range !21, !noundef !22
  %365 = trunc i8 %364 to i1
  br i1 %365, label %427, label %366

366:                                              ; preds = %361
  %367 = load ptr, ptr %11, align 8, !tbaa !5
  %368 = load i32, ptr %30, align 4, !tbaa !15
  %369 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = sub nsw i32 %368, %370
  %372 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 3
  %373 = load i8, ptr %372, align 4, !tbaa !23
  %374 = zext i8 %373 to i32
  %375 = mul nsw i32 %371, %374
  %376 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %377 = load i32, ptr %376, align 4, !tbaa !9
  %378 = load i32, ptr %30, align 4, !tbaa !15
  %379 = sub nsw i32 %377, %378
  %380 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 3
  %381 = load i8, ptr %380, align 4, !tbaa !23
  %382 = zext i8 %381 to i32
  %383 = mul nsw i32 %379, %382
  %384 = add nsw i32 %375, %383
  %385 = load i32, ptr %26, align 4, !tbaa !15
  %386 = sdiv i32 %384, %385
  %387 = trunc i32 %386 to i8
  %388 = load i32, ptr %30, align 4, !tbaa !15
  %389 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %390 = load i32, ptr %389, align 4, !tbaa !9
  %391 = sub nsw i32 %388, %390
  %392 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 4
  %393 = load i8, ptr %392, align 1, !tbaa !24
  %394 = zext i8 %393 to i32
  %395 = mul nsw i32 %391, %394
  %396 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = load i32, ptr %30, align 4, !tbaa !15
  %399 = sub nsw i32 %397, %398
  %400 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 4
  %401 = load i8, ptr %400, align 1, !tbaa !24
  %402 = zext i8 %401 to i32
  %403 = mul nsw i32 %399, %402
  %404 = add nsw i32 %395, %403
  %405 = load i32, ptr %26, align 4, !tbaa !15
  %406 = sdiv i32 %404, %405
  %407 = trunc i32 %406 to i8
  %408 = load ptr, ptr %12, align 8, !tbaa !5
  call void %367(i8 noundef zeroext %387, i8 noundef zeroext %407, ptr noundef %32, ptr noundef %31, ptr noundef %408)
  br label %409

409:                                              ; preds = %366
  %410 = load ptr, ptr %10, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.TGL, ptr %410, i32 0, i32 5
  %412 = load ptr, ptr %411, align 8, !tbaa !25
  %413 = load i32, ptr %30, align 4, !tbaa !15
  %414 = load ptr, ptr %10, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.TGL, ptr %414, i32 0, i32 0
  %416 = load i32, ptr %415, align 8, !tbaa !26
  %417 = mul i32 %413, %416
  %418 = load i32, ptr %29, align 4, !tbaa !15
  %419 = add i32 %417, %418
  %420 = zext i32 %419 to i64
  %421 = getelementptr inbounds %struct.Pixel, ptr %412, i64 %420
  %422 = getelementptr inbounds %struct.Pixel, ptr %33, i32 0, i32 0
  %423 = load i8, ptr %31, align 1, !tbaa !17
  store i8 %423, ptr %422, align 1, !tbaa !27
  %424 = getelementptr inbounds %struct.Pixel, ptr %33, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %424, ptr align 1 %32, i64 8, i1 false), !tbaa.struct !31
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %421, ptr align 1 %33, i64 9, i1 false), !tbaa.struct !32
  br label %425

425:                                              ; preds = %409
  br label %426

426:                                              ; preds = %425
  br label %554

427:                                              ; preds = %361
  %428 = load i32, ptr %30, align 4, !tbaa !15
  %429 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %430 = load i32, ptr %429, align 4, !tbaa !9
  %431 = sub nsw i32 %428, %430
  %432 = sitofp i32 %431 to float
  %433 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 2
  %434 = load float, ptr %433, align 4, !tbaa !33
  %435 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %436 = load i32, ptr %435, align 4, !tbaa !9
  %437 = load i32, ptr %30, align 4, !tbaa !15
  %438 = sub nsw i32 %436, %437
  %439 = sitofp i32 %438 to float
  %440 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 2
  %441 = load float, ptr %440, align 4, !tbaa !33
  %442 = fmul float %439, %441
  %443 = call float @llvm.fmuladd.f32(float %432, float %434, float %442)
  %444 = load i32, ptr %25, align 4, !tbaa !15
  %445 = sitofp i32 %444 to float
  %446 = fdiv float %443, %445
  %447 = load ptr, ptr %10, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.TGL, ptr %447, i32 0, i32 6
  %449 = load ptr, ptr %448, align 8, !tbaa !34
  %450 = load i32, ptr %30, align 4, !tbaa !15
  %451 = load ptr, ptr %10, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.TGL, ptr %451, i32 0, i32 0
  %453 = load i32, ptr %452, align 8, !tbaa !26
  %454 = mul i32 %450, %453
  %455 = load i32, ptr %29, align 4, !tbaa !15
  %456 = add i32 %454, %455
  %457 = zext i32 %456 to i64
  %458 = getelementptr inbounds float, ptr %449, i64 %457
  %459 = load float, ptr %458, align 4, !tbaa !16
  %460 = fcmp oge float %446, %459
  br i1 %460, label %461, label %553

461:                                              ; preds = %427
  %462 = load ptr, ptr %11, align 8, !tbaa !5
  %463 = load i32, ptr %30, align 4, !tbaa !15
  %464 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %465 = load i32, ptr %464, align 4, !tbaa !9
  %466 = sub nsw i32 %463, %465
  %467 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 3
  %468 = load i8, ptr %467, align 4, !tbaa !23
  %469 = zext i8 %468 to i32
  %470 = mul nsw i32 %466, %469
  %471 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %472 = load i32, ptr %471, align 4, !tbaa !9
  %473 = load i32, ptr %30, align 4, !tbaa !15
  %474 = sub nsw i32 %472, %473
  %475 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 3
  %476 = load i8, ptr %475, align 4, !tbaa !23
  %477 = zext i8 %476 to i32
  %478 = mul nsw i32 %474, %477
  %479 = add nsw i32 %470, %478
  %480 = load i32, ptr %26, align 4, !tbaa !15
  %481 = sdiv i32 %479, %480
  %482 = trunc i32 %481 to i8
  %483 = load i32, ptr %30, align 4, !tbaa !15
  %484 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %485 = load i32, ptr %484, align 4, !tbaa !9
  %486 = sub nsw i32 %483, %485
  %487 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 4
  %488 = load i8, ptr %487, align 1, !tbaa !24
  %489 = zext i8 %488 to i32
  %490 = mul nsw i32 %486, %489
  %491 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %492 = load i32, ptr %491, align 4, !tbaa !9
  %493 = load i32, ptr %30, align 4, !tbaa !15
  %494 = sub nsw i32 %492, %493
  %495 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 4
  %496 = load i8, ptr %495, align 1, !tbaa !24
  %497 = zext i8 %496 to i32
  %498 = mul nsw i32 %494, %497
  %499 = add nsw i32 %490, %498
  %500 = load i32, ptr %26, align 4, !tbaa !15
  %501 = sdiv i32 %499, %500
  %502 = trunc i32 %501 to i8
  %503 = load ptr, ptr %12, align 8, !tbaa !5
  call void %462(i8 noundef zeroext %482, i8 noundef zeroext %502, ptr noundef %32, ptr noundef %31, ptr noundef %503)
  br label %504

504:                                              ; preds = %461
  %505 = load ptr, ptr %10, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.TGL, ptr %505, i32 0, i32 5
  %507 = load ptr, ptr %506, align 8, !tbaa !25
  %508 = load i32, ptr %30, align 4, !tbaa !15
  %509 = load ptr, ptr %10, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.TGL, ptr %509, i32 0, i32 0
  %511 = load i32, ptr %510, align 8, !tbaa !26
  %512 = mul i32 %508, %511
  %513 = load i32, ptr %29, align 4, !tbaa !15
  %514 = add i32 %512, %513
  %515 = zext i32 %514 to i64
  %516 = getelementptr inbounds %struct.Pixel, ptr %507, i64 %515
  %517 = getelementptr inbounds %struct.Pixel, ptr %34, i32 0, i32 0
  %518 = load i8, ptr %31, align 1, !tbaa !17
  store i8 %518, ptr %517, align 1, !tbaa !27
  %519 = getelementptr inbounds %struct.Pixel, ptr %34, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %519, ptr align 1 %32, i64 8, i1 false), !tbaa.struct !31
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %516, ptr align 1 %34, i64 9, i1 false), !tbaa.struct !32
  br label %520

520:                                              ; preds = %504
  br label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %30, align 4, !tbaa !15
  %523 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 1
  %524 = load i32, ptr %523, align 4, !tbaa !9
  %525 = sub nsw i32 %522, %524
  %526 = sitofp i32 %525 to float
  %527 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 2
  %528 = load float, ptr %527, align 4, !tbaa !33
  %529 = getelementptr inbounds %struct.TGLVert, ptr %9, i32 0, i32 1
  %530 = load i32, ptr %529, align 4, !tbaa !9
  %531 = load i32, ptr %30, align 4, !tbaa !15
  %532 = sub nsw i32 %530, %531
  %533 = sitofp i32 %532 to float
  %534 = getelementptr inbounds %struct.TGLVert, ptr %8, i32 0, i32 2
  %535 = load float, ptr %534, align 4, !tbaa !33
  %536 = fmul float %533, %535
  %537 = call float @llvm.fmuladd.f32(float %526, float %528, float %536)
  %538 = load i32, ptr %25, align 4, !tbaa !15
  %539 = sitofp i32 %538 to float
  %540 = fdiv float %537, %539
  %541 = load ptr, ptr %10, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.TGL, ptr %541, i32 0, i32 6
  %543 = load ptr, ptr %542, align 8, !tbaa !34
  %544 = load i32, ptr %30, align 4, !tbaa !15
  %545 = load ptr, ptr %10, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.TGL, ptr %545, i32 0, i32 0
  %547 = load i32, ptr %546, align 8, !tbaa !26
  %548 = mul i32 %544, %547
  %549 = load i32, ptr %29, align 4, !tbaa !15
  %550 = add i32 %548, %549
  %551 = zext i32 %550 to i64
  %552 = getelementptr inbounds float, ptr %543, i64 %551
  store float %540, ptr %552, align 4, !tbaa !16
  br label %553

553:                                              ; preds = %521, %427
  br label %554

554:                                              ; preds = %553, %426
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #5
  br label %555

555:                                              ; preds = %554
  br label %556

556:                                              ; preds = %555
  %557 = load i32, ptr %28, align 4, !tbaa !15
  %558 = icmp sgt i32 %557, 0
  br i1 %558, label %559, label %569

559:                                              ; preds = %556
  %560 = load i32, ptr %27, align 4, !tbaa !15
  %561 = load i32, ptr %29, align 4, !tbaa !15
  %562 = add nsw i32 %561, %560
  store i32 %562, ptr %29, align 4, !tbaa !15
  %563 = load i32, ptr %25, align 4, !tbaa !15
  %564 = load i32, ptr %26, align 4, !tbaa !15
  %565 = sub nsw i32 %563, %564
  %566 = mul nsw i32 2, %565
  %567 = load i32, ptr %28, align 4, !tbaa !15
  %568 = add nsw i32 %567, %566
  store i32 %568, ptr %28, align 4, !tbaa !15
  br label %575

569:                                              ; preds = %556
  %570 = load i32, ptr %25, align 4, !tbaa !15
  %571 = load i32, ptr %25, align 4, !tbaa !15
  %572 = add nsw i32 %570, %571
  %573 = load i32, ptr %28, align 4, !tbaa !15
  %574 = add nsw i32 %573, %572
  store i32 %574, ptr %28, align 4, !tbaa !15
  br label %575

575:                                              ; preds = %569, %559
  br label %576

576:                                              ; preds = %575
  %577 = load i32, ptr %30, align 4, !tbaa !15
  %578 = add nsw i32 %577, 1
  store i32 %578, ptr %30, align 4, !tbaa !15
  br label %355, !llvm.loop !37

579:                                              ; preds = %355
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %580

580:                                              ; preds = %579, %318
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #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 speculatable willreturn memory(none) }
attributes #5 = { 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, !11, i64 4}
!10 = !{!"TGLVert", !11, i64 0, !11, i64 4, !12, i64 8, !7, i64 12, !7, i64 13}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!10, !11, i64 0}
!14 = !{i64 0, i64 4, !15, i64 4, i64 4, !15, i64 8, i64 4, !16, i64 12, i64 1, !17, i64 13, i64 1, !17}
!15 = !{!11, !11, i64 0}
!16 = !{!12, !12, i64 0}
!17 = !{!7, !7, i64 0}
!18 = !{!19, !20, i64 52}
!19 = !{!"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, !20, i64 52, !7, i64 53}
!20 = !{!"_Bool", !7, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{!10, !7, i64 12}
!24 = !{!10, !7, i64 13}
!25 = !{!19, !6, i64 24}
!26 = !{!19, !11, i64 0}
!27 = !{!28, !7, i64 0}
!28 = !{!"Pixel", !7, i64 0, !29, i64 1}
!29 = !{!"TGLPixFmt", !30, i64 0, !30, i64 4}
!30 = !{!"TGLFmt", !7, i64 0, !7, i64 1}
!31 = !{i64 0, i64 1, !17, i64 1, i64 3, !17, i64 4, i64 1, !17, i64 5, i64 3, !17}
!32 = !{i64 0, i64 1, !17, i64 1, i64 1, !17, i64 2, i64 3, !17, i64 5, i64 1, !17, i64 6, i64 3, !17}
!33 = !{!10, !12, i64 8}
!34 = !{!19, !6, i64 32}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !36}


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

; 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 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

; Function Attrs: nounwind uwtable
define dso_local void @tgl_line(ptr noundef %0, i64 %1, i64 %2, i64 %3, i64 %4, ptr nocapture noundef readonly %5, ptr noundef %6) local_unnamed_addr #3 {
  %8 = alloca %struct.TGLVert, align 8
  %9 = alloca %struct.TGLVert, align 8
  %10 = alloca %struct.TGLVert, align 4
  %11 = alloca i8, align 1
  %12 = alloca %struct.TGLPixFmt, align 8
  %13 = alloca %struct.TGLVert, align 4
  %14 = alloca i8, align 1
  %15 = alloca %struct.TGLPixFmt, align 8
  store i64 %1, ptr %8, align 8
  %16 = getelementptr inbounds i8, ptr %8, i64 8
  store i64 %2, ptr %16, align 8
  store i64 %3, ptr %9, align 8
  %17 = getelementptr inbounds i8, ptr %9, i64 8
  store i64 %4, ptr %17, align 8
  %18 = getelementptr inbounds i8, ptr %8, i64 4
  call void @itgl_clip(ptr noundef %0, ptr noundef nonnull %8, ptr noundef nonnull %18)
  %19 = getelementptr inbounds i8, ptr %9, i64 4
  call void @itgl_clip(ptr noundef %0, ptr noundef nonnull %9, ptr noundef nonnull %19)
  %20 = load i32, ptr %19, align 4, !tbaa !5
  %21 = load i32, ptr %18, align 4, !tbaa !5
  %22 = sub nsw i32 %20, %21
  %23 = call i32 @llvm.abs.i32(i32 %22, i1 true)
  %24 = load i32, ptr %9, align 8, !tbaa !11
  %25 = load i32, ptr %8, align 8, !tbaa !11
  %26 = sub nsw i32 %24, %25
  %27 = call i32 @llvm.abs.i32(i32 %26, i1 true)
  %28 = icmp ult i32 %23, %27
  br i1 %28, label %29, label %146

29:                                               ; preds = %7
  %30 = icmp sgt i32 %25, %24
  br i1 %30, label %31, label %32

31:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %10, ptr noundef nonnull align 8 dereferenceable(16) %9, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %8, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 4 dereferenceable(16) %10, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10)
  %.pre151 = load i32, ptr %9, align 8, !tbaa !11
  %.pre152 = load i32, ptr %8, align 8, !tbaa !11
  %.pre153 = load i32, ptr %19, align 4, !tbaa !5
  %.pre154 = load i32, ptr %18, align 4, !tbaa !5
  %.pre155 = sub nsw i32 %.pre151, %.pre152
  %.pre156 = sub nsw i32 %.pre153, %.pre154
  %.pre158 = call i32 @llvm.abs.i32(i32 %.pre156, i1 true)
  br label %32

32:                                               ; preds = %31, %29
  %.0.pre-phi = phi i32 [ %.pre158, %31 ], [ %23, %29 ]
  %.pre-phi157 = phi i32 [ %.pre156, %31 ], [ %22, %29 ]
  %.pre-phi = phi i32 [ %.pre155, %31 ], [ %26, %29 ]
  %33 = phi i32 [ %.pre154, %31 ], [ %21, %29 ]
  %34 = phi i32 [ %.pre152, %31 ], [ %25, %29 ]
  %35 = phi i32 [ %.pre151, %31 ], [ %24, %29 ]
  %.inv135 = icmp slt i32 %.pre-phi157, 1
  %.0117 = select i1 %.inv135, i32 -1, i32 1
  %36 = shl nuw nsw i32 %.0.pre-phi, 1
  %.not133141 = icmp sgt i32 %34, %35
  br i1 %.not133141, label %.loopexit, label %.lr.ph145

.lr.ph145:                                        ; preds = %32
  %37 = sub nsw i32 %36, %.pre-phi
  %38 = getelementptr inbounds i8, ptr %0, i64 52
  %39 = getelementptr inbounds i8, ptr %9, i64 12
  %40 = getelementptr inbounds i8, ptr %8, i64 12
  %41 = getelementptr inbounds i8, ptr %9, i64 13
  %42 = getelementptr inbounds i8, ptr %8, i64 13
  %43 = getelementptr inbounds i8, ptr %0, i64 24
  %44 = sitofp i32 %.pre-phi to float
  %45 = getelementptr inbounds i8, ptr %0, i64 32
  %46 = sub nsw i32 %.0.pre-phi, %.pre-phi
  %47 = shl nsw i32 %46, 1
  br label %48

48:                                               ; preds = %.lr.ph145, %141
  %49 = phi i32 [ %35, %.lr.ph145 ], [ %145, %141 ]
  %.0123144 = phi i32 [ %37, %.lr.ph145 ], [ %.1124, %141 ]
  %.0126143 = phi i32 [ %33, %.lr.ph145 ], [ %.1127, %141 ]
  %.0128142 = phi i32 [ %34, %.lr.ph145 ], [ %144, %141 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #5
  %50 = load i8, ptr %38, align 4, !tbaa !16, !range !20, !noundef !21
  %51 = trunc nuw i8 %50 to i1
  %52 = load i32, ptr %8, align 8, !tbaa !11
  %53 = sub nsw i32 %.0128142, %52
  br i1 %51, label %82, label %54

54:                                               ; preds = %48
  %55 = load i8, ptr %39, align 4, !tbaa !22
  %56 = zext i8 %55 to i32
  %57 = mul nsw i32 %53, %56
  %58 = sub nsw i32 %49, %.0128142
  %59 = load i8, ptr %40, align 4, !tbaa !22
  %60 = zext i8 %59 to i32
  %61 = mul nsw i32 %58, %60
  %62 = add nsw i32 %61, %57
  %63 = sdiv i32 %62, %.pre-phi
  %64 = trunc i32 %63 to i8
  %65 = load i8, ptr %41, align 1, !tbaa !23
  %66 = zext i8 %65 to i32
  %67 = mul nsw i32 %53, %66
  %68 = load i8, ptr %42, align 1, !tbaa !23
  %69 = zext i8 %68 to i32
  %70 = mul nsw i32 %58, %69
  %71 = add nsw i32 %70, %67
  %72 = sdiv i32 %71, %.pre-phi
  %73 = trunc i32 %72 to i8
  call void %5(i8 noundef zeroext %64, i8 noundef zeroext %73, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef %6) #5
  %74 = load ptr, ptr %43, align 8, !tbaa !24
  %75 = load i32, ptr %0, align 8, !tbaa !25
  %76 = mul i32 %75, %.0126143
  %77 = add i32 %76, %.0128142
  %78 = zext i32 %77 to i64
  %79 = getelementptr inbounds %struct.Pixel, ptr %74, i64 %78
  %80 = load i8, ptr %11, align 1, !tbaa !15
  %81 = load i64, ptr %12, align 8
  store i8 %80, ptr %79, align 1, !tbaa !15
  %.sroa.247.0..sroa_idx = getelementptr inbounds i8, ptr %79, i64 1
  store i64 %81, ptr %.sroa.247.0..sroa_idx, align 1
  br label %141

82:                                               ; preds = %48
  %83 = sitofp i32 %53 to float
  %84 = load float, ptr %17, align 8, !tbaa !26
  %85 = sub nsw i32 %52, %.0128142
  %86 = sitofp i32 %85 to float
  %87 = fmul float %84, %86
  %88 = call float @llvm.fmuladd.f32(float %83, float %84, float %87)
  %89 = fdiv float %88, %44
  %90 = load ptr, ptr %45, align 8, !tbaa !27
  %91 = load i32, ptr %0, align 8, !tbaa !25
  %92 = mul i32 %91, %.0126143
  %93 = add i32 %92, %.0128142
  %94 = zext i32 %93 to i64
  %95 = getelementptr inbounds float, ptr %90, i64 %94
  %96 = load float, ptr %95, align 4, !tbaa !14
  %97 = fcmp ult float %89, %96
  br i1 %97, label %141, label %98

98:                                               ; preds = %82
  %99 = load i8, ptr %39, align 4, !tbaa !22
  %100 = zext i8 %99 to i32
  %101 = mul nsw i32 %53, %100
  %102 = sub nsw i32 %49, %.0128142
  %103 = load i8, ptr %40, align 4, !tbaa !22
  %104 = zext i8 %103 to i32
  %105 = mul nsw i32 %102, %104
  %106 = add nsw i32 %105, %101
  %107 = sdiv i32 %106, %.pre-phi
  %108 = trunc i32 %107 to i8
  %109 = load i8, ptr %41, align 1, !tbaa !23
  %110 = zext i8 %109 to i32
  %111 = mul nsw i32 %53, %110
  %112 = load i8, ptr %42, align 1, !tbaa !23
  %113 = zext i8 %112 to i32
  %114 = mul nsw i32 %102, %113
  %115 = add nsw i32 %114, %111
  %116 = sdiv i32 %115, %.pre-phi
  %117 = trunc i32 %116 to i8
  call void %5(i8 noundef zeroext %108, i8 noundef zeroext %117, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef %6) #5
  %118 = load ptr, ptr %43, align 8, !tbaa !24
  %119 = load i32, ptr %0, align 8, !tbaa !25
  %120 = mul i32 %119, %.0126143
  %121 = add i32 %120, %.0128142
  %122 = zext i32 %121 to i64
  %123 = getelementptr inbounds %struct.Pixel, ptr %118, i64 %122
  %124 = load i8, ptr %11, align 1, !tbaa !15
  %125 = load i64, ptr %12, align 8
  store i8 %124, ptr %123, align 1, !tbaa !15
  %.sroa.245.0..sroa_idx = getelementptr inbounds i8, ptr %123, i64 1
  store i64 %125, ptr %.sroa.245.0..sroa_idx, align 1
  %126 = load i32, ptr %8, align 8, !tbaa !11
  %127 = sub nsw i32 %.0128142, %126
  %128 = sitofp i32 %127 to float
  %129 = load float, ptr %17, align 8, !tbaa !26
  %130 = sub nsw i32 %126, %.0128142
  %131 = sitofp i32 %130 to float
  %132 = fmul float %129, %131
  %133 = call float @llvm.fmuladd.f32(float %128, float %129, float %132)
  %134 = fdiv float %133, %44
  %135 = load ptr, ptr %45, align 8, !tbaa !27
  %136 = load i32, ptr %0, align 8, !tbaa !25
  %137 = mul i32 %136, %.0126143
  %138 = add i32 %137, %.0128142
  %139 = zext i32 %138 to i64
  %140 = getelementptr inbounds float, ptr %135, i64 %139
  store float %134, ptr %140, align 4, !tbaa !14
  br label %141

141:                                              ; preds = %82, %98, %54
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #5
  %142 = icmp sgt i32 %.0123144, 0
  %143 = select i1 %142, i32 %.0117, i32 0
  %.1127 = add nsw i32 %143, %.0126143
  %.pn134 = select i1 %142, i32 %47, i32 %36
  %.1124 = add nsw i32 %.pn134, %.0123144
  %144 = add nsw i32 %.0128142, 1
  %145 = load i32, ptr %9, align 8, !tbaa !11
  %.not133.not = icmp slt i32 %.0128142, %145
  br i1 %.not133.not, label %48, label %.loopexit, !llvm.loop !28

146:                                              ; preds = %7
  %147 = icmp sgt i32 %21, %20
  br i1 %147, label %148, label %149

148:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %13, ptr noundef nonnull align 8 dereferenceable(16) %9, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %8, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 4 dereferenceable(16) %13, i64 16, i1 false), !tbaa.struct !12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13)
  %.pre = load i32, ptr %9, align 8, !tbaa !11
  %.pre147 = load i32, ptr %8, align 8, !tbaa !11
  %.pre148 = load i32, ptr %19, align 4, !tbaa !5
  %.pre149 = load i32, ptr %18, align 4, !tbaa !5
  %.pre159 = sub nsw i32 %.pre, %.pre147
  %.pre161 = sub nsw i32 %.pre148, %.pre149
  %.pre163 = call i32 @llvm.abs.i32(i32 %.pre159, i1 true)
  br label %149

149:                                              ; preds = %148, %146
  %.0125.pre-phi = phi i32 [ %.pre163, %148 ], [ %27, %146 ]
  %.pre-phi162 = phi i32 [ %.pre161, %148 ], [ %22, %146 ]
  %.pre-phi160 = phi i32 [ %.pre159, %148 ], [ %26, %146 ]
  %150 = phi i32 [ %.pre149, %148 ], [ %21, %146 ]
  %151 = phi i32 [ %.pre148, %148 ], [ %20, %146 ]
  %152 = phi i32 [ %.pre147, %148 ], [ %25, %146 ]
  %.inv = icmp slt i32 %.pre-phi160, 1
  %.0122 = select i1 %.inv, i32 -1, i32 1
  %153 = shl nuw nsw i32 %.0125.pre-phi, 1
  %.not137 = icmp sgt i32 %150, %151
  br i1 %.not137, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %149
  %154 = sub nsw i32 %153, %.pre-phi162
  %155 = getelementptr inbounds i8, ptr %0, i64 52
  %156 = getelementptr inbounds i8, ptr %9, i64 12
  %157 = getelementptr inbounds i8, ptr %8, i64 12
  %158 = getelementptr inbounds i8, ptr %9, i64 13
  %159 = getelementptr inbounds i8, ptr %8, i64 13
  %160 = getelementptr inbounds i8, ptr %0, i64 24
  %161 = uitofp nneg i32 %.0125.pre-phi to float
  %162 = getelementptr inbounds i8, ptr %0, i64 32
  %163 = sub nsw i32 %.0125.pre-phi, %.pre-phi162
  %164 = shl nsw i32 %163, 1
  br label %165

165:                                              ; preds = %.lr.ph, %260
  %166 = phi i32 [ %151, %.lr.ph ], [ %261, %260 ]
  %.0118140 = phi i32 [ %150, %.lr.ph ], [ %264, %260 ]
  %.0119139 = phi i32 [ %152, %.lr.ph ], [ %.1, %260 ]
  %.0120138 = phi i32 [ %154, %.lr.ph ], [ %.1121, %260 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  %167 = load i8, ptr %155, align 4, !tbaa !16, !range !20, !noundef !21
  %168 = trunc nuw i8 %167 to i1
  %169 = load i32, ptr %18, align 4, !tbaa !5
  %170 = sub nsw i32 %.0118140, %169
  br i1 %168, label %199, label %171

171:                                              ; preds = %165
  %172 = load i8, ptr %156, align 4, !tbaa !22
  %173 = zext i8 %172 to i32
  %174 = mul nsw i32 %170, %173
  %175 = sub nsw i32 %166, %.0118140
  %176 = load i8, ptr %157, align 4, !tbaa !22
  %177 = zext i8 %176 to i32
  %178 = mul nsw i32 %175, %177
  %179 = add nsw i32 %178, %174
  %180 = sdiv i32 %179, %.pre-phi162
  %181 = trunc i32 %180 to i8
  %182 = load i8, ptr %158, align 1, !tbaa !23
  %183 = zext i8 %182 to i32
  %184 = mul nsw i32 %170, %183
  %185 = load i8, ptr %159, align 1, !tbaa !23
  %186 = zext i8 %185 to i32
  %187 = mul nsw i32 %175, %186
  %188 = add nsw i32 %187, %184
  %189 = sdiv i32 %188, %.pre-phi162
  %190 = trunc i32 %189 to i8
  call void %5(i8 noundef zeroext %181, i8 noundef zeroext %190, ptr noundef nonnull %15, ptr noundef nonnull %14, ptr noundef %6) #5
  %191 = load ptr, ptr %160, align 8, !tbaa !24
  %192 = load i32, ptr %0, align 8, !tbaa !25
  %193 = mul i32 %192, %.0118140
  %194 = add i32 %193, %.0119139
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds %struct.Pixel, ptr %191, i64 %195
  %197 = load i8, ptr %14, align 1, !tbaa !15
  %198 = load i64, ptr %15, align 8
  store i8 %197, ptr %196, align 1, !tbaa !15
  %.sroa.22.0..sroa_idx = getelementptr inbounds i8, ptr %196, i64 1
  store i64 %198, ptr %.sroa.22.0..sroa_idx, align 1
  %.pre150 = load i32, ptr %19, align 4, !tbaa !5
  br label %260

199:                                              ; preds = %165
  %200 = sitofp i32 %170 to float
  %201 = load float, ptr %17, align 8, !tbaa !26
  %202 = sub nsw i32 %166, %.0118140
  %203 = sitofp i32 %202 to float
  %204 = load float, ptr %16, align 8, !tbaa !26
  %205 = fmul float %204, %203
  %206 = call float @llvm.fmuladd.f32(float %200, float %201, float %205)
  %207 = fdiv float %206, %161
  %208 = load ptr, ptr %162, align 8, !tbaa !27
  %209 = load i32, ptr %0, align 8, !tbaa !25
  %210 = mul i32 %209, %.0118140
  %211 = add i32 %210, %.0119139
  %212 = zext i32 %211 to i64
  %213 = getelementptr inbounds float, ptr %208, i64 %212
  %214 = load float, ptr %213, align 4, !tbaa !14
  %215 = fcmp ult float %207, %214
  br i1 %215, label %260, label %216

216:                                              ; preds = %199
  %217 = load i8, ptr %156, align 4, !tbaa !22
  %218 = zext i8 %217 to i32
  %219 = mul nsw i32 %170, %218
  %220 = load i8, ptr %157, align 4, !tbaa !22
  %221 = zext i8 %220 to i32
  %222 = mul nsw i32 %202, %221
  %223 = add nsw i32 %222, %219
  %224 = sdiv i32 %223, %.pre-phi162
  %225 = trunc i32 %224 to i8
  %226 = load i8, ptr %158, align 1, !tbaa !23
  %227 = zext i8 %226 to i32
  %228 = mul nsw i32 %170, %227
  %229 = load i8, ptr %159, align 1, !tbaa !23
  %230 = zext i8 %229 to i32
  %231 = mul nsw i32 %202, %230
  %232 = add nsw i32 %231, %228
  %233 = sdiv i32 %232, %.pre-phi162
  %234 = trunc i32 %233 to i8
  call void %5(i8 noundef zeroext %225, i8 noundef zeroext %234, ptr noundef nonnull %15, ptr noundef nonnull %14, ptr noundef %6) #5
  %235 = load ptr, ptr %160, align 8, !tbaa !24
  %236 = load i32, ptr %0, align 8, !tbaa !25
  %237 = mul i32 %236, %.0118140
  %238 = add i32 %237, %.0119139
  %239 = zext i32 %238 to i64
  %240 = getelementptr inbounds %struct.Pixel, ptr %235, i64 %239
  %241 = load i8, ptr %14, align 1, !tbaa !15
  %242 = load i64, ptr %15, align 8
  store i8 %241, ptr %240, align 1, !tbaa !15
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %240, i64 1
  store i64 %242, ptr %.sroa.2.0..sroa_idx, align 1
  %243 = load i32, ptr %18, align 4, !tbaa !5
  %244 = sub nsw i32 %.0118140, %243
  %245 = sitofp i32 %244 to float
  %246 = load float, ptr %17, align 8, !tbaa !26
  %247 = load i32, ptr %19, align 4, !tbaa !5
  %248 = sub nsw i32 %247, %.0118140
  %249 = sitofp i32 %248 to float
  %250 = load float, ptr %16, align 8, !tbaa !26
  %251 = fmul float %250, %249
  %252 = call float @llvm.fmuladd.f32(float %245, float %246, float %251)
  %253 = fdiv float %252, %161
  %254 = load ptr, ptr %162, align 8, !tbaa !27
  %255 = load i32, ptr %0, align 8, !tbaa !25
  %256 = mul i32 %255, %.0118140
  %257 = add i32 %256, %.0119139
  %258 = zext i32 %257 to i64
  %259 = getelementptr inbounds float, ptr %254, i64 %258
  store float %253, ptr %259, align 4, !tbaa !14
  br label %260

260:                                              ; preds = %199, %216, %171
  %261 = phi i32 [ %166, %199 ], [ %247, %216 ], [ %.pre150, %171 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #5
  %262 = icmp sgt i32 %.0120138, 0
  %.pn = select i1 %262, i32 %164, i32 %153
  %263 = select i1 %262, i32 %.0122, i32 0
  %.1 = add nsw i32 %263, %.0119139
  %.1121 = add nsw i32 %.pn, %.0120138
  %264 = add nsw i32 %.0118140, 1
  %.not.not = icmp slt i32 %.0118140, %261
  br i1 %.not.not, label %165, label %.loopexit, !llvm.loop !30

.loopexit:                                        ; preds = %260, %141, %149, %32
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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, !7, i64 4}
!6 = !{!"TGLVert", !7, i64 0, !7, i64 4, !10, i64 8, !8, i64 12, !8, i64 13}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!6, !7, i64 0}
!12 = !{i64 0, i64 4, !13, i64 4, i64 4, !13, i64 8, i64 4, !14, i64 12, i64 1, !15, i64 13, i64 1, !15}
!13 = !{!7, !7, i64 0}
!14 = !{!10, !10, i64 0}
!15 = !{!8, !8, i64 0}
!16 = !{!17, !19, i64 52}
!17 = !{!"TGL", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !18, i64 24, !18, i64 32, !18, i64 40, !7, i64 48, !19, i64 52, !8, i64 53}
!18 = !{!"any pointer", !8, i64 0}
!19 = !{!"_Bool", !8, i64 0}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!6, !8, i64 12}
!23 = !{!6, !8, i64 13}
!24 = !{!17, !18, i64 24}
!25 = !{!17, !7, i64 0}
!26 = !{!6, !10, i64 8}
!27 = !{!17, !18, i64 32}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}


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