; LLVM IR from TheNachoBIT/GeoFenix-Engine :: Libraries/SOIL2/include (SOIL2)

; 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.DDS_header = type { i32, i32, i32, i32, i32, i32, i32, i32, [11 x i32], %struct.anon, %struct.anon.0, i32 }
%struct.anon = type { i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.anon.0 = type { i32, i32, i32, i32 }

@result_string_pointer = external dso_local global ptr, align 8
@soilGlCompressedTexImage2D = external hidden global ptr, align 8
@.str.38 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [47 x i8], align 1

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

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

; Function Attrs: 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: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @SOIL_free_image_data(ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local i32 @SOIL_direct_load_DDS_from_memory(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) #3 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %struct.DDS_header, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, 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 i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i8, align 1
  %37 = alloca i16, align 2
  %38 = alloca i8, align 1
  %39 = alloca i8, align 1
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca i16, align 2
  %43 = alloca i16, align 2
  %44 = alloca i8, align 1
  %45 = alloca i8, align 1
  %46 = alloca i8, align 1
  %47 = alloca i8, align 1
  %48 = alloca i16, align 2
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store i32 %4, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 128, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 16, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  store i32 5121, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = icmp eq ptr null, %53
  br i1 %54, label %55, label %56

55:                                               ; preds = %5
  store ptr @.str.38, ptr @result_string_pointer, align 8, !tbaa !5
  store i32 0, ptr %6, align 4
  store i32 1, ptr %32, align 4
  br label %785

56:                                               ; preds = %5
  %57 = load i32, ptr %8, align 4, !tbaa !9
  %58 = sext i32 %57 to i64
  %59 = icmp ult i64 %58, 128
  br i1 %59, label %60, label %61

60:                                               ; preds = %56
  store ptr @.str.39, ptr @result_string_pointer, align 8, !tbaa !5
  store i32 0, ptr %6, align 4
  store i32 1, ptr %32, align 4
  br label %785

61:                                               ; preds = %56
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 1 %62, i64 128, i1 false)
  store i32 128, ptr %13, align 4, !tbaa !9
  store ptr @.str.40, ptr @result_string_pointer, align 8, !tbaa !5
  store i32 542327876, ptr %25, align 4, !tbaa !9
  %63 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 0
  %64 = load i32, ptr %63, align 4, !tbaa !11
  %65 = load i32, ptr %25, align 4, !tbaa !9
  %66 = icmp ne i32 %64, %65
  br i1 %66, label %67, label %68

67:                                               ; preds = %61
  br label %783

68:                                               ; preds = %61
  %69 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 1
  %70 = load i32, ptr %69, align 4, !tbaa !15
  %71 = icmp ne i32 %70, 124
  br i1 %71, label %72, label %73

72:                                               ; preds = %68
  br label %783

73:                                               ; preds = %68
  store i32 4103, ptr %25, align 4, !tbaa !9
  %74 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 2
  %75 = load i32, ptr %74, align 4, !tbaa !16
  %76 = load i32, ptr %25, align 4, !tbaa !9
  %77 = and i32 %75, %76
  %78 = load i32, ptr %25, align 4, !tbaa !9
  %79 = icmp ne i32 %77, %78
  br i1 %79, label %80, label %81

80:                                               ; preds = %73
  br label %783

81:                                               ; preds = %73
  store i32 131140, ptr %25, align 4, !tbaa !9
  %82 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %83 = getelementptr inbounds %struct.anon, ptr %82, i32 0, i32 1
  %84 = load i32, ptr %83, align 4, !tbaa !17
  %85 = load i32, ptr %25, align 4, !tbaa !9
  %86 = and i32 %84, %85
  %87 = icmp eq i32 %86, 0
  br i1 %87, label %88, label %89

88:                                               ; preds = %81
  br label %783

89:                                               ; preds = %81
  %90 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %91 = getelementptr inbounds %struct.anon, ptr %90, i32 0, i32 0
  %92 = load i32, ptr %91, align 4, !tbaa !18
  %93 = icmp ne i32 %92, 32
  br i1 %93, label %94, label %95

94:                                               ; preds = %89
  br label %783

95:                                               ; preds = %89
  %96 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 10
  %97 = getelementptr inbounds %struct.anon.0, ptr %96, i32 0, i32 0
  %98 = load i32, ptr %97, align 4, !tbaa !19
  %99 = and i32 %98, 4096
  %100 = icmp eq i32 %99, 0
  br i1 %100, label %101, label %102

101:                                              ; preds = %95
  br label %783

102:                                              ; preds = %95
  %103 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %104 = getelementptr inbounds %struct.anon, ptr %103, i32 0, i32 1
  %105 = load i32, ptr %104, align 4, !tbaa !17
  %106 = and i32 %105, 4
  %107 = icmp ne i32 %106, 0
  br i1 %107, label %108, label %124

108:                                              ; preds = %102
  %109 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %110 = getelementptr inbounds %struct.anon, ptr %109, i32 0, i32 2
  %111 = load i32, ptr %110, align 4, !tbaa !20
  %112 = icmp eq i32 %111, 827611204
  br i1 %112, label %124, label %113

113:                                              ; preds = %108
  %114 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %115 = getelementptr inbounds %struct.anon, ptr %114, i32 0, i32 2
  %116 = load i32, ptr %115, align 4, !tbaa !20
  %117 = icmp eq i32 %116, 861165636
  br i1 %117, label %124, label %118

118:                                              ; preds = %113
  %119 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %120 = getelementptr inbounds %struct.anon, ptr %119, i32 0, i32 2
  %121 = load i32, ptr %120, align 4, !tbaa !20
  %122 = icmp eq i32 %121, 894720068
  br i1 %122, label %124, label %123

123:                                              ; preds = %118
  br label %783

124:                                              ; preds = %118, %113, %108, %102
  store ptr @.str.41, ptr @result_string_pointer, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 4
  %126 = load i32, ptr %125, align 4, !tbaa !21
  store i32 %126, ptr %19, align 4, !tbaa !9
  %127 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 3
  %128 = load i32, ptr %127, align 4, !tbaa !22
  store i32 %128, ptr %20, align 4, !tbaa !9
  %129 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %130 = getelementptr inbounds %struct.anon, ptr %129, i32 0, i32 1
  %131 = load i32, ptr %130, align 4, !tbaa !17
  %132 = and i32 %131, 4
  %133 = udiv i32 %132, 4
  %134 = sub i32 1, %133
  store i32 %134, ptr %23, align 4, !tbaa !9
  %135 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 10
  %136 = getelementptr inbounds %struct.anon.0, ptr %135, i32 0, i32 1
  %137 = load i32, ptr %136, align 4, !tbaa !23
  %138 = and i32 %137, 512
  %139 = udiv i32 %138, 512
  store i32 %139, ptr %22, align 4, !tbaa !9
  %140 = load i32, ptr %23, align 4, !tbaa !9
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %142, label %242

142:                                              ; preds = %124
  %143 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %144 = getelementptr inbounds %struct.anon, ptr %143, i32 0, i32 3
  %145 = load i32, ptr %144, align 4, !tbaa !24
  %146 = icmp eq i32 %145, 8
  br i1 %146, label %147, label %165

147:                                              ; preds = %142
  %148 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %149 = getelementptr inbounds %struct.anon, ptr %148, i32 0, i32 4
  %150 = load i32, ptr %149, align 4, !tbaa !25
  %151 = icmp eq i32 %150, 224
  br i1 %151, label %152, label %163

152:                                              ; preds = %147
  %153 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %154 = getelementptr inbounds %struct.anon, ptr %153, i32 0, i32 5
  %155 = load i32, ptr %154, align 4, !tbaa !26
  %156 = icmp eq i32 %155, 28
  br i1 %156, label %157, label %163

157:                                              ; preds = %152
  %158 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %159 = getelementptr inbounds %struct.anon, ptr %158, i32 0, i32 6
  %160 = load i32, ptr %159, align 4, !tbaa !27
  %161 = icmp eq i32 %160, 3
  br i1 %161, label %162, label %163

162:                                              ; preds = %157
  store i32 6407, ptr %15, align 4, !tbaa !9
  store i32 32818, ptr %30, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %164

163:                                              ; preds = %157, %152, %147
  store i32 6409, ptr %15, align 4, !tbaa !9
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %164

164:                                              ; preds = %163, %162
  br label %236

165:                                              ; preds = %142
  %166 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %167 = getelementptr inbounds %struct.anon, ptr %166, i32 0, i32 3
  %168 = load i32, ptr %167, align 4, !tbaa !24
  %169 = icmp eq i32 %168, 16
  br i1 %169, label %170, label %227

170:                                              ; preds = %165
  %171 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %172 = getelementptr inbounds %struct.anon, ptr %171, i32 0, i32 4
  %173 = load i32, ptr %172, align 4, !tbaa !25
  %174 = icmp eq i32 %173, 63488
  br i1 %174, label %175, label %186

175:                                              ; preds = %170
  %176 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %177 = getelementptr inbounds %struct.anon, ptr %176, i32 0, i32 5
  %178 = load i32, ptr %177, align 4, !tbaa !26
  %179 = icmp eq i32 %178, 2016
  br i1 %179, label %180, label %186

180:                                              ; preds = %175
  %181 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %182 = getelementptr inbounds %struct.anon, ptr %181, i32 0, i32 6
  %183 = load i32, ptr %182, align 4, !tbaa !27
  %184 = icmp eq i32 %183, 31
  br i1 %184, label %185, label %186

185:                                              ; preds = %180
  store i32 6408, ptr %15, align 4, !tbaa !9
  store i32 32820, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %24, align 4, !tbaa !9
  br label %226

186:                                              ; preds = %180, %175, %170
  %187 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %188 = getelementptr inbounds %struct.anon, ptr %187, i32 0, i32 4
  %189 = load i32, ptr %188, align 4, !tbaa !25
  %190 = icmp eq i32 %189, 3840
  br i1 %190, label %191, label %207

191:                                              ; preds = %186
  %192 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %193 = getelementptr inbounds %struct.anon, ptr %192, i32 0, i32 5
  %194 = load i32, ptr %193, align 4, !tbaa !26
  %195 = icmp eq i32 %194, 240
  br i1 %195, label %196, label %207

196:                                              ; preds = %191
  %197 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %198 = getelementptr inbounds %struct.anon, ptr %197, i32 0, i32 6
  %199 = load i32, ptr %198, align 4, !tbaa !27
  %200 = icmp eq i32 %199, 15
  br i1 %200, label %201, label %207

201:                                              ; preds = %196
  %202 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %203 = getelementptr inbounds %struct.anon, ptr %202, i32 0, i32 7
  %204 = load i32, ptr %203, align 4, !tbaa !28
  %205 = icmp eq i32 %204, 61440
  br i1 %205, label %206, label %207

206:                                              ; preds = %201
  store i32 6408, ptr %15, align 4, !tbaa !9
  store i32 32819, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %24, align 4, !tbaa !9
  br label %225

207:                                              ; preds = %201, %196, %191, %186
  %208 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %209 = getelementptr inbounds %struct.anon, ptr %208, i32 0, i32 4
  %210 = load i32, ptr %209, align 4, !tbaa !25
  %211 = icmp eq i32 %210, 31744
  br i1 %211, label %212, label %223

212:                                              ; preds = %207
  %213 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %214 = getelementptr inbounds %struct.anon, ptr %213, i32 0, i32 5
  %215 = load i32, ptr %214, align 4, !tbaa !26
  %216 = icmp eq i32 %215, 992
  br i1 %216, label %217, label %223

217:                                              ; preds = %212
  %218 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %219 = getelementptr inbounds %struct.anon, ptr %218, i32 0, i32 6
  %220 = load i32, ptr %219, align 4, !tbaa !27
  %221 = icmp eq i32 %220, 31
  br i1 %221, label %222, label %223

222:                                              ; preds = %217
  store i32 6408, ptr %15, align 4, !tbaa !9
  store i32 32820, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %24, align 4, !tbaa !9
  br label %224

223:                                              ; preds = %217, %212, %207
  store i32 33319, ptr %15, align 4, !tbaa !9
  store i32 2, ptr %24, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %223, %222
  br label %225

225:                                              ; preds = %224, %206
  br label %226

226:                                              ; preds = %225, %185
  br label %235

227:                                              ; preds = %165
  store i32 6407, ptr %15, align 4, !tbaa !9
  store i32 3, ptr %24, align 4, !tbaa !9
  %228 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %229 = getelementptr inbounds %struct.anon, ptr %228, i32 0, i32 1
  %230 = load i32, ptr %229, align 4, !tbaa !17
  %231 = and i32 %230, 1
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %233, label %234

233:                                              ; preds = %227
  store i32 6408, ptr %15, align 4, !tbaa !9
  store i32 4, ptr %24, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %233, %227
  br label %235

235:                                              ; preds = %234, %226
  br label %236

236:                                              ; preds = %235, %164
  %237 = load i32, ptr %19, align 4, !tbaa !9
  %238 = load i32, ptr %20, align 4, !tbaa !9
  %239 = mul i32 %237, %238
  %240 = load i32, ptr %24, align 4, !tbaa !9
  %241 = mul i32 %239, %240
  store i32 %241, ptr %17, align 4, !tbaa !9
  br label %265

242:                                              ; preds = %124
  %243 = call i32 @query_DXT_capability()
  %244 = icmp ne i32 %243, 1
  br i1 %244, label %245, label %246

245:                                              ; preds = %242
  store ptr @.str.42, ptr @result_string_pointer, align 8, !tbaa !5
  store i32 0, ptr %6, align 4
  store i32 1, ptr %32, align 4
  br label %785

246:                                              ; preds = %242
  %247 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %248 = getelementptr inbounds %struct.anon, ptr %247, i32 0, i32 2
  %249 = load i32, ptr %248, align 4, !tbaa !20
  %250 = lshr i32 %249, 24
  %251 = sub i32 %250, 48
  switch i32 %251, label %255 [
    i32 1, label %252
    i32 3, label %253
    i32 5, label %254
  ]

252:                                              ; preds = %246
  store i32 33777, ptr %15, align 4, !tbaa !9
  store i32 8, ptr %24, align 4, !tbaa !9
  br label %255

253:                                              ; preds = %246
  store i32 33778, ptr %15, align 4, !tbaa !9
  store i32 16, ptr %24, align 4, !tbaa !9
  br label %255

254:                                              ; preds = %246
  store i32 33779, ptr %15, align 4, !tbaa !9
  store i32 16, ptr %24, align 4, !tbaa !9
  br label %255

255:                                              ; preds = %254, %253, %252, %246
  %256 = load i32, ptr %19, align 4, !tbaa !9
  %257 = add i32 %256, 3
  %258 = lshr i32 %257, 2
  %259 = load i32, ptr %20, align 4, !tbaa !9
  %260 = add i32 %259, 3
  %261 = lshr i32 %260, 2
  %262 = mul i32 %258, %261
  %263 = load i32, ptr %24, align 4, !tbaa !9
  %264 = mul i32 %262, %263
  store i32 %264, ptr %17, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %255, %236
  %266 = load i32, ptr %22, align 4, !tbaa !9
  %267 = icmp ne i32 %266, 0
  br i1 %267, label %268, label %277

268:                                              ; preds = %265
  %269 = load i32, ptr %11, align 4, !tbaa !9
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %272, label %271

271:                                              ; preds = %268
  store ptr @.str.43, ptr @result_string_pointer, align 8, !tbaa !5
  store i32 0, ptr %6, align 4
  store i32 1, ptr %32, align 4
  br label %785

272:                                              ; preds = %268
  %273 = call i32 @query_cubemap_capability()
  %274 = icmp ne i32 %273, 1
  br i1 %274, label %275, label %276

275:                                              ; preds = %272
  store ptr @.str.44, ptr @result_string_pointer, align 8, !tbaa !5
  store i32 0, ptr %6, align 4
  store i32 1, ptr %32, align 4
  br label %785

276:                                              ; preds = %272
  store i32 34069, ptr %27, align 4, !tbaa !9
  store i32 34074, ptr %28, align 4, !tbaa !9
  store i32 34067, ptr %29, align 4, !tbaa !9
  br label %282

277:                                              ; preds = %265
  %278 = load i32, ptr %11, align 4, !tbaa !9
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %281

280:                                              ; preds = %277
  store ptr @.str.45, ptr @result_string_pointer, align 8, !tbaa !5
  store i32 0, ptr %6, align 4
  store i32 1, ptr %32, align 4
  br label %785

281:                                              ; preds = %277
  store i32 3553, ptr %27, align 4, !tbaa !9
  store i32 3553, ptr %28, align 4, !tbaa !9
  store i32 3553, ptr %29, align 4, !tbaa !9
  br label %282

282:                                              ; preds = %281, %276
  %283 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 10
  %284 = getelementptr inbounds %struct.anon.0, ptr %283, i32 0, i32 0
  %285 = load i32, ptr %284, align 4, !tbaa !19
  %286 = and i32 %285, 4194304
  %287 = icmp ne i32 %286, 0
  br i1 %287, label %288, label %343

288:                                              ; preds = %282
  %289 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 7
  %290 = load i32, ptr %289, align 4, !tbaa !29
  %291 = icmp ugt i32 %290, 1
  br i1 %291, label %292, label %343

292:                                              ; preds = %288
  %293 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 7
  %294 = load i32, ptr %293, align 4, !tbaa !29
  %295 = sub i32 %294, 1
  store i32 %295, ptr %21, align 4, !tbaa !9
  %296 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %296, ptr %18, align 4, !tbaa !9
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %297

297:                                              ; preds = %339, %292
  %298 = load i32, ptr %31, align 4, !tbaa !9
  %299 = load i32, ptr %21, align 4, !tbaa !9
  %300 = icmp sle i32 %298, %299
  br i1 %300, label %301, label %342

301:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  %302 = load i32, ptr %19, align 4, !tbaa !9
  %303 = load i32, ptr %31, align 4, !tbaa !9
  %304 = lshr i32 %302, %303
  store i32 %304, ptr %33, align 4, !tbaa !9
  %305 = load i32, ptr %20, align 4, !tbaa !9
  %306 = load i32, ptr %31, align 4, !tbaa !9
  %307 = lshr i32 %305, %306
  store i32 %307, ptr %34, align 4, !tbaa !9
  %308 = load i32, ptr %33, align 4, !tbaa !9
  %309 = icmp slt i32 %308, 1
  br i1 %309, label %310, label %311

310:                                              ; preds = %301
  store i32 1, ptr %33, align 4, !tbaa !9
  br label %311

311:                                              ; preds = %310, %301
  %312 = load i32, ptr %34, align 4, !tbaa !9
  %313 = icmp slt i32 %312, 1
  br i1 %313, label %314, label %315

314:                                              ; preds = %311
  store i32 1, ptr %34, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %314, %311
  %316 = load i32, ptr %23, align 4, !tbaa !9
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %318, label %326

318:                                              ; preds = %315
  %319 = load i32, ptr %33, align 4, !tbaa !9
  %320 = load i32, ptr %34, align 4, !tbaa !9
  %321 = mul nsw i32 %319, %320
  %322 = load i32, ptr %24, align 4, !tbaa !9
  %323 = mul nsw i32 %321, %322
  %324 = load i32, ptr %18, align 4, !tbaa !9
  %325 = add i32 %324, %323
  store i32 %325, ptr %18, align 4, !tbaa !9
  br label %338

326:                                              ; preds = %315
  %327 = load i32, ptr %33, align 4, !tbaa !9
  %328 = add nsw i32 %327, 3
  %329 = sdiv i32 %328, 4
  %330 = load i32, ptr %34, align 4, !tbaa !9
  %331 = add nsw i32 %330, 3
  %332 = sdiv i32 %331, 4
  %333 = mul nsw i32 %329, %332
  %334 = load i32, ptr %24, align 4, !tbaa !9
  %335 = mul nsw i32 %333, %334
  %336 = load i32, ptr %18, align 4, !tbaa !9
  %337 = add i32 %336, %335
  store i32 %337, ptr %18, align 4, !tbaa !9
  br label %338

338:                                              ; preds = %326, %318
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %339

339:                                              ; preds = %338
  %340 = load i32, ptr %31, align 4, !tbaa !9
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %31, align 4, !tbaa !9
  br label %297, !llvm.loop !30

342:                                              ; preds = %297
  br label %345

343:                                              ; preds = %288, %282
  store i32 0, ptr %21, align 4, !tbaa !9
  %344 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %344, ptr %18, align 4, !tbaa !9
  br label %345

345:                                              ; preds = %343, %342
  %346 = load i32, ptr %18, align 4, !tbaa !9
  %347 = zext i32 %346 to i64
  %348 = call noalias ptr @malloc(i64 noundef %347) #6
  store ptr %348, ptr %16, align 8, !tbaa !5
  %349 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %349, ptr %14, align 4, !tbaa !9
  %350 = load i32, ptr %14, align 4, !tbaa !9
  %351 = icmp eq i32 %350, 0
  br i1 %351, label %352, label %353

352:                                              ; preds = %345
  call void @glGenTextures(i32 noundef 1, ptr noundef %14)
  br label %353

353:                                              ; preds = %352, %345
  %354 = load i32, ptr %29, align 4, !tbaa !9
  %355 = load i32, ptr %14, align 4, !tbaa !9
  call void @glBindTexture(i32 noundef %354, i32 noundef %355)
  %356 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %356, ptr %26, align 4, !tbaa !9
  br label %357

357:                                              ; preds = %750, %353
  %358 = load i32, ptr %26, align 4, !tbaa !9
  %359 = load i32, ptr %28, align 4, !tbaa !9
  %360 = icmp ule i32 %358, %359
  br i1 %360, label %361, label %753

361:                                              ; preds = %357
  %362 = load i32, ptr %13, align 4, !tbaa !9
  %363 = load i32, ptr %18, align 4, !tbaa !9
  %364 = add i32 %362, %363
  %365 = load i32, ptr %8, align 4, !tbaa !9
  %366 = icmp ule i32 %364, %365
  br i1 %366, label %367, label %746

367:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %368 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %368, ptr %35, align 4, !tbaa !9
  %369 = load ptr, ptr %16, align 8, !tbaa !5
  %370 = load ptr, ptr %7, align 8, !tbaa !5
  %371 = load i32, ptr %13, align 4, !tbaa !9
  %372 = zext i32 %371 to i64
  %373 = getelementptr inbounds i8, ptr %370, i64 %372
  %374 = load i32, ptr %18, align 4, !tbaa !9
  %375 = zext i32 %374 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %369, ptr align 1 %373, i64 %375, i1 false)
  %376 = load i32, ptr %18, align 4, !tbaa !9
  %377 = load i32, ptr %13, align 4, !tbaa !9
  %378 = add i32 %377, %376
  store i32 %378, ptr %13, align 4, !tbaa !9
  %379 = load i32, ptr %23, align 4, !tbaa !9
  %380 = icmp ne i32 %379, 0
  br i1 %380, label %381, label %670

381:                                              ; preds = %367
  %382 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %383 = getelementptr inbounds %struct.anon, ptr %382, i32 0, i32 4
  %384 = load i32, ptr %383, align 4, !tbaa !25
  %385 = icmp eq i32 %384, 16711680
  br i1 %385, label %386, label %430

386:                                              ; preds = %381
  %387 = load i32, ptr %24, align 4, !tbaa !9
  %388 = icmp eq i32 %387, 3
  br i1 %388, label %389, label %392

389:                                              ; preds = %386
  %390 = load i32, ptr %15, align 4, !tbaa !9
  %391 = icmp eq i32 %390, 6407
  br i1 %391, label %398, label %392

392:                                              ; preds = %389, %386
  %393 = load i32, ptr %24, align 4, !tbaa !9
  %394 = icmp eq i32 %393, 4
  br i1 %394, label %395, label %430

395:                                              ; preds = %392
  %396 = load i32, ptr %15, align 4, !tbaa !9
  %397 = icmp eq i32 %396, 6408
  br i1 %397, label %398, label %430

398:                                              ; preds = %395, %389
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %399

399:                                              ; preds = %425, %398
  %400 = load i32, ptr %31, align 4, !tbaa !9
  %401 = load i32, ptr %18, align 4, !tbaa !9
  %402 = icmp slt i32 %400, %401
  br i1 %402, label %403, label %429

403:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #5
  %404 = load ptr, ptr %16, align 8, !tbaa !5
  %405 = load i32, ptr %31, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds i8, ptr %404, i64 %406
  %408 = load i8, ptr %407, align 1, !tbaa !32
  store i8 %408, ptr %36, align 1, !tbaa !32
  %409 = load ptr, ptr %16, align 8, !tbaa !5
  %410 = load i32, ptr %31, align 4, !tbaa !9
  %411 = add nsw i32 %410, 2
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds i8, ptr %409, i64 %412
  %414 = load i8, ptr %413, align 1, !tbaa !32
  %415 = load ptr, ptr %16, align 8, !tbaa !5
  %416 = load i32, ptr %31, align 4, !tbaa !9
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i8, ptr %415, i64 %417
  store i8 %414, ptr %418, align 1, !tbaa !32
  %419 = load i8, ptr %36, align 1, !tbaa !32
  %420 = load ptr, ptr %16, align 8, !tbaa !5
  %421 = load i32, ptr %31, align 4, !tbaa !9
  %422 = add nsw i32 %421, 2
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i8, ptr %420, i64 %423
  store i8 %419, ptr %424, align 1, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #5
  br label %425

425:                                              ; preds = %403
  %426 = load i32, ptr %24, align 4, !tbaa !9
  %427 = load i32, ptr %31, align 4, !tbaa !9
  %428 = add nsw i32 %427, %426
  store i32 %428, ptr %31, align 4, !tbaa !9
  br label %399, !llvm.loop !33

429:                                              ; preds = %399
  br label %662

430:                                              ; preds = %395, %392, %381
  %431 = load i32, ptr %24, align 4, !tbaa !9
  %432 = icmp eq i32 %431, 2
  br i1 %432, label %433, label %543

433:                                              ; preds = %430
  %434 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %435 = getelementptr inbounds %struct.anon, ptr %434, i32 0, i32 4
  %436 = load i32, ptr %435, align 4, !tbaa !25
  %437 = icmp eq i32 %436, 63488
  br i1 %437, label %443, label %438

438:                                              ; preds = %433
  %439 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %440 = getelementptr inbounds %struct.anon, ptr %439, i32 0, i32 4
  %441 = load i32, ptr %440, align 4, !tbaa !25
  %442 = icmp eq i32 %441, 31744
  br i1 %442, label %443, label %543

443:                                              ; preds = %438, %433
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %444

444:                                              ; preds = %538, %443
  %445 = load i32, ptr %31, align 4, !tbaa !9
  %446 = load i32, ptr %18, align 4, !tbaa !9
  %447 = icmp slt i32 %445, %446
  br i1 %447, label %448, label %542

448:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 2, ptr %37) #5
  %449 = load ptr, ptr %16, align 8, !tbaa !5
  %450 = load i32, ptr %31, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i8, ptr %449, i64 %451
  %453 = load i8, ptr %452, align 1, !tbaa !32
  %454 = zext i8 %453 to i32
  %455 = shl i32 %454, 0
  %456 = load ptr, ptr %16, align 8, !tbaa !5
  %457 = load i32, ptr %31, align 4, !tbaa !9
  %458 = add nsw i32 %457, 1
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds i8, ptr %456, i64 %459
  %461 = load i8, ptr %460, align 1, !tbaa !32
  %462 = zext i8 %461 to i32
  %463 = shl i32 %462, 8
  %464 = or i32 %455, %463
  %465 = trunc i32 %464 to i16
  store i16 %465, ptr %37, align 2, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #5
  %466 = load i16, ptr %37, align 2, !tbaa !34
  %467 = zext i16 %466 to i32
  %468 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %469 = getelementptr inbounds %struct.anon, ptr %468, i32 0, i32 4
  %470 = load i32, ptr %469, align 4, !tbaa !25
  %471 = and i32 %467, %470
  %472 = lshr i32 %471, 10
  %473 = trunc i32 %472 to i8
  store i8 %473, ptr %38, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #5
  %474 = load i16, ptr %37, align 2, !tbaa !34
  %475 = zext i16 %474 to i32
  %476 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %477 = getelementptr inbounds %struct.anon, ptr %476, i32 0, i32 5
  %478 = load i32, ptr %477, align 4, !tbaa !26
  %479 = and i32 %475, %478
  %480 = lshr i32 %479, 5
  %481 = trunc i32 %480 to i8
  store i8 %481, ptr %39, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #5
  %482 = load i16, ptr %37, align 2, !tbaa !34
  %483 = zext i16 %482 to i32
  %484 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %485 = getelementptr inbounds %struct.anon, ptr %484, i32 0, i32 6
  %486 = load i32, ptr %485, align 4, !tbaa !27
  %487 = and i32 %483, %486
  %488 = lshr i32 %487, 0
  %489 = trunc i32 %488 to i8
  store i8 %489, ptr %40, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #5
  store i8 1, ptr %41, align 1, !tbaa !32
  %490 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %491 = getelementptr inbounds %struct.anon, ptr %490, i32 0, i32 7
  %492 = load i32, ptr %491, align 4, !tbaa !28
  %493 = icmp ne i32 %492, 0
  br i1 %493, label %494, label %503

494:                                              ; preds = %448
  %495 = load i16, ptr %37, align 2, !tbaa !34
  %496 = zext i16 %495 to i32
  %497 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %498 = getelementptr inbounds %struct.anon, ptr %497, i32 0, i32 7
  %499 = load i32, ptr %498, align 4, !tbaa !28
  %500 = and i32 %496, %499
  %501 = lshr i32 %500, 15
  %502 = trunc i32 %501 to i8
  store i8 %502, ptr %41, align 1, !tbaa !32
  br label %503

503:                                              ; preds = %494, %448
  call void @llvm.lifetime.start.p0(i64 2, ptr %42) #5
  %504 = load i8, ptr %38, align 1, !tbaa !32
  %505 = sext i8 %504 to i32
  %506 = shl i32 %505, 11
  %507 = load i8, ptr %39, align 1, !tbaa !32
  %508 = sext i8 %507 to i32
  %509 = shl i32 %508, 6
  %510 = or i32 %506, %509
  %511 = load i8, ptr %40, align 1, !tbaa !32
  %512 = sext i8 %511 to i32
  %513 = shl i32 %512, 1
  %514 = or i32 %510, %513
  %515 = load i8, ptr %41, align 1, !tbaa !32
  %516 = sext i8 %515 to i32
  %517 = or i32 %514, %516
  %518 = trunc i32 %517 to i16
  store i16 %518, ptr %42, align 2, !tbaa !34
  %519 = load i16, ptr %42, align 2, !tbaa !34
  %520 = zext i16 %519 to i32
  %521 = ashr i32 %520, 0
  %522 = and i32 %521, 255
  %523 = trunc i32 %522 to i8
  %524 = load ptr, ptr %16, align 8, !tbaa !5
  %525 = load i32, ptr %31, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i8, ptr %524, i64 %526
  store i8 %523, ptr %527, align 1, !tbaa !32
  %528 = load i16, ptr %42, align 2, !tbaa !34
  %529 = zext i16 %528 to i32
  %530 = ashr i32 %529, 8
  %531 = and i32 %530, 255
  %532 = trunc i32 %531 to i8
  %533 = load ptr, ptr %16, align 8, !tbaa !5
  %534 = load i32, ptr %31, align 4, !tbaa !9
  %535 = add nsw i32 %534, 1
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds i8, ptr %533, i64 %536
  store i8 %532, ptr %537, align 1, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 2, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %37) #5
  br label %538

538:                                              ; preds = %503
  %539 = load i32, ptr %24, align 4, !tbaa !9
  %540 = load i32, ptr %31, align 4, !tbaa !9
  %541 = add nsw i32 %540, %539
  store i32 %541, ptr %31, align 4, !tbaa !9
  br label %444, !llvm.loop !36

542:                                              ; preds = %444
  br label %661

543:                                              ; preds = %438, %430
  %544 = load i32, ptr %24, align 4, !tbaa !9
  %545 = icmp eq i32 %544, 2
  br i1 %545, label %546, label %660

546:                                              ; preds = %543
  %547 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %548 = getelementptr inbounds %struct.anon, ptr %547, i32 0, i32 4
  %549 = load i32, ptr %548, align 4, !tbaa !25
  %550 = icmp eq i32 %549, 3840
  br i1 %550, label %551, label %660

551:                                              ; preds = %546
  %552 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %553 = getelementptr inbounds %struct.anon, ptr %552, i32 0, i32 5
  %554 = load i32, ptr %553, align 4, !tbaa !26
  %555 = icmp eq i32 %554, 240
  br i1 %555, label %556, label %660

556:                                              ; preds = %551
  %557 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %558 = getelementptr inbounds %struct.anon, ptr %557, i32 0, i32 6
  %559 = load i32, ptr %558, align 4, !tbaa !27
  %560 = icmp eq i32 %559, 15
  br i1 %560, label %561, label %660

561:                                              ; preds = %556
  %562 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %563 = getelementptr inbounds %struct.anon, ptr %562, i32 0, i32 7
  %564 = load i32, ptr %563, align 4, !tbaa !28
  %565 = icmp eq i32 %564, 61440
  br i1 %565, label %566, label %660

566:                                              ; preds = %561
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %567

567:                                              ; preds = %655, %566
  %568 = load i32, ptr %31, align 4, !tbaa !9
  %569 = load i32, ptr %18, align 4, !tbaa !9
  %570 = icmp slt i32 %568, %569
  br i1 %570, label %571, label %659

571:                                              ; preds = %567
  call void @llvm.lifetime.start.p0(i64 2, ptr %43) #5
  %572 = load ptr, ptr %16, align 8, !tbaa !5
  %573 = load i32, ptr %31, align 4, !tbaa !9
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds i8, ptr %572, i64 %574
  %576 = load i8, ptr %575, align 1, !tbaa !32
  %577 = zext i8 %576 to i32
  %578 = shl i32 %577, 0
  %579 = load ptr, ptr %16, align 8, !tbaa !5
  %580 = load i32, ptr %31, align 4, !tbaa !9
  %581 = add nsw i32 %580, 1
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds i8, ptr %579, i64 %582
  %584 = load i8, ptr %583, align 1, !tbaa !32
  %585 = zext i8 %584 to i32
  %586 = shl i32 %585, 8
  %587 = or i32 %578, %586
  %588 = trunc i32 %587 to i16
  store i16 %588, ptr %43, align 2, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #5
  %589 = load i16, ptr %43, align 2, !tbaa !34
  %590 = zext i16 %589 to i32
  %591 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %592 = getelementptr inbounds %struct.anon, ptr %591, i32 0, i32 4
  %593 = load i32, ptr %592, align 4, !tbaa !25
  %594 = and i32 %590, %593
  %595 = lshr i32 %594, 8
  %596 = trunc i32 %595 to i8
  store i8 %596, ptr %44, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #5
  %597 = load i16, ptr %43, align 2, !tbaa !34
  %598 = zext i16 %597 to i32
  %599 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %600 = getelementptr inbounds %struct.anon, ptr %599, i32 0, i32 5
  %601 = load i32, ptr %600, align 4, !tbaa !26
  %602 = and i32 %598, %601
  %603 = lshr i32 %602, 4
  %604 = trunc i32 %603 to i8
  store i8 %604, ptr %45, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #5
  %605 = load i16, ptr %43, align 2, !tbaa !34
  %606 = zext i16 %605 to i32
  %607 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %608 = getelementptr inbounds %struct.anon, ptr %607, i32 0, i32 6
  %609 = load i32, ptr %608, align 4, !tbaa !27
  %610 = and i32 %606, %609
  %611 = lshr i32 %610, 0
  %612 = trunc i32 %611 to i8
  store i8 %612, ptr %46, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %47) #5
  %613 = load i16, ptr %43, align 2, !tbaa !34
  %614 = zext i16 %613 to i32
  %615 = getelementptr inbounds %struct.DDS_header, ptr %12, i32 0, i32 9
  %616 = getelementptr inbounds %struct.anon, ptr %615, i32 0, i32 7
  %617 = load i32, ptr %616, align 4, !tbaa !28
  %618 = and i32 %614, %617
  %619 = lshr i32 %618, 12
  %620 = trunc i32 %619 to i8
  store i8 %620, ptr %47, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 2, ptr %48) #5
  %621 = load i8, ptr %44, align 1, !tbaa !32
  %622 = sext i8 %621 to i32
  %623 = shl i32 %622, 12
  %624 = load i8, ptr %45, align 1, !tbaa !32
  %625 = sext i8 %624 to i32
  %626 = shl i32 %625, 8
  %627 = or i32 %623, %626
  %628 = load i8, ptr %46, align 1, !tbaa !32
  %629 = sext i8 %628 to i32
  %630 = shl i32 %629, 4
  %631 = or i32 %627, %630
  %632 = load i8, ptr %47, align 1, !tbaa !32
  %633 = sext i8 %632 to i32
  %634 = or i32 %631, %633
  %635 = trunc i32 %634 to i16
  store i16 %635, ptr %48, align 2, !tbaa !34
  %636 = load i16, ptr %48, align 2, !tbaa !34
  %637 = zext i16 %636 to i32
  %638 = ashr i32 %637, 0
  %639 = and i32 %638, 255
  %640 = trunc i32 %639 to i8
  %641 = load ptr, ptr %16, align 8, !tbaa !5
  %642 = load i32, ptr %31, align 4, !tbaa !9
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds i8, ptr %641, i64 %643
  store i8 %640, ptr %644, align 1, !tbaa !32
  %645 = load i16, ptr %48, align 2, !tbaa !34
  %646 = zext i16 %645 to i32
  %647 = ashr i32 %646, 8
  %648 = and i32 %647, 255
  %649 = trunc i32 %648 to i8
  %650 = load ptr, ptr %16, align 8, !tbaa !5
  %651 = load i32, ptr %31, align 4, !tbaa !9
  %652 = add nsw i32 %651, 1
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds i8, ptr %650, i64 %653
  store i8 %649, ptr %654, align 1, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 2, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %43) #5
  br label %655

655:                                              ; preds = %571
  %656 = load i32, ptr %24, align 4, !tbaa !9
  %657 = load i32, ptr %31, align 4, !tbaa !9
  %658 = add nsw i32 %657, %656
  store i32 %658, ptr %31, align 4, !tbaa !9
  br label %567, !llvm.loop !37

659:                                              ; preds = %567
  br label %660

660:                                              ; preds = %659, %561, %556, %551, %546, %543
  br label %661

661:                                              ; preds = %660, %542
  br label %662

662:                                              ; preds = %661, %429
  %663 = load i32, ptr %26, align 4, !tbaa !9
  %664 = load i32, ptr %15, align 4, !tbaa !9
  %665 = load i32, ptr %19, align 4, !tbaa !9
  %666 = load i32, ptr %20, align 4, !tbaa !9
  %667 = load i32, ptr %15, align 4, !tbaa !9
  %668 = load i32, ptr %30, align 4, !tbaa !9
  %669 = load ptr, ptr %16, align 8, !tbaa !5
  call void @glTexImage2D(i32 noundef %663, i32 noundef 0, i32 noundef %664, i32 noundef %665, i32 noundef %666, i32 noundef 0, i32 noundef %667, i32 noundef %668, ptr noundef %669)
  br label %678

670:                                              ; preds = %367
  %671 = load ptr, ptr @soilGlCompressedTexImage2D, align 8, !tbaa !5
  %672 = load i32, ptr %26, align 4, !tbaa !9
  %673 = load i32, ptr %15, align 4, !tbaa !9
  %674 = load i32, ptr %19, align 4, !tbaa !9
  %675 = load i32, ptr %20, align 4, !tbaa !9
  %676 = load i32, ptr %17, align 4, !tbaa !9
  %677 = load ptr, ptr %16, align 8, !tbaa !5
  call void %671(i32 noundef %672, i32 noundef 0, i32 noundef %673, i32 noundef %674, i32 noundef %675, i32 noundef 0, i32 noundef %676, ptr noundef %677)
  br label %678

678:                                              ; preds = %670, %662
  store i32 1, ptr %31, align 4, !tbaa !9
  br label %679

679:                                              ; preds = %742, %678
  %680 = load i32, ptr %31, align 4, !tbaa !9
  %681 = load i32, ptr %21, align 4, !tbaa !9
  %682 = icmp sle i32 %680, %681
  br i1 %682, label %683, label %745

683:                                              ; preds = %679
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  %684 = load i32, ptr %19, align 4, !tbaa !9
  %685 = load i32, ptr %31, align 4, !tbaa !9
  %686 = lshr i32 %684, %685
  store i32 %686, ptr %49, align 4, !tbaa !9
  %687 = load i32, ptr %20, align 4, !tbaa !9
  %688 = load i32, ptr %31, align 4, !tbaa !9
  %689 = lshr i32 %687, %688
  store i32 %689, ptr %50, align 4, !tbaa !9
  %690 = load i32, ptr %49, align 4, !tbaa !9
  %691 = icmp slt i32 %690, 1
  br i1 %691, label %692, label %693

692:                                              ; preds = %683
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %693

693:                                              ; preds = %692, %683
  %694 = load i32, ptr %50, align 4, !tbaa !9
  %695 = icmp slt i32 %694, 1
  br i1 %695, label %696, label %697

696:                                              ; preds = %693
  store i32 1, ptr %50, align 4, !tbaa !9
  br label %697

697:                                              ; preds = %696, %693
  %698 = load i32, ptr %23, align 4, !tbaa !9
  %699 = icmp ne i32 %698, 0
  br i1 %699, label %700, label %717

700:                                              ; preds = %697
  %701 = load i32, ptr %49, align 4, !tbaa !9
  %702 = load i32, ptr %50, align 4, !tbaa !9
  %703 = mul nsw i32 %701, %702
  %704 = load i32, ptr %24, align 4, !tbaa !9
  %705 = mul nsw i32 %703, %704
  store i32 %705, ptr %51, align 4, !tbaa !9
  %706 = load i32, ptr %26, align 4, !tbaa !9
  %707 = load i32, ptr %31, align 4, !tbaa !9
  %708 = load i32, ptr %15, align 4, !tbaa !9
  %709 = load i32, ptr %49, align 4, !tbaa !9
  %710 = load i32, ptr %50, align 4, !tbaa !9
  %711 = load i32, ptr %15, align 4, !tbaa !9
  %712 = load i32, ptr %30, align 4, !tbaa !9
  %713 = load ptr, ptr %16, align 8, !tbaa !5
  %714 = load i32, ptr %35, align 4, !tbaa !9
  %715 = zext i32 %714 to i64
  %716 = getelementptr inbounds i8, ptr %713, i64 %715
  call void @glTexImage2D(i32 noundef %706, i32 noundef %707, i32 noundef %708, i32 noundef %709, i32 noundef %710, i32 noundef 0, i32 noundef %711, i32 noundef %712, ptr noundef %716)
  br label %738

717:                                              ; preds = %697
  %718 = load i32, ptr %49, align 4, !tbaa !9
  %719 = add nsw i32 %718, 3
  %720 = sdiv i32 %719, 4
  %721 = load i32, ptr %50, align 4, !tbaa !9
  %722 = add nsw i32 %721, 3
  %723 = sdiv i32 %722, 4
  %724 = mul nsw i32 %720, %723
  %725 = load i32, ptr %24, align 4, !tbaa !9
  %726 = mul nsw i32 %724, %725
  store i32 %726, ptr %51, align 4, !tbaa !9
  %727 = load ptr, ptr @soilGlCompressedTexImage2D, align 8, !tbaa !5
  %728 = load i32, ptr %26, align 4, !tbaa !9
  %729 = load i32, ptr %31, align 4, !tbaa !9
  %730 = load i32, ptr %15, align 4, !tbaa !9
  %731 = load i32, ptr %49, align 4, !tbaa !9
  %732 = load i32, ptr %50, align 4, !tbaa !9
  %733 = load i32, ptr %51, align 4, !tbaa !9
  %734 = load ptr, ptr %16, align 8, !tbaa !5
  %735 = load i32, ptr %35, align 4, !tbaa !9
  %736 = zext i32 %735 to i64
  %737 = getelementptr inbounds i8, ptr %734, i64 %736
  call void %727(i32 noundef %728, i32 noundef %729, i32 noundef %730, i32 noundef %731, i32 noundef %732, i32 noundef 0, i32 noundef %733, ptr noundef %737)
  br label %738

738:                                              ; preds = %717, %700
  %739 = load i32, ptr %51, align 4, !tbaa !9
  %740 = load i32, ptr %35, align 4, !tbaa !9
  %741 = add i32 %740, %739
  store i32 %741, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  br label %742

742:                                              ; preds = %738
  %743 = load i32, ptr %31, align 4, !tbaa !9
  %744 = add nsw i32 %743, 1
  store i32 %744, ptr %31, align 4, !tbaa !9
  br label %679, !llvm.loop !38

745:                                              ; preds = %679
  store ptr @.str.46, ptr @result_string_pointer, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  br label %749

746:                                              ; preds = %361
  call void @glDeleteTextures(i32 noundef 1, ptr noundef %14)
  store i32 0, ptr %14, align 4, !tbaa !9
  %747 = load i32, ptr %28, align 4, !tbaa !9
  %748 = add i32 %747, 1
  store i32 %748, ptr %26, align 4, !tbaa !9
  store ptr @.str.47, ptr @result_string_pointer, align 8, !tbaa !5
  br label %749

749:                                              ; preds = %746, %745
  br label %750

750:                                              ; preds = %749
  %751 = load i32, ptr %26, align 4, !tbaa !9
  %752 = add i32 %751, 1
  store i32 %752, ptr %26, align 4, !tbaa !9
  br label %357, !llvm.loop !39

753:                                              ; preds = %357
  %754 = load ptr, ptr %16, align 8, !tbaa !5
  call void @SOIL_free_image_data(ptr noundef %754)
  %755 = load i32, ptr %14, align 4, !tbaa !9
  %756 = icmp ne i32 %755, 0
  br i1 %756, label %757, label %782

757:                                              ; preds = %753
  %758 = load i32, ptr %21, align 4, !tbaa !9
  %759 = icmp sgt i32 %758, 0
  br i1 %759, label %760, label %763

760:                                              ; preds = %757
  %761 = load i32, ptr %29, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %761, i32 noundef 10240, i32 noundef 9729)
  %762 = load i32, ptr %29, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %762, i32 noundef 10241, i32 noundef 9987)
  br label %766

763:                                              ; preds = %757
  %764 = load i32, ptr %29, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %764, i32 noundef 10240, i32 noundef 9729)
  %765 = load i32, ptr %29, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %765, i32 noundef 10241, i32 noundef 9729)
  br label %766

766:                                              ; preds = %763, %760
  %767 = load i32, ptr %10, align 4, !tbaa !9
  %768 = and i32 %767, 4
  %769 = icmp ne i32 %768, 0
  br i1 %769, label %770, label %774

770:                                              ; preds = %766
  %771 = load i32, ptr %29, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %771, i32 noundef 10242, i32 noundef 10497)
  %772 = load i32, ptr %29, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %772, i32 noundef 10243, i32 noundef 10497)
  %773 = load i32, ptr %29, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %773, i32 noundef 32882, i32 noundef 10497)
  br label %781

774:                                              ; preds = %766
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  store i32 33071, ptr %52, align 4, !tbaa !9
  %775 = load i32, ptr %29, align 4, !tbaa !9
  %776 = load i32, ptr %52, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %775, i32 noundef 10242, i32 noundef %776)
  %777 = load i32, ptr %29, align 4, !tbaa !9
  %778 = load i32, ptr %52, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %777, i32 noundef 10243, i32 noundef %778)
  %779 = load i32, ptr %29, align 4, !tbaa !9
  %780 = load i32, ptr %52, align 4, !tbaa !9
  call void @glTexParameteri(i32 noundef %779, i32 noundef 32882, i32 noundef %780)
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  br label %781

781:                                              ; preds = %774, %770
  br label %782

782:                                              ; preds = %781, %753
  br label %783

783:                                              ; preds = %782, %123, %101, %94, %88, %80, %72, %67
  %784 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %784, ptr %6, align 4
  store i32 1, ptr %32, align 4
  br label %785

785:                                              ; preds = %783, %280, %275, %271, %245, %60, %55
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  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
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  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 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 128, ptr %12) #5
  %786 = load i32, ptr %6, align 4
  ret i32 %786
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @query_cubemap_capability() #3

declare void @glGenTextures(i32 noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @query_DXT_capability() #3

declare void @glBindTexture(i32 noundef, i32 noundef) #4

declare void @glTexImage2D(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) #4

declare void @glTexParameteri(i32 noundef, i32 noundef, i32 noundef) #4

declare void @glDeleteTextures(i32 noundef, ptr noundef) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind allocsize(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 = { "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 #5 = { nounwind }
attributes #6 = { nounwind allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !7, i64 32, !13, i64 76, !14, i64 108, !10, i64 124}
!13 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!14 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!15 = !{!12, !10, i64 4}
!16 = !{!12, !10, i64 8}
!17 = !{!12, !10, i64 80}
!18 = !{!12, !10, i64 76}
!19 = !{!12, !10, i64 108}
!20 = !{!12, !10, i64 84}
!21 = !{!12, !10, i64 16}
!22 = !{!12, !10, i64 12}
!23 = !{!12, !10, i64 112}
!24 = !{!12, !10, i64 88}
!25 = !{!12, !10, i64 92}
!26 = !{!12, !10, i64 96}
!27 = !{!12, !10, i64 100}
!28 = !{!12, !10, i64 104}
!29 = !{!12, !10, i64 28}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!7, !7, i64 0}
!33 = distinct !{!33, !31}
!34 = !{!35, !35, i64 0}
!35 = !{!"short", !7, i64 0}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}


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

@result_string_pointer = external dso_local local_unnamed_addr global ptr, align 8
@soilGlCompressedTexImage2D = external hidden local_unnamed_addr global ptr, align 8
@.str.38 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [47 x i8], align 1
@switch.table.SOIL_direct_load_DDS_from_memory = private unnamed_addr constant [5 x i32] [i32 8, i32 16, i32 16, i32 16, i32 16], align 4
@switch.table.SOIL_direct_load_DDS_from_memory.1 = private unnamed_addr constant [5 x i32] [i32 33777, i32 0, i32 33778, i32 0, i32 33779], align 4

; 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: 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 nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @SOIL_free_image_data(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local i32 @SOIL_direct_load_DDS_from_memory(ptr noundef readonly %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #3 {
  %6 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #6
  store i32 0, ptr %6, align 4, !tbaa !5
  %7 = icmp eq ptr %0, null
  br i1 %7, label %8, label %9

8:                                                ; preds = %5
  store ptr @.str.38, ptr @result_string_pointer, align 8, !tbaa !9
  br label %424

9:                                                ; preds = %5
  %10 = icmp ult i32 %1, 128
  br i1 %10, label %11, label %12

11:                                               ; preds = %9
  store ptr @.str.39, ptr @result_string_pointer, align 8, !tbaa !9
  br label %424

12:                                               ; preds = %9
  %.sroa.0.0.copyload = load i32, ptr %0, align 1
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 4
  %.sroa.4.0.copyload = load i32, ptr %.sroa.4.0..sroa_idx, align 1
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 8
  %.sroa.5.0.copyload = load i32, ptr %.sroa.5.0..sroa_idx, align 1
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 12
  %13 = load <2 x i32>, ptr %.sroa.6.0..sroa_idx, align 1
  %.sroa.8257.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 28
  %.sroa.8257.0.copyload = load i32, ptr %.sroa.8257.0..sroa_idx, align 1
  %.sroa.10259.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 76
  %.sroa.10259.0.copyload = load i32, ptr %.sroa.10259.0..sroa_idx, align 1
  %.sroa.11.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 80
  %.sroa.11.0.copyload = load i32, ptr %.sroa.11.0..sroa_idx, align 1
  %.sroa.15.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 84
  %.sroa.15.0.copyload = load i32, ptr %.sroa.15.0..sroa_idx, align 1
  %.sroa.19.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 88
  %.sroa.19.0.copyload = load i32, ptr %.sroa.19.0..sroa_idx, align 1
  %.sroa.21.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 92
  %14 = load <4 x i32>, ptr %.sroa.21.0..sroa_idx, align 1
  %.fr = freeze <4 x i32> %14
  %.sroa.50.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 108
  %.sroa.50.0.copyload = load i32, ptr %.sroa.50.0..sroa_idx, align 1
  %.sroa.52.0..sroa_idx = getelementptr inbounds i8, ptr %0, i64 112
  %.sroa.52.0.copyload = load i32, ptr %.sroa.52.0..sroa_idx, align 1
  store ptr @.str.40, ptr @result_string_pointer, align 8, !tbaa !9
  %15 = icmp eq i32 %.sroa.0.0.copyload, 542327876
  %16 = icmp eq i32 %.sroa.4.0.copyload, 124
  %or.cond78.not356 = select i1 %15, i1 %16, i1 false
  %17 = and i32 %.sroa.5.0.copyload, 4103
  %.not = icmp eq i32 %17, 4103
  %or.cond = select i1 %or.cond78.not356, i1 %.not, i1 false
  br i1 %or.cond, label %18, label %422

18:                                               ; preds = %12
  %19 = and i32 %.sroa.11.0.copyload, 131140
  %20 = icmp eq i32 %19, 0
  %21 = icmp ne i32 %.sroa.10259.0.copyload, 32
  %or.cond82 = select i1 %20, i1 true, i1 %21
  %22 = and i32 %.sroa.50.0.copyload, 4096
  %23 = icmp eq i32 %22, 0
  %or.cond349 = select i1 %or.cond82, i1 true, i1 %23
  br i1 %or.cond349, label %422, label %24

24:                                               ; preds = %18
  %25 = and i32 %.sroa.11.0.copyload, 4
  %26 = icmp eq i32 %25, 0
  %27 = and i32 %.sroa.15.0.copyload, -33554433
  %28 = icmp eq i32 %27, 827611204
  %29 = icmp eq i32 %.sroa.15.0.copyload, 894720068
  %30 = or i1 %29, %28
  %or.cond11 = select i1 %26, i1 true, i1 %30
  br i1 %or.cond11, label %31, label %422

31:                                               ; preds = %24
  store ptr @.str.41, ptr @result_string_pointer, align 8, !tbaa !9
  br i1 %26, label %32, label %63

32:                                               ; preds = %31
  switch i32 %.sroa.19.0.copyload, label %56 [
    i32 8, label %33
    i32 16, label %40
  ]

33:                                               ; preds = %32
  %34 = shufflevector <4 x i32> %.fr, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
  %35 = icmp eq <2 x i32> %34, <i32 224, i32 28>
  %36 = extractelement <2 x i1> %35, i64 0
  %37 = extractelement <2 x i1> %35, i64 1
  %or.cond15 = select i1 %36, i1 %37, i1 false
  %38 = extractelement <4 x i32> %.fr, i64 2
  %39 = icmp eq i32 %38, 3
  %or.cond19 = and i1 %or.cond15, %39
  %. = select i1 %or.cond19, i32 32818, i32 5121
  %.350 = select i1 %or.cond19, i32 6407, i32 6409
  br label %58

40:                                               ; preds = %32
  %41 = extractelement <4 x i32> %.fr, i64 0
  %42 = icmp eq i32 %41, 63488
  %43 = extractelement <4 x i32> %.fr, i64 1
  %44 = icmp eq i32 %43, 2016
  %or.cond23 = and i1 %42, %44
  %45 = extractelement <4 x i32> %.fr, i64 2
  %46 = icmp eq i32 %45, 31
  %or.cond27 = and i1 %or.cond23, %46
  br i1 %or.cond27, label %58, label %47

47:                                               ; preds = %40
  %48 = icmp ne <4 x i32> %.fr, <i32 3840, i32 240, i32 15, i32 61440>
  %49 = bitcast <4 x i1> %48 to i4
  %50 = icmp eq i4 %49, 0
  br i1 %50, label %58, label %51

51:                                               ; preds = %47
  %52 = shufflevector <4 x i32> %.fr, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
  %53 = icmp eq <2 x i32> %52, <i32 31744, i32 992>
  %54 = extractelement <2 x i1> %53, i64 0
  %55 = extractelement <2 x i1> %53, i64 1
  %or.cond43 = select i1 %54, i1 %55, i1 false
  %or.cond47 = and i1 %or.cond43, %46
  %.351 = select i1 %or.cond47, i32 32820, i32 5121
  %.352 = select i1 %or.cond47, i32 6408, i32 33319
  br label %58

56:                                               ; preds = %32
  %57 = and i32 %.sroa.11.0.copyload, 1
  %.not332 = icmp eq i32 %57, 0
  %spec.select = select i1 %.not332, i32 3, i32 4
  %spec.select353 = select i1 %.not332, i32 6407, i32 6408
  br label %58

58:                                               ; preds = %56, %51, %47, %40, %33
  %.0321 = phi i32 [ %., %33 ], [ 32820, %40 ], [ 32819, %47 ], [ %.351, %51 ], [ 5121, %56 ]
  %.0312 = phi i32 [ 1, %33 ], [ 2, %40 ], [ 2, %47 ], [ 2, %51 ], [ %spec.select, %56 ]
  %.0305 = phi i32 [ %.350, %33 ], [ 6408, %40 ], [ 6408, %47 ], [ %.352, %51 ], [ %spec.select353, %56 ]
  %59 = extractelement <2 x i32> %13, i64 0
  %60 = extractelement <2 x i32> %13, i64 1
  %61 = mul i32 %60, %59
  %62 = mul i32 %61, %.0312
  br label %78

63:                                               ; preds = %31
  %64 = tail call i32 @query_DXT_capability()
  %.not331 = icmp eq i32 %64, 1
  br i1 %.not331, label %66, label %65

65:                                               ; preds = %63
  store ptr @.str.42, ptr @result_string_pointer, align 8, !tbaa !9
  br label %424

66:                                               ; preds = %63
  %67 = lshr i32 %.sroa.15.0.copyload, 24
  %trunc = trunc nuw i32 %67 to i8
  %switch.tableidx = add i8 %trunc, -49
  %68 = icmp ult i8 %switch.tableidx, 5
  br i1 %68, label %switch.lookup, label %71

switch.lookup:                                    ; preds = %66
  %69 = zext nneg i8 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [5 x i32], ptr @switch.table.SOIL_direct_load_DDS_from_memory, i64 0, i64 %69
  %switch.load = load i32, ptr %switch.gep, align 4
  %70 = zext nneg i8 %switch.tableidx to i64
  %switch.gep459 = getelementptr inbounds [5 x i32], ptr @switch.table.SOIL_direct_load_DDS_from_memory.1, i64 0, i64 %70
  %switch.load460 = load i32, ptr %switch.gep459, align 4
  br label %71

71:                                               ; preds = %switch.lookup, %66
  %.1313 = phi i32 [ 16, %66 ], [ %switch.load, %switch.lookup ]
  %.1306 = phi i32 [ 0, %66 ], [ %switch.load460, %switch.lookup ]
  %72 = add <2 x i32> %13, <i32 3, i32 3>
  %73 = lshr <2 x i32> %72, <i32 2, i32 2>
  %74 = extractelement <2 x i32> %73, i64 0
  %75 = extractelement <2 x i32> %73, i64 1
  %76 = mul i32 %75, %74
  %77 = mul i32 %76, %.1313
  br label %78

78:                                               ; preds = %71, %58
  %.1322 = phi i32 [ %.0321, %58 ], [ 5121, %71 ]
  %.2314 = phi i32 [ %.0312, %58 ], [ %.1313, %71 ]
  %.0307 = phi i32 [ %62, %58 ], [ %77, %71 ]
  %.2 = phi i32 [ %.0305, %58 ], [ %.1306, %71 ]
  %79 = and i32 %.sroa.52.0.copyload, 512
  %.not333 = icmp eq i32 %79, 0
  %.not334 = icmp eq i32 %4, 0
  br i1 %.not333, label %85, label %80

80:                                               ; preds = %78
  br i1 %.not334, label %81, label %82

81:                                               ; preds = %80
  store ptr @.str.43, ptr @result_string_pointer, align 8, !tbaa !9
  br label %424

82:                                               ; preds = %80
  %83 = tail call i32 @query_cubemap_capability()
  %.not336 = icmp eq i32 %83, 1
  br i1 %.not336, label %87, label %84

84:                                               ; preds = %82
  store ptr @.str.44, ptr @result_string_pointer, align 8, !tbaa !9
  br label %424

85:                                               ; preds = %78
  br i1 %.not334, label %87, label %86

86:                                               ; preds = %85
  store ptr @.str.45, ptr @result_string_pointer, align 8, !tbaa !9
  br label %424

87:                                               ; preds = %85, %82
  %.0320 = phi i32 [ 34067, %82 ], [ 3553, %85 ]
  %.0319 = phi i32 [ 34074, %82 ], [ 3553, %85 ]
  %.0318 = phi i32 [ 34069, %82 ], [ 3553, %85 ]
  %88 = and i32 %.sroa.50.0.copyload, 4194304
  %89 = icmp ne i32 %88, 0
  %90 = icmp ugt i32 %.sroa.8257.0.copyload, 1
  %or.cond50 = select i1 %89, i1 %90, i1 false
  br i1 %or.cond50, label %91, label %.loopexit360

91:                                               ; preds = %87
  %92 = add i32 %.sroa.8257.0.copyload, -1
  %.not337361 = icmp slt i32 %92, 1
  br i1 %.not337361, label %.loopexit360, label %.lr.ph

.lr.ph:                                           ; preds = %91
  br i1 %26, label %.lr.ph.split.us.preheader, label %.lr.ph.split.preheader

.lr.ph.split.us.preheader:                        ; preds = %.lr.ph
  %xtraiter = and i32 %92, 1
  %93 = icmp eq i32 %.sroa.8257.0.copyload, 2
  br i1 %93, label %.loopexit360.loopexit.unr-lcssa, label %.lr.ph.split.us.preheader.new

.lr.ph.split.us.preheader.new:                    ; preds = %.lr.ph.split.us.preheader
  %unroll_iter = and i32 %92, 2147483646
  %94 = extractelement <2 x i32> %13, i64 1
  %95 = extractelement <2 x i32> %13, i64 0
  %96 = extractelement <2 x i32> %13, i64 1
  %97 = extractelement <2 x i32> %13, i64 0
  br label %.lr.ph.split.us

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %min.iters.check = icmp ult i32 %.sroa.8257.0.copyload, 9
  br i1 %min.iters.check, label %.lr.ph.split.preheader467, label %vector.ph

.lr.ph.split.preheader467:                        ; preds = %middle.block, %.lr.ph.split.preheader
  %.0308363.ph = phi i32 [ %.0307, %.lr.ph.split.preheader ], [ %122, %middle.block ]
  %.0324362.ph = phi i32 [ 1, %.lr.ph.split.preheader ], [ %ind.end, %middle.block ]
  br label %.lr.ph.split

vector.ph:                                        ; preds = %.lr.ph.split.preheader
  %n.vec = and i32 %92, 2147483640
  %ind.end = or disjoint i32 %n.vec, 1
  %98 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.0307, i64 0
  %broadcast.splat = shufflevector <2 x i32> %13, <2 x i32> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat408 = shufflevector <2 x i32> %13, <2 x i32> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert409 = insertelement <4 x i32> poison, i32 %.2314, i64 0
  %broadcast.splat410 = shufflevector <4 x i32> %broadcast.splatinsert409, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ %98, %vector.ph ], [ %119, %vector.body ]
  %vec.phi405 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %120, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %99 = lshr <4 x i32> %broadcast.splat, %vec.ind
  %100 = lshr <4 x i32> %broadcast.splat, %step.add
  %101 = lshr <4 x i32> %broadcast.splat408, %vec.ind
  %102 = lshr <4 x i32> %broadcast.splat408, %step.add
  %103 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %99, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
  %104 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %100, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
  %105 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %101, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
  %106 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %102, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
  %107 = add nuw nsw <4 x i32> %103, <i32 3, i32 3, i32 3, i32 3>
  %108 = add nuw nsw <4 x i32> %104, <i32 3, i32 3, i32 3, i32 3>
  %109 = lshr <4 x i32> %107, <i32 2, i32 2, i32 2, i32 2>
  %110 = lshr <4 x i32> %108, <i32 2, i32 2, i32 2, i32 2>
  %111 = add nuw nsw <4 x i32> %105, <i32 3, i32 3, i32 3, i32 3>
  %112 = add nuw nsw <4 x i32> %106, <i32 3, i32 3, i32 3, i32 3>
  %113 = lshr <4 x i32> %111, <i32 2, i32 2, i32 2, i32 2>
  %114 = lshr <4 x i32> %112, <i32 2, i32 2, i32 2, i32 2>
  %115 = mul nuw nsw <4 x i32> %109, %113
  %116 = mul nuw nsw <4 x i32> %110, %114
  %117 = mul nsw <4 x i32> %115, %broadcast.splat410
  %118 = mul nsw <4 x i32> %116, %broadcast.splat410
  %119 = add <4 x i32> %117, %vec.phi
  %120 = add <4 x i32> %118, %vec.phi405
  %index.next = add nuw i32 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %121 = icmp eq i32 %index.next, %n.vec
  br i1 %121, label %middle.block, label %vector.body, !llvm.loop !11

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %120, %119
  %122 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i32 %92, %n.vec
  br i1 %cmp.n, label %.loopexit360, label %.lr.ph.split.preheader467

.lr.ph.split.us:                                  ; preds = %.lr.ph.split.us, %.lr.ph.split.us.preheader.new
  %.0308363.us = phi i32 [ %.0307, %.lr.ph.split.us.preheader.new ], [ %.1309.us.1, %.lr.ph.split.us ]
  %.0324362.us = phi i32 [ 1, %.lr.ph.split.us.preheader.new ], [ %130, %.lr.ph.split.us ]
  %niter = phi i32 [ 0, %.lr.ph.split.us.preheader.new ], [ %niter.next.1, %.lr.ph.split.us ]
  %123 = lshr i32 %94, %.0324362.us
  %124 = lshr i32 %95, %.0324362.us
  %spec.store.select.us = tail call i32 @llvm.smax.i32(i32 %123, i32 1)
  %spec.store.select83.us = tail call i32 @llvm.smax.i32(i32 %124, i32 1)
  %125 = mul nuw nsw i32 %spec.store.select.us, %spec.store.select83.us
  %.pn.us = mul nsw i32 %125, %.2314
  %.1309.us = add i32 %.pn.us, %.0308363.us
  %126 = add nuw i32 %.0324362.us, 1
  %127 = lshr i32 %96, %126
  %128 = lshr i32 %97, %126
  %spec.store.select.us.1 = tail call i32 @llvm.smax.i32(i32 %127, i32 1)
  %spec.store.select83.us.1 = tail call i32 @llvm.smax.i32(i32 %128, i32 1)
  %129 = mul nuw nsw i32 %spec.store.select.us.1, %spec.store.select83.us.1
  %.pn.us.1 = mul nsw i32 %129, %.2314
  %.1309.us.1 = add i32 %.pn.us.1, %.1309.us
  %130 = add nuw i32 %.0324362.us, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit360.loopexit.unr-lcssa, label %.lr.ph.split.us, !llvm.loop !15

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader467, %.lr.ph.split
  %.0308363 = phi i32 [ %.1309, %.lr.ph.split ], [ %.0308363.ph, %.lr.ph.split.preheader467 ]
  %.0324362 = phi i32 [ %140, %.lr.ph.split ], [ %.0324362.ph, %.lr.ph.split.preheader467 ]
  %131 = insertelement <2 x i32> poison, i32 %.0324362, i64 0
  %132 = shufflevector <2 x i32> %131, <2 x i32> poison, <2 x i32> zeroinitializer
  %133 = lshr <2 x i32> %13, %132
  %134 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %133, <2 x i32> <i32 1, i32 1>)
  %135 = add nuw nsw <2 x i32> %134, <i32 3, i32 3>
  %136 = lshr <2 x i32> %135, <i32 2, i32 2>
  %137 = extractelement <2 x i32> %136, i64 0
  %138 = extractelement <2 x i32> %136, i64 1
  %139 = mul nuw nsw i32 %138, %137
  %.pn = mul nsw i32 %139, %.2314
  %.1309 = add i32 %.pn, %.0308363
  %140 = add nuw i32 %.0324362, 1
  %exitcond.not = icmp eq i32 %140, %.sroa.8257.0.copyload
  br i1 %exitcond.not, label %.loopexit360, label %.lr.ph.split, !llvm.loop !16

.loopexit360.loopexit.unr-lcssa:                  ; preds = %.lr.ph.split.us, %.lr.ph.split.us.preheader
  %.1309.us.lcssa.ph = phi i32 [ poison, %.lr.ph.split.us.preheader ], [ %.1309.us.1, %.lr.ph.split.us ]
  %.0308363.us.unr = phi i32 [ %.0307, %.lr.ph.split.us.preheader ], [ %.1309.us.1, %.lr.ph.split.us ]
  %.0324362.us.unr = phi i32 [ 1, %.lr.ph.split.us.preheader ], [ %130, %.lr.ph.split.us ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit360, label %.lr.ph.split.us.epil

.lr.ph.split.us.epil:                             ; preds = %.loopexit360.loopexit.unr-lcssa
  %141 = extractelement <2 x i32> %13, i64 1
  %142 = lshr i32 %141, %.0324362.us.unr
  %143 = extractelement <2 x i32> %13, i64 0
  %144 = lshr i32 %143, %.0324362.us.unr
  %spec.store.select.us.epil = tail call i32 @llvm.smax.i32(i32 %142, i32 1)
  %spec.store.select83.us.epil = tail call i32 @llvm.smax.i32(i32 %144, i32 1)
  %145 = mul nuw nsw i32 %spec.store.select.us.epil, %spec.store.select83.us.epil
  %.pn.us.epil = mul nsw i32 %145, %.2314
  %.1309.us.epil = add i32 %.pn.us.epil, %.0308363.us.unr
  br label %.loopexit360

.loopexit360:                                     ; preds = %.lr.ph.split, %.lr.ph.split.us.epil, %.loopexit360.loopexit.unr-lcssa, %middle.block, %91, %87
  %.0311 = phi i32 [ 0, %87 ], [ %92, %91 ], [ %92, %middle.block ], [ %92, %.loopexit360.loopexit.unr-lcssa ], [ %92, %.lr.ph.split.us.epil ], [ %92, %.lr.ph.split ]
  %.2310 = phi i32 [ %.0307, %87 ], [ %.0307, %91 ], [ %122, %middle.block ], [ %.1309.us.lcssa.ph, %.loopexit360.loopexit.unr-lcssa ], [ %.1309.us.epil, %.lr.ph.split.us.epil ], [ %.1309, %.lr.ph.split ]
  %146 = zext i32 %.2310 to i64
  %147 = tail call noalias ptr @malloc(i64 noundef %146) #7
  store i32 %2, ptr %6, align 4, !tbaa !5
  %148 = icmp eq i32 %2, 0
  br i1 %148, label %149, label %150

149:                                              ; preds = %.loopexit360
  call void @glGenTextures(i32 noundef 1, ptr noundef nonnull %6) #6
  %.pre = load i32, ptr %6, align 4, !tbaa !5
  br label %150

150:                                              ; preds = %149, %.loopexit360
  %151 = phi i32 [ %.pre, %149 ], [ %2, %.loopexit360 ]
  call void @glBindTexture(i32 noundef %.0320, i32 noundef %151) #6
  %.not338374 = icmp ugt i32 %.0318, %.0319
  br i1 %.not338374, label %._crit_edge, label %.lr.ph377

.lr.ph377:                                        ; preds = %150
  %152 = extractelement <4 x i32> %.fr, i64 0
  %153 = icmp eq i32 %152, 16711680
  %154 = icmp eq i32 %.2314, 3
  %155 = icmp eq i32 %.2, 6407
  %or.cond52 = and i1 %154, %155
  %156 = icmp eq i32 %.2314, 4
  %157 = icmp eq i32 %.2, 6408
  %or.cond54 = and i1 %156, %157
  %158 = icmp ne i32 %.2314, 2
  %159 = icmp sgt i32 %.2310, 0
  %160 = bitcast <4 x i32> %.fr to <16 x i8>
  %161 = extractelement <16 x i8> %160, i64 8
  %162 = extractelement <4 x i32> %.fr, i64 3
  %.not344 = icmp eq i32 %162, 0
  %163 = icmp ne <4 x i32> %.fr, <i32 3840, i32 240, i32 15, i32 61440>
  %164 = extractelement <4 x i1> %163, i64 0
  %165 = extractelement <4 x i1> %163, i64 1
  %166 = or i1 %164, %165
  %167 = extractelement <4 x i1> %163, i64 2
  %168 = or i1 %166, %167
  %169 = extractelement <4 x i1> %163, i64 3
  %170 = or i1 %168, %169
  %171 = icmp slt i32 %.2310, 1
  %.not346370 = icmp slt i32 %.0311, 1
  %172 = add nuw nsw i32 %.0319, 1
  %173 = sext i32 %.2310 to i64
  %174 = zext i32 %.2314 to i64
  %brmerge = or i1 %or.cond52, %or.cond54
  %or.cond378 = select i1 %153, i1 %brmerge, i1 false
  %175 = or i1 %170, %171
  %brmerge380 = or i1 %175, %158
  %smax = call i64 @llvm.smax.i64(i64 %173, i64 %174)
  %176 = add nsw i64 %smax, -1
  %177 = add nsw i64 %173, -1
  %178 = lshr i64 %177, 1
  %179 = add nuw i64 %178, 1
  %180 = add nsw i64 %173, -1
  %181 = lshr i64 %180, 1
  %182 = add nuw i64 %181, 1
  %183 = extractelement <2 x i32> %13, i64 0
  %184 = extractelement <2 x i32> %13, i64 1
  %min.iters.check439 = icmp ult i32 %.2310, 15
  %n.vec442 = and i64 %182, -8
  %ind.end443 = shl i64 %n.vec442, 1
  %broadcast.splat449 = shufflevector <4 x i32> %.fr, <4 x i32> poison, <8 x i32> zeroinitializer
  %broadcast.splat451 = shufflevector <4 x i32> %.fr, <4 x i32> poison, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %broadcast.splat453 = shufflevector <16 x i8> %160, <16 x i8> poison, <8 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
  %broadcast.splat455 = shufflevector <4 x i32> %.fr, <4 x i32> poison, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
  %cmp.n458 = icmp eq i64 %182, %n.vec442
  %185 = extractelement <4 x i32> %.fr, i64 1
  %min.iters.check426 = icmp ult i64 %177, 14
  %n.vec429 = and i64 %179, -8
  %ind.end430 = shl i64 %n.vec429, 1
  %cmp.n436 = icmp eq i64 %179, %n.vec429
  %ident.check.not = icmp eq i32 %.2314, 1
  br label %186

186:                                              ; preds = %.lr.ph377, %.loopexit
  %.0304376 = phi i32 [ 128, %.lr.ph377 ], [ %.1, %.loopexit ]
  %.0316375 = phi i32 [ %.0318, %.lr.ph377 ], [ %418, %.loopexit ]
  %187 = add i32 %.0304376, %.2310
  %.not341 = icmp ugt i32 %187, %1
  br i1 %.not341, label %417, label %188

188:                                              ; preds = %186
  %189 = zext i32 %.0304376 to i64
  %190 = getelementptr inbounds i8, ptr %0, i64 %189
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %147, ptr nonnull align 1 %190, i64 %146, i1 false)
  br i1 %26, label %191, label %392

191:                                              ; preds = %188
  br i1 %or.cond378, label %192, label %203

192:                                              ; preds = %191
  br i1 %159, label %.lr.ph369.preheader, label %.loopexit357

.lr.ph369.preheader:                              ; preds = %192
  %193 = udiv i64 %176, %174
  %194 = add i64 %193, 1
  %min.iters.check413 = icmp ugt i64 %194, 1
  %or.cond461 = select i1 %min.iters.check413, i1 %ident.check.not, i1 false
  br i1 %or.cond461, label %vector.ph414, label %.lr.ph369.preheader462

vector.ph414:                                     ; preds = %.lr.ph369.preheader
  %n.vec416 = and i64 %194, -2
  %ind.end417 = mul nuw i64 %n.vec416, %174
  br label %vector.body419

vector.body419:                                   ; preds = %vector.body419, %vector.ph414
  %index420 = phi i64 [ 0, %vector.ph414 ], [ %index.next422, %vector.body419 ]
  %offset.idx = mul nuw i64 %index420, %174
  %195 = getelementptr inbounds i8, ptr %147, i64 %offset.idx
  %wide.load = load <2 x i8>, ptr %195, align 1, !tbaa !17
  %196 = getelementptr i8, ptr %195, i64 2
  %wide.load421 = load <2 x i8>, ptr %196, align 1, !tbaa !17
  store <2 x i8> %wide.load421, ptr %195, align 1, !tbaa !17
  store <2 x i8> %wide.load, ptr %196, align 1, !tbaa !17
  %index.next422 = add nuw i64 %index420, 2
  %197 = icmp eq i64 %index.next422, %n.vec416
  br i1 %197, label %middle.block411, label %vector.body419, !llvm.loop !18

middle.block411:                                  ; preds = %vector.body419
  %cmp.n423 = icmp eq i64 %194, %n.vec416
  br i1 %cmp.n423, label %.loopexit357, label %.lr.ph369.preheader462

.lr.ph369.preheader462:                           ; preds = %middle.block411, %.lr.ph369.preheader
  %indvars.iv391.ph = phi i64 [ 0, %.lr.ph369.preheader ], [ %ind.end417, %middle.block411 ]
  br label %.lr.ph369

.lr.ph369:                                        ; preds = %.lr.ph369.preheader462, %.lr.ph369
  %indvars.iv391 = phi i64 [ %indvars.iv.next392, %.lr.ph369 ], [ %indvars.iv391.ph, %.lr.ph369.preheader462 ]
  %198 = getelementptr inbounds i8, ptr %147, i64 %indvars.iv391
  %199 = load i8, ptr %198, align 1, !tbaa !17
  %200 = getelementptr i8, ptr %198, i64 2
  %201 = load i8, ptr %200, align 1, !tbaa !17
  store i8 %201, ptr %198, align 1, !tbaa !17
  store i8 %199, ptr %200, align 1, !tbaa !17
  %indvars.iv.next392 = add nuw nsw i64 %indvars.iv391, %174
  %202 = icmp slt i64 %indvars.iv.next392, %173
  br i1 %202, label %.lr.ph369, label %.loopexit357, !llvm.loop !19

203:                                              ; preds = %191
  br i1 %158, label %317, label %204

204:                                              ; preds = %203
  switch i32 %152, label %317 [
    i32 63488, label %205
    i32 31744, label %205
  ]

205:                                              ; preds = %204, %204
  br i1 %159, label %.lr.ph365.preheader, label %.loopexit357

.lr.ph365.preheader:                              ; preds = %205
  br i1 %min.iters.check439, label %.lr.ph365.preheader465, label %vector.body445

vector.body445:                                   ; preds = %.lr.ph365.preheader, %vector.body445
  %index446 = phi i64 [ %index.next457, %vector.body445 ], [ 0, %.lr.ph365.preheader ]
  %offset.idx447 = shl i64 %index446, 1
  %206 = or disjoint i64 %offset.idx447, 2
  %207 = or disjoint i64 %offset.idx447, 4
  %208 = or disjoint i64 %offset.idx447, 6
  %209 = or disjoint i64 %offset.idx447, 8
  %210 = or disjoint i64 %offset.idx447, 10
  %211 = or disjoint i64 %offset.idx447, 12
  %212 = or disjoint i64 %offset.idx447, 14
  %213 = getelementptr inbounds i8, ptr %147, i64 %offset.idx447
  %214 = getelementptr inbounds i8, ptr %147, i64 %206
  %215 = getelementptr inbounds i8, ptr %147, i64 %207
  %216 = getelementptr inbounds i8, ptr %147, i64 %208
  %217 = getelementptr inbounds i8, ptr %147, i64 %209
  %218 = getelementptr inbounds i8, ptr %147, i64 %210
  %219 = getelementptr inbounds i8, ptr %147, i64 %211
  %220 = getelementptr inbounds i8, ptr %147, i64 %212
  %221 = load i8, ptr %213, align 1, !tbaa !17
  %222 = load i8, ptr %214, align 1, !tbaa !17
  %223 = load i8, ptr %215, align 1, !tbaa !17
  %224 = load i8, ptr %216, align 1, !tbaa !17
  %225 = load i8, ptr %217, align 1, !tbaa !17
  %226 = load i8, ptr %218, align 1, !tbaa !17
  %227 = load i8, ptr %219, align 1, !tbaa !17
  %228 = load i8, ptr %220, align 1, !tbaa !17
  %229 = insertelement <8 x i8> poison, i8 %221, i64 0
  %230 = insertelement <8 x i8> %229, i8 %222, i64 1
  %231 = insertelement <8 x i8> %230, i8 %223, i64 2
  %232 = insertelement <8 x i8> %231, i8 %224, i64 3
  %233 = insertelement <8 x i8> %232, i8 %225, i64 4
  %234 = insertelement <8 x i8> %233, i8 %226, i64 5
  %235 = insertelement <8 x i8> %234, i8 %227, i64 6
  %236 = insertelement <8 x i8> %235, i8 %228, i64 7
  %237 = zext <8 x i8> %236 to <8 x i32>
  %238 = or disjoint i64 %offset.idx447, 1
  %239 = or disjoint i64 %offset.idx447, 3
  %240 = or disjoint i64 %offset.idx447, 5
  %241 = or disjoint i64 %offset.idx447, 7
  %242 = or disjoint i64 %offset.idx447, 9
  %243 = or disjoint i64 %offset.idx447, 11
  %244 = or disjoint i64 %offset.idx447, 13
  %245 = or disjoint i64 %offset.idx447, 15
  %246 = getelementptr inbounds i8, ptr %147, i64 %238
  %247 = getelementptr inbounds i8, ptr %147, i64 %239
  %248 = getelementptr inbounds i8, ptr %147, i64 %240
  %249 = getelementptr inbounds i8, ptr %147, i64 %241
  %250 = getelementptr inbounds i8, ptr %147, i64 %242
  %251 = getelementptr inbounds i8, ptr %147, i64 %243
  %252 = getelementptr inbounds i8, ptr %147, i64 %244
  %253 = getelementptr inbounds i8, ptr %147, i64 %245
  %254 = load i8, ptr %246, align 1, !tbaa !17
  %255 = load i8, ptr %247, align 1, !tbaa !17
  %256 = load i8, ptr %248, align 1, !tbaa !17
  %257 = load i8, ptr %249, align 1, !tbaa !17
  %258 = load i8, ptr %250, align 1, !tbaa !17
  %259 = load i8, ptr %251, align 1, !tbaa !17
  %260 = load i8, ptr %252, align 1, !tbaa !17
  %261 = load i8, ptr %253, align 1, !tbaa !17
  %262 = insertelement <8 x i8> poison, i8 %254, i64 0
  %263 = insertelement <8 x i8> %262, i8 %255, i64 1
  %264 = insertelement <8 x i8> %263, i8 %256, i64 2
  %265 = insertelement <8 x i8> %264, i8 %257, i64 3
  %266 = insertelement <8 x i8> %265, i8 %258, i64 4
  %267 = insertelement <8 x i8> %266, i8 %259, i64 5
  %268 = insertelement <8 x i8> %267, i8 %260, i64 6
  %269 = insertelement <8 x i8> %268, i8 %261, i64 7
  %270 = zext <8 x i8> %269 to <8 x i32>
  %271 = shl nuw nsw <8 x i32> %270, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
  %272 = or disjoint <8 x i32> %271, %237
  %273 = and <8 x i32> %271, %broadcast.splat449
  %274 = and <8 x i32> %272, %broadcast.splat451
  %275 = and <8 x i8> %236, %broadcast.splat453
  %276 = and <8 x i32> %271, %broadcast.splat455
  %277 = lshr <8 x i32> %276, <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
  %278 = select i1 %.not344, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, <8 x i32> %277
  %279 = shl <8 x i32> %274, <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19>
  %280 = ashr exact <8 x i32> %279, <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18>
  %281 = and <8 x i32> %280, <i32 65472, i32 65472, i32 65472, i32 65472, i32 65472, i32 65472, i32 65472, i32 65472>
  %282 = sext <8 x i8> %275 to <8 x i32>
  %283 = or <8 x i32> %273, %282
  %284 = shl nsw <8 x i32> %283, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %285 = and <8 x i32> %284, <i32 65534, i32 65534, i32 65534, i32 65534, i32 65534, i32 65534, i32 65534, i32 65534>
  %286 = or <8 x i32> %281, %285
  %287 = or disjoint <8 x i32> %286, %278
  %288 = lshr <8 x i32> %286, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
  %289 = getelementptr inbounds i8, ptr %246, i64 -1
  %290 = shufflevector <8 x i32> %287, <8 x i32> %288, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  %interleaved.vec456 = trunc <16 x i32> %290 to <16 x i8>
  store <16 x i8> %interleaved.vec456, ptr %289, align 1, !tbaa !17
  %index.next457 = add nuw i64 %index446, 8
  %291 = icmp eq i64 %index.next457, %n.vec442
  br i1 %291, label %middle.block437, label %vector.body445, !llvm.loop !20

middle.block437:                                  ; preds = %vector.body445
  br i1 %cmp.n458, label %.loopexit357, label %.lr.ph365.preheader465

.lr.ph365.preheader465:                           ; preds = %middle.block437, %.lr.ph365.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph365.preheader ], [ %ind.end443, %middle.block437 ]
  br label %.lr.ph365

.lr.ph365:                                        ; preds = %.lr.ph365.preheader465, %.lr.ph365
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph365 ], [ %indvars.iv.ph, %.lr.ph365.preheader465 ]
  %292 = getelementptr inbounds i8, ptr %147, i64 %indvars.iv
  %293 = load i8, ptr %292, align 1, !tbaa !17
  %294 = zext i8 %293 to i32
  %295 = or disjoint i64 %indvars.iv, 1
  %296 = getelementptr inbounds i8, ptr %147, i64 %295
  %297 = load i8, ptr %296, align 1, !tbaa !17
  %298 = zext i8 %297 to i32
  %299 = shl nuw nsw i32 %298, 8
  %300 = or disjoint i32 %299, %294
  %301 = and i32 %299, %152
  %302 = and i32 %300, %185
  %303 = and i8 %293, %161
  %304 = and i32 %299, %162
  %305 = lshr i32 %304, 15
  %.0315 = select i1 %.not344, i32 1, i32 %305
  %306 = shl i32 %302, 19
  %307 = ashr exact i32 %306, 18
  %308 = and i32 %307, 65472
  %309 = sext i8 %303 to i32
  %310 = or i32 %301, %309
  %311 = shl nsw i32 %310, 1
  %.masked345 = and i32 %311, 65534
  %.masked = or i32 %308, %.masked345
  %312 = or disjoint i32 %.masked, %.0315
  %313 = trunc i32 %312 to i8
  store i8 %313, ptr %292, align 1, !tbaa !17
  %314 = lshr i32 %.masked, 8
  %315 = trunc nuw i32 %314 to i8
  store i8 %315, ptr %296, align 1, !tbaa !17
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 2
  %316 = icmp slt i64 %indvars.iv.next, %173
  br i1 %316, label %.lr.ph365, label %.loopexit357, !llvm.loop !21

317:                                              ; preds = %204, %203
  br i1 %brmerge380, label %.loopexit357, label %.lr.ph367.preheader

.lr.ph367.preheader:                              ; preds = %317
  br i1 %min.iters.check426, label %.lr.ph367.preheader463, label %vector.body432

vector.body432:                                   ; preds = %.lr.ph367.preheader, %vector.body432
  %index433 = phi i64 [ %index.next435, %vector.body432 ], [ 0, %.lr.ph367.preheader ]
  %offset.idx434 = shl i64 %index433, 1
  %318 = or disjoint i64 %offset.idx434, 2
  %319 = or disjoint i64 %offset.idx434, 4
  %320 = or disjoint i64 %offset.idx434, 6
  %321 = or disjoint i64 %offset.idx434, 8
  %322 = or disjoint i64 %offset.idx434, 10
  %323 = or disjoint i64 %offset.idx434, 12
  %324 = or disjoint i64 %offset.idx434, 14
  %325 = getelementptr inbounds i8, ptr %147, i64 %offset.idx434
  %326 = getelementptr inbounds i8, ptr %147, i64 %318
  %327 = getelementptr inbounds i8, ptr %147, i64 %319
  %328 = getelementptr inbounds i8, ptr %147, i64 %320
  %329 = getelementptr inbounds i8, ptr %147, i64 %321
  %330 = getelementptr inbounds i8, ptr %147, i64 %322
  %331 = getelementptr inbounds i8, ptr %147, i64 %323
  %332 = getelementptr inbounds i8, ptr %147, i64 %324
  %333 = load i8, ptr %325, align 1, !tbaa !17
  %334 = load i8, ptr %326, align 1, !tbaa !17
  %335 = load i8, ptr %327, align 1, !tbaa !17
  %336 = load i8, ptr %328, align 1, !tbaa !17
  %337 = load i8, ptr %329, align 1, !tbaa !17
  %338 = load i8, ptr %330, align 1, !tbaa !17
  %339 = load i8, ptr %331, align 1, !tbaa !17
  %340 = load i8, ptr %332, align 1, !tbaa !17
  %341 = insertelement <8 x i8> poison, i8 %333, i64 0
  %342 = insertelement <8 x i8> %341, i8 %334, i64 1
  %343 = insertelement <8 x i8> %342, i8 %335, i64 2
  %344 = insertelement <8 x i8> %343, i8 %336, i64 3
  %345 = insertelement <8 x i8> %344, i8 %337, i64 4
  %346 = insertelement <8 x i8> %345, i8 %338, i64 5
  %347 = insertelement <8 x i8> %346, i8 %339, i64 6
  %348 = insertelement <8 x i8> %347, i8 %340, i64 7
  %349 = or disjoint i64 %offset.idx434, 1
  %350 = or disjoint i64 %offset.idx434, 3
  %351 = or disjoint i64 %offset.idx434, 5
  %352 = or disjoint i64 %offset.idx434, 7
  %353 = or disjoint i64 %offset.idx434, 9
  %354 = or disjoint i64 %offset.idx434, 11
  %355 = or disjoint i64 %offset.idx434, 13
  %356 = or disjoint i64 %offset.idx434, 15
  %357 = getelementptr inbounds i8, ptr %147, i64 %349
  %358 = getelementptr inbounds i8, ptr %147, i64 %350
  %359 = getelementptr inbounds i8, ptr %147, i64 %351
  %360 = getelementptr inbounds i8, ptr %147, i64 %352
  %361 = getelementptr inbounds i8, ptr %147, i64 %353
  %362 = getelementptr inbounds i8, ptr %147, i64 %354
  %363 = getelementptr inbounds i8, ptr %147, i64 %355
  %364 = getelementptr inbounds i8, ptr %147, i64 %356
  %365 = load i8, ptr %357, align 1, !tbaa !17
  %366 = load i8, ptr %358, align 1, !tbaa !17
  %367 = load i8, ptr %359, align 1, !tbaa !17
  %368 = load i8, ptr %360, align 1, !tbaa !17
  %369 = load i8, ptr %361, align 1, !tbaa !17
  %370 = load i8, ptr %362, align 1, !tbaa !17
  %371 = load i8, ptr %363, align 1, !tbaa !17
  %372 = load i8, ptr %364, align 1, !tbaa !17
  %373 = insertelement <8 x i8> poison, i8 %365, i64 0
  %374 = insertelement <8 x i8> %373, i8 %366, i64 1
  %375 = insertelement <8 x i8> %374, i8 %367, i64 2
  %376 = insertelement <8 x i8> %375, i8 %368, i64 3
  %377 = insertelement <8 x i8> %376, i8 %369, i64 4
  %378 = insertelement <8 x i8> %377, i8 %370, i64 5
  %379 = insertelement <8 x i8> %378, i8 %371, i64 6
  %380 = insertelement <8 x i8> %379, i8 %372, i64 7
  %381 = call <8 x i8> @llvm.fshl.v8i8(<8 x i8> %348, <8 x i8> %380, <8 x i8> <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>)
  %382 = call <8 x i8> @llvm.fshl.v8i8(<8 x i8> %380, <8 x i8> %348, <8 x i8> <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>)
  %383 = getelementptr inbounds i8, ptr %357, i64 -1
  %interleaved.vec = shufflevector <8 x i8> %381, <8 x i8> %382, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  store <16 x i8> %interleaved.vec, ptr %383, align 1, !tbaa !17
  %index.next435 = add nuw i64 %index433, 8
  %384 = icmp eq i64 %index.next435, %n.vec429
  br i1 %384, label %middle.block424, label %vector.body432, !llvm.loop !22

middle.block424:                                  ; preds = %vector.body432
  br i1 %cmp.n436, label %.loopexit357, label %.lr.ph367.preheader463

.lr.ph367.preheader463:                           ; preds = %middle.block424, %.lr.ph367.preheader
  %indvars.iv388.ph = phi i64 [ 0, %.lr.ph367.preheader ], [ %ind.end430, %middle.block424 ]
  br label %.lr.ph367

.lr.ph367:                                        ; preds = %.lr.ph367.preheader463, %.lr.ph367
  %indvars.iv388 = phi i64 [ %indvars.iv.next389, %.lr.ph367 ], [ %indvars.iv388.ph, %.lr.ph367.preheader463 ]
  %385 = getelementptr inbounds i8, ptr %147, i64 %indvars.iv388
  %386 = load i8, ptr %385, align 1, !tbaa !17
  %387 = or disjoint i64 %indvars.iv388, 1
  %388 = getelementptr inbounds i8, ptr %147, i64 %387
  %389 = load i8, ptr %388, align 1, !tbaa !17
  %390 = call i8 @llvm.fshl.i8(i8 %386, i8 %389, i8 4)
  store i8 %390, ptr %385, align 1, !tbaa !17
  %.masked342.narrow = call i8 @llvm.fshl.i8(i8 %389, i8 %386, i8 4)
  store i8 %.masked342.narrow, ptr %388, align 1, !tbaa !17
  %indvars.iv.next389 = add nuw nsw i64 %indvars.iv388, 2
  %391 = icmp slt i64 %indvars.iv.next389, %173
  br i1 %391, label %.lr.ph367, label %.loopexit357, !llvm.loop !23

.loopexit357:                                     ; preds = %.lr.ph365, %.lr.ph367, %.lr.ph369, %middle.block437, %middle.block424, %middle.block411, %317, %205, %192
  call void @glTexImage2D(i32 noundef %.0316375, i32 noundef 0, i32 noundef %.2, i32 noundef %184, i32 noundef %183, i32 noundef 0, i32 noundef %.2, i32 noundef %.1322, ptr noundef %147) #6
  br label %394

392:                                              ; preds = %188
  %393 = load ptr, ptr @soilGlCompressedTexImage2D, align 8, !tbaa !9
  call void %393(i32 noundef %.0316375, i32 noundef 0, i32 noundef %.2, i32 noundef %184, i32 noundef %183, i32 noundef 0, i32 noundef %.0307, ptr noundef %147) #6
  br label %394

394:                                              ; preds = %392, %.loopexit357
  br i1 %.not346370, label %.loopexit, label %.lr.ph373

.lr.ph373:                                        ; preds = %394, %414
  %.0323372 = phi i32 [ %415, %414 ], [ %.0307, %394 ]
  %.4371 = phi i32 [ %416, %414 ], [ 1, %394 ]
  %395 = lshr i32 %184, %.4371
  %396 = lshr i32 %183, %.4371
  %397 = call i32 @llvm.umax.i32(i32 %395, i32 1)
  %398 = call i32 @llvm.umax.i32(i32 %396, i32 1)
  br i1 %26, label %399, label %404

399:                                              ; preds = %.lr.ph373
  %400 = mul i32 %398, %.2314
  %401 = mul i32 %400, %397
  %402 = zext i32 %.0323372 to i64
  %403 = getelementptr inbounds i8, ptr %147, i64 %402
  call void @glTexImage2D(i32 noundef %.0316375, i32 noundef %.4371, i32 noundef %.2, i32 noundef %397, i32 noundef %398, i32 noundef 0, i32 noundef %.2, i32 noundef %.1322, ptr noundef %403) #6
  br label %414

404:                                              ; preds = %.lr.ph373
  %405 = add nuw nsw i32 %397, 3
  %406 = lshr i32 %405, 2
  %407 = add nuw nsw i32 %398, 3
  %408 = lshr i32 %407, 2
  %409 = mul i32 %408, %.2314
  %410 = mul i32 %409, %406
  %411 = load ptr, ptr @soilGlCompressedTexImage2D, align 8, !tbaa !9
  %412 = zext i32 %.0323372 to i64
  %413 = getelementptr inbounds i8, ptr %147, i64 %412
  call void %411(i32 noundef %.0316375, i32 noundef %.4371, i32 noundef %.2, i32 noundef %397, i32 noundef %398, i32 noundef 0, i32 noundef %410, ptr noundef %413) #6
  br label %414

414:                                              ; preds = %404, %399
  %.0303 = phi i32 [ %401, %399 ], [ %410, %404 ]
  %415 = add i32 %.0303, %.0323372
  %416 = add nuw i32 %.4371, 1
  %exitcond394.not = icmp eq i32 %.4371, %.0311
  br i1 %exitcond394.not, label %.loopexit, label %.lr.ph373, !llvm.loop !24

417:                                              ; preds = %186
  call void @glDeleteTextures(i32 noundef 1, ptr noundef nonnull %6) #6
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %414, %394, %417
  %storemerge = phi ptr [ @.str.47, %417 ], [ @.str.46, %394 ], [ @.str.46, %414 ]
  %.1317 = phi i32 [ %172, %417 ], [ %.0316375, %394 ], [ %.0316375, %414 ]
  %.1 = phi i32 [ %.0304376, %417 ], [ %187, %394 ], [ %187, %414 ]
  store ptr %storemerge, ptr @result_string_pointer, align 8, !tbaa !9
  %418 = add i32 %.1317, 1
  %.not338 = icmp ugt i32 %418, %.0319
  br i1 %.not338, label %._crit_edge, label %186, !llvm.loop !25

._crit_edge:                                      ; preds = %.loopexit, %150
  call void @SOIL_free_image_data(ptr noundef %147)
  %419 = load i32, ptr %6, align 4, !tbaa !5
  %.not339 = icmp eq i32 %419, 0
  br i1 %.not339, label %422, label %.sink.split

.sink.split:                                      ; preds = %._crit_edge
  %420 = icmp sgt i32 %.0311, 0
  call void @glTexParameteri(i32 noundef %.0320, i32 noundef 10240, i32 noundef 9729) #6
  %.401 = select i1 %420, i32 9987, i32 9729
  call void @glTexParameteri(i32 noundef %.0320, i32 noundef 10241, i32 noundef %.401) #6
  %421 = and i32 %3, 4
  %.not340 = icmp eq i32 %421, 0
  %.sink400 = select i1 %.not340, i32 33071, i32 10497
  call void @glTexParameteri(i32 noundef %.0320, i32 noundef 10242, i32 noundef %.sink400) #6
  call void @glTexParameteri(i32 noundef %.0320, i32 noundef 10243, i32 noundef %.sink400) #6
  call void @glTexParameteri(i32 noundef %.0320, i32 noundef 32882, i32 noundef %.sink400) #6
  br label %422

422:                                              ; preds = %.sink.split, %._crit_edge, %24, %18, %12
  %423 = load i32, ptr %6, align 4, !tbaa !5
  br label %424

424:                                              ; preds = %422, %86, %84, %81, %65, %11, %8
  %.0 = phi i32 [ 0, %8 ], [ 0, %11 ], [ %423, %422 ], [ 0, %84 ], [ 0, %81 ], [ 0, %86 ], [ 0, %65 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  ret i32 %.0
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @query_cubemap_capability() local_unnamed_addr #3

declare void @glGenTextures(i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @query_DXT_capability() local_unnamed_addr #3

declare void @glBindTexture(i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @glTexImage2D(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

declare void @glTexParameteri(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

declare void @glDeleteTextures(i32 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i8 @llvm.fshl.i8(i8, i8, i8) #5

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smax.v4i32(<4 x i32>, <4 x i32>) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #5

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <8 x i8> @llvm.fshl.v8i8(<8 x i8>, <8 x i8>, <8 x i8>) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x i32> @llvm.smax.v2i32(<2 x i32>, <2 x i32>) #5

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { "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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12, !14, !13}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !12, !13, !14}
!19 = distinct !{!19, !12, !13}
!20 = distinct !{!20, !12, !13, !14}
!21 = distinct !{!21, !12, !14, !13}
!22 = distinct !{!22, !12, !13, !14}
!23 = distinct !{!23, !12, !14, !13}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}


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