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

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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @convert_image_to_DXT5(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4) #1 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca [64 x i8], align 16
  %18 = alloca [8 x i8], align 1
  %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
  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 ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 64, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 1, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  store i32 0, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %27 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 0, ptr %27, align 4, !tbaa !9
  %28 = load i32, ptr %8, align 4, !tbaa !9
  %29 = icmp slt i32 %28, 1
  br i1 %29, label %42, label %30

30:                                               ; preds = %5
  %31 = load i32, ptr %9, align 4, !tbaa !9
  %32 = icmp slt i32 %31, 1
  br i1 %32, label %42, label %33

33:                                               ; preds = %30
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  %35 = icmp eq ptr null, %34
  br i1 %35, label %42, label %36

36:                                               ; preds = %33
  %37 = load i32, ptr %10, align 4, !tbaa !9
  %38 = icmp slt i32 %37, 1
  br i1 %38, label %42, label %39

39:                                               ; preds = %36
  %40 = load i32, ptr %10, align 4, !tbaa !9
  %41 = icmp sgt i32 %40, 4
  br i1 %41, label %42, label %43

42:                                               ; preds = %39, %36, %33, %30, %5
  store ptr null, ptr %6, align 8
  store i32 1, ptr %23, align 4
  br label %334

43:                                               ; preds = %39
  %44 = load i32, ptr %10, align 4, !tbaa !9
  %45 = icmp slt i32 %44, 3
  br i1 %45, label %46, label %47

46:                                               ; preds = %43
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %47

47:                                               ; preds = %46, %43
  %48 = load i32, ptr %10, align 4, !tbaa !9
  %49 = and i32 %48, 1
  %50 = sub nsw i32 1, %49
  store i32 %50, ptr %22, align 4, !tbaa !9
  %51 = load i32, ptr %8, align 4, !tbaa !9
  %52 = add nsw i32 %51, 3
  %53 = ashr i32 %52, 2
  %54 = load i32, ptr %9, align 4, !tbaa !9
  %55 = add nsw i32 %54, 3
  %56 = ashr i32 %55, 2
  %57 = mul nsw i32 %53, %56
  %58 = mul nsw i32 %57, 16
  %59 = load ptr, ptr %11, align 8, !tbaa !5
  store i32 %58, ptr %59, align 4, !tbaa !9
  %60 = load ptr, ptr %11, align 8, !tbaa !5
  %61 = load i32, ptr %60, align 4, !tbaa !9
  %62 = sext i32 %61 to i64
  %63 = call noalias ptr @malloc(i64 noundef %62) #4
  store ptr %63, ptr %12, align 8, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %64

64:                                               ; preds = %329, %47
  %65 = load i32, ptr %14, align 4, !tbaa !9
  %66 = load i32, ptr %9, align 4, !tbaa !9
  %67 = icmp slt i32 %65, %66
  br i1 %67, label %68, label %332

68:                                               ; preds = %64
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %69

69:                                               ; preds = %325, %68
  %70 = load i32, ptr %13, align 4, !tbaa !9
  %71 = load i32, ptr %8, align 4, !tbaa !9
  %72 = icmp slt i32 %70, %71
  br i1 %72, label %73, label %328

73:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  store i32 4, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  store i32 4, ptr %26, align 4, !tbaa !9
  %74 = load i32, ptr %14, align 4, !tbaa !9
  %75 = add nsw i32 %74, 4
  %76 = load i32, ptr %9, align 4, !tbaa !9
  %77 = icmp sge i32 %75, %76
  br i1 %77, label %78, label %82

78:                                               ; preds = %73
  %79 = load i32, ptr %9, align 4, !tbaa !9
  %80 = load i32, ptr %14, align 4, !tbaa !9
  %81 = sub nsw i32 %79, %80
  store i32 %81, ptr %26, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %78, %73
  %83 = load i32, ptr %13, align 4, !tbaa !9
  %84 = add nsw i32 %83, 4
  %85 = load i32, ptr %8, align 4, !tbaa !9
  %86 = icmp sge i32 %84, %85
  br i1 %86, label %87, label %91

87:                                               ; preds = %82
  %88 = load i32, ptr %8, align 4, !tbaa !9
  %89 = load i32, ptr %13, align 4, !tbaa !9
  %90 = sub nsw i32 %88, %89
  store i32 %90, ptr %25, align 4, !tbaa !9
  br label %91

91:                                               ; preds = %87, %82
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %92

92:                                               ; preds = %240, %91
  %93 = load i32, ptr %16, align 4, !tbaa !9
  %94 = load i32, ptr %26, align 4, !tbaa !9
  %95 = icmp slt i32 %93, %94
  br i1 %95, label %96, label %243

96:                                               ; preds = %92
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %203, %96
  %98 = load i32, ptr %15, align 4, !tbaa !9
  %99 = load i32, ptr %25, align 4, !tbaa !9
  %100 = icmp slt i32 %98, %99
  br i1 %100, label %101, label %206

101:                                              ; preds = %97
  %102 = load ptr, ptr %7, align 8, !tbaa !5
  %103 = load i32, ptr %14, align 4, !tbaa !9
  %104 = load i32, ptr %16, align 4, !tbaa !9
  %105 = add nsw i32 %103, %104
  %106 = load i32, ptr %8, align 4, !tbaa !9
  %107 = mul nsw i32 %105, %106
  %108 = load i32, ptr %10, align 4, !tbaa !9
  %109 = mul nsw i32 %107, %108
  %110 = load i32, ptr %13, align 4, !tbaa !9
  %111 = load i32, ptr %15, align 4, !tbaa !9
  %112 = add nsw i32 %110, %111
  %113 = load i32, ptr %10, align 4, !tbaa !9
  %114 = mul nsw i32 %112, %113
  %115 = add nsw i32 %109, %114
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i8, ptr %102, i64 %116
  %118 = load i8, ptr %117, align 1, !tbaa !11
  %119 = load i32, ptr %24, align 4, !tbaa !9
  %120 = add nsw i32 %119, 1
  store i32 %120, ptr %24, align 4, !tbaa !9
  %121 = sext i32 %119 to i64
  %122 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %121
  store i8 %118, ptr %122, align 1, !tbaa !11
  %123 = load ptr, ptr %7, align 8, !tbaa !5
  %124 = load i32, ptr %14, align 4, !tbaa !9
  %125 = load i32, ptr %16, align 4, !tbaa !9
  %126 = add nsw i32 %124, %125
  %127 = load i32, ptr %8, align 4, !tbaa !9
  %128 = mul nsw i32 %126, %127
  %129 = load i32, ptr %10, align 4, !tbaa !9
  %130 = mul nsw i32 %128, %129
  %131 = load i32, ptr %13, align 4, !tbaa !9
  %132 = load i32, ptr %15, align 4, !tbaa !9
  %133 = add nsw i32 %131, %132
  %134 = load i32, ptr %10, align 4, !tbaa !9
  %135 = mul nsw i32 %133, %134
  %136 = add nsw i32 %130, %135
  %137 = load i32, ptr %20, align 4, !tbaa !9
  %138 = add nsw i32 %136, %137
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds i8, ptr %123, i64 %139
  %141 = load i8, ptr %140, align 1, !tbaa !11
  %142 = load i32, ptr %24, align 4, !tbaa !9
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %24, align 4, !tbaa !9
  %144 = sext i32 %142 to i64
  %145 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %144
  store i8 %141, ptr %145, align 1, !tbaa !11
  %146 = load ptr, ptr %7, align 8, !tbaa !5
  %147 = load i32, ptr %14, align 4, !tbaa !9
  %148 = load i32, ptr %16, align 4, !tbaa !9
  %149 = add nsw i32 %147, %148
  %150 = load i32, ptr %8, align 4, !tbaa !9
  %151 = mul nsw i32 %149, %150
  %152 = load i32, ptr %10, align 4, !tbaa !9
  %153 = mul nsw i32 %151, %152
  %154 = load i32, ptr %13, align 4, !tbaa !9
  %155 = load i32, ptr %15, align 4, !tbaa !9
  %156 = add nsw i32 %154, %155
  %157 = load i32, ptr %10, align 4, !tbaa !9
  %158 = mul nsw i32 %156, %157
  %159 = add nsw i32 %153, %158
  %160 = load i32, ptr %20, align 4, !tbaa !9
  %161 = add nsw i32 %159, %160
  %162 = load i32, ptr %20, align 4, !tbaa !9
  %163 = add nsw i32 %161, %162
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i8, ptr %146, i64 %164
  %166 = load i8, ptr %165, align 1, !tbaa !11
  %167 = load i32, ptr %24, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %24, align 4, !tbaa !9
  %169 = sext i32 %167 to i64
  %170 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %169
  store i8 %166, ptr %170, align 1, !tbaa !11
  %171 = load i32, ptr %22, align 4, !tbaa !9
  %172 = load ptr, ptr %7, align 8, !tbaa !5
  %173 = load i32, ptr %14, align 4, !tbaa !9
  %174 = load i32, ptr %16, align 4, !tbaa !9
  %175 = add nsw i32 %173, %174
  %176 = load i32, ptr %8, align 4, !tbaa !9
  %177 = mul nsw i32 %175, %176
  %178 = load i32, ptr %10, align 4, !tbaa !9
  %179 = mul nsw i32 %177, %178
  %180 = load i32, ptr %13, align 4, !tbaa !9
  %181 = load i32, ptr %15, align 4, !tbaa !9
  %182 = add nsw i32 %180, %181
  %183 = load i32, ptr %10, align 4, !tbaa !9
  %184 = mul nsw i32 %182, %183
  %185 = add nsw i32 %179, %184
  %186 = load i32, ptr %10, align 4, !tbaa !9
  %187 = add nsw i32 %185, %186
  %188 = sub nsw i32 %187, 1
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds i8, ptr %172, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !11
  %192 = zext i8 %191 to i32
  %193 = mul nsw i32 %171, %192
  %194 = load i32, ptr %22, align 4, !tbaa !9
  %195 = sub nsw i32 1, %194
  %196 = mul nsw i32 %195, 255
  %197 = add nsw i32 %193, %196
  %198 = trunc i32 %197 to i8
  %199 = load i32, ptr %24, align 4, !tbaa !9
  %200 = add nsw i32 %199, 1
  store i32 %200, ptr %24, align 4, !tbaa !9
  %201 = sext i32 %199 to i64
  %202 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %201
  store i8 %198, ptr %202, align 1, !tbaa !11
  br label %203

203:                                              ; preds = %101
  %204 = load i32, ptr %15, align 4, !tbaa !9
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %15, align 4, !tbaa !9
  br label %97, !llvm.loop !12

206:                                              ; preds = %97
  %207 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %207, ptr %15, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %236, %206
  %209 = load i32, ptr %15, align 4, !tbaa !9
  %210 = icmp slt i32 %209, 4
  br i1 %210, label %211, label %239

211:                                              ; preds = %208
  %212 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 0
  %213 = load i8, ptr %212, align 16, !tbaa !11
  %214 = load i32, ptr %24, align 4, !tbaa !9
  %215 = add nsw i32 %214, 1
  store i32 %215, ptr %24, align 4, !tbaa !9
  %216 = sext i32 %214 to i64
  %217 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %216
  store i8 %213, ptr %217, align 1, !tbaa !11
  %218 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 1
  %219 = load i8, ptr %218, align 1, !tbaa !11
  %220 = load i32, ptr %24, align 4, !tbaa !9
  %221 = add nsw i32 %220, 1
  store i32 %221, ptr %24, align 4, !tbaa !9
  %222 = sext i32 %220 to i64
  %223 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %222
  store i8 %219, ptr %223, align 1, !tbaa !11
  %224 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 2
  %225 = load i8, ptr %224, align 2, !tbaa !11
  %226 = load i32, ptr %24, align 4, !tbaa !9
  %227 = add nsw i32 %226, 1
  store i32 %227, ptr %24, align 4, !tbaa !9
  %228 = sext i32 %226 to i64
  %229 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %228
  store i8 %225, ptr %229, align 1, !tbaa !11
  %230 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 3
  %231 = load i8, ptr %230, align 1, !tbaa !11
  %232 = load i32, ptr %24, align 4, !tbaa !9
  %233 = add nsw i32 %232, 1
  store i32 %233, ptr %24, align 4, !tbaa !9
  %234 = sext i32 %232 to i64
  %235 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %234
  store i8 %231, ptr %235, align 1, !tbaa !11
  br label %236

236:                                              ; preds = %211
  %237 = load i32, ptr %15, align 4, !tbaa !9
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %15, align 4, !tbaa !9
  br label %208, !llvm.loop !14

239:                                              ; preds = %208
  br label %240

240:                                              ; preds = %239
  %241 = load i32, ptr %16, align 4, !tbaa !9
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %16, align 4, !tbaa !9
  br label %92, !llvm.loop !15

243:                                              ; preds = %92
  %244 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %244, ptr %16, align 4, !tbaa !9
  br label %245

245:                                              ; preds = %281, %243
  %246 = load i32, ptr %16, align 4, !tbaa !9
  %247 = icmp slt i32 %246, 4
  br i1 %247, label %248, label %284

248:                                              ; preds = %245
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %277, %248
  %250 = load i32, ptr %15, align 4, !tbaa !9
  %251 = icmp slt i32 %250, 4
  br i1 %251, label %252, label %280

252:                                              ; preds = %249
  %253 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 0
  %254 = load i8, ptr %253, align 16, !tbaa !11
  %255 = load i32, ptr %24, align 4, !tbaa !9
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %24, align 4, !tbaa !9
  %257 = sext i32 %255 to i64
  %258 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %257
  store i8 %254, ptr %258, align 1, !tbaa !11
  %259 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 1
  %260 = load i8, ptr %259, align 1, !tbaa !11
  %261 = load i32, ptr %24, align 4, !tbaa !9
  %262 = add nsw i32 %261, 1
  store i32 %262, ptr %24, align 4, !tbaa !9
  %263 = sext i32 %261 to i64
  %264 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %263
  store i8 %260, ptr %264, align 1, !tbaa !11
  %265 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 2
  %266 = load i8, ptr %265, align 2, !tbaa !11
  %267 = load i32, ptr %24, align 4, !tbaa !9
  %268 = add nsw i32 %267, 1
  store i32 %268, ptr %24, align 4, !tbaa !9
  %269 = sext i32 %267 to i64
  %270 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %269
  store i8 %266, ptr %270, align 1, !tbaa !11
  %271 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 3
  %272 = load i8, ptr %271, align 1, !tbaa !11
  %273 = load i32, ptr %24, align 4, !tbaa !9
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %24, align 4, !tbaa !9
  %275 = sext i32 %273 to i64
  %276 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 %275
  store i8 %272, ptr %276, align 1, !tbaa !11
  br label %277

277:                                              ; preds = %252
  %278 = load i32, ptr %15, align 4, !tbaa !9
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %15, align 4, !tbaa !9
  br label %249, !llvm.loop !16

280:                                              ; preds = %249
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %16, align 4, !tbaa !9
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %16, align 4, !tbaa !9
  br label %245, !llvm.loop !17

284:                                              ; preds = %245
  %285 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 0
  %286 = getelementptr inbounds [8 x i8], ptr %18, i64 0, i64 0
  call void @compress_DDS_alpha_block(ptr noundef %285, ptr noundef %286)
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %287

287:                                              ; preds = %300, %284
  %288 = load i32, ptr %15, align 4, !tbaa !9
  %289 = icmp slt i32 %288, 8
  br i1 %289, label %290, label %303

290:                                              ; preds = %287
  %291 = load i32, ptr %15, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds [8 x i8], ptr %18, i64 0, i64 %292
  %294 = load i8, ptr %293, align 1, !tbaa !11
  %295 = load ptr, ptr %12, align 8, !tbaa !5
  %296 = load i32, ptr %19, align 4, !tbaa !9
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %19, align 4, !tbaa !9
  %298 = sext i32 %296 to i64
  %299 = getelementptr inbounds i8, ptr %295, i64 %298
  store i8 %294, ptr %299, align 1, !tbaa !11
  br label %300

300:                                              ; preds = %290
  %301 = load i32, ptr %15, align 4, !tbaa !9
  %302 = add nsw i32 %301, 1
  store i32 %302, ptr %15, align 4, !tbaa !9
  br label %287, !llvm.loop !18

303:                                              ; preds = %287
  %304 = load i32, ptr %21, align 4, !tbaa !9
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %21, align 4, !tbaa !9
  %306 = getelementptr inbounds [64 x i8], ptr %17, i64 0, i64 0
  %307 = getelementptr inbounds [8 x i8], ptr %18, i64 0, i64 0
  call void @compress_DDS_color_block(i32 noundef 4, ptr noundef %306, ptr noundef %307)
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %308

308:                                              ; preds = %321, %303
  %309 = load i32, ptr %15, align 4, !tbaa !9
  %310 = icmp slt i32 %309, 8
  br i1 %310, label %311, label %324

311:                                              ; preds = %308
  %312 = load i32, ptr %15, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds [8 x i8], ptr %18, i64 0, i64 %313
  %315 = load i8, ptr %314, align 1, !tbaa !11
  %316 = load ptr, ptr %12, align 8, !tbaa !5
  %317 = load i32, ptr %19, align 4, !tbaa !9
  %318 = add nsw i32 %317, 1
  store i32 %318, ptr %19, align 4, !tbaa !9
  %319 = sext i32 %317 to i64
  %320 = getelementptr inbounds i8, ptr %316, i64 %319
  store i8 %315, ptr %320, align 1, !tbaa !11
  br label %321

321:                                              ; preds = %311
  %322 = load i32, ptr %15, align 4, !tbaa !9
  %323 = add nsw i32 %322, 1
  store i32 %323, ptr %15, align 4, !tbaa !9
  br label %308, !llvm.loop !19

324:                                              ; preds = %308
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  br label %325

325:                                              ; preds = %324
  %326 = load i32, ptr %13, align 4, !tbaa !9
  %327 = add nsw i32 %326, 4
  store i32 %327, ptr %13, align 4, !tbaa !9
  br label %69, !llvm.loop !20

328:                                              ; preds = %69
  br label %329

329:                                              ; preds = %328
  %330 = load i32, ptr %14, align 4, !tbaa !9
  %331 = add nsw i32 %330, 4
  store i32 %331, ptr %14, align 4, !tbaa !9
  br label %64, !llvm.loop !21

332:                                              ; preds = %64
  %333 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %333, ptr %6, align 8
  store i32 1, ptr %23, align 4
  br label %334

334:                                              ; preds = %332, %42
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 64, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  %335 = load ptr, ptr %6, align 8
  ret ptr %335
}

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

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @compress_DDS_color_block(i32 noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local void @compress_DDS_alpha_block(ptr noundef, ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 }
attributes #4 = { 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 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}
!21 = distinct !{!21, !13}


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

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

; Function Attrs: nounwind uwtable
define dso_local noalias noundef ptr @convert_image_to_DXT5(ptr noundef readonly %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr nocapture noundef writeonly %4) local_unnamed_addr #1 {
  %6 = alloca [64 x i8], align 16
  %7 = alloca [8 x i8], align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  store i32 0, ptr %4, align 4, !tbaa !5
  %8 = icmp slt i32 %1, 1
  %9 = icmp slt i32 %2, 1
  %or.cond = or i1 %8, %9
  %10 = icmp eq ptr %0, null
  %or.cond3 = or i1 %10, %or.cond
  %11 = add i32 %3, -5
  %12 = icmp ult i32 %11, -4
  %or.cond7 = or i1 %or.cond3, %12
  br i1 %or.cond7, label %.loopexit138, label %.split.us

.split.us:                                        ; preds = %5
  %13 = icmp ugt i32 %3, 2
  %spec.select = zext i1 %13 to i32
  %14 = and i32 %3, 1
  %15 = xor i32 %14, 1
  %16 = add nuw nsw i32 %2, 3
  %17 = lshr i32 %16, 2
  %18 = shl i32 %1, 2
  %19 = add i32 %18, 12
  %20 = and i32 %19, -16
  %21 = mul i32 %20, %17
  store i32 %21, ptr %4, align 4, !tbaa !5
  %22 = zext nneg i32 %21 to i64
  %23 = tail call noalias ptr @malloc(i64 noundef %22) #5
  %invariant.gep = getelementptr i8, ptr %0, i64 -1
  %24 = mul nuw nsw i32 %14, 255
  %25 = getelementptr inbounds i8, ptr %6, i64 1
  %26 = getelementptr inbounds i8, ptr %6, i64 2
  %27 = getelementptr inbounds i8, ptr %6, i64 3
  %28 = zext nneg i32 %1 to i64
  %29 = zext nneg i32 %2 to i64
  %30 = shl i32 %1, 2
  %31 = zext i32 %30 to i64
  %32 = zext i1 %13 to i64
  %33 = select i1 %13, i64 2, i64 0
  %ident.check = icmp ne i32 %3, 1
  %broadcast.splatinsert = insertelement <16 x i32> poison, i32 %15, i64 0
  %broadcast.splat = shufflevector <16 x i32> %broadcast.splatinsert, <16 x i32> poison, <16 x i32> zeroinitializer
  %broadcast.splatinsert219 = insertelement <16 x i32> poison, i32 %24, i64 0
  %broadcast.splat220 = shufflevector <16 x i32> %broadcast.splatinsert219, <16 x i32> poison, <16 x i32> zeroinitializer
  %invariant.gep225 = getelementptr i8, ptr %6, i64 -3
  br label %.preheader137.us

.preheader137.us:                                 ; preds = %._crit_edge161.us, %.split.us
  %indvar212 = phi i64 [ %indvar.next213, %._crit_edge161.us ], [ 0, %.split.us ]
  %indvars.iv204 = phi i64 [ %indvars.iv.next205, %._crit_edge161.us ], [ 0, %.split.us ]
  %.0115165.us = phi i64 [ %68, %._crit_edge161.us ], [ 0, %.split.us ]
  %34 = mul i64 %indvar212, %31
  %35 = or disjoint i64 %34, %32
  %36 = or disjoint i64 %33, %34
  %37 = and i64 %34, 4294967292
  %38 = or disjoint i64 %37, 1
  %indvars.iv.next205 = add nuw nsw i64 %indvars.iv204, 4
  %.not.us = icmp ult i64 %indvars.iv.next205, %29
  %39 = trunc i64 %indvars.iv204 to i32
  %40 = sub i32 %2, %39
  %spec.select133.us = select i1 %.not.us, i32 4, i32 %40
  %41 = icmp sgt i32 %spec.select133.us, 0
  %42 = icmp slt i32 %spec.select133.us, 4
  %43 = sext i32 %spec.select133.us to i64
  br label %44

44:                                               ; preds = %.preheader137.us, %._crit_edge152.us
  %indvar = phi i32 [ 0, %.preheader137.us ], [ %indvar.next, %._crit_edge152.us ]
  %indvars.iv201 = phi i64 [ 0, %.preheader137.us ], [ %indvars.iv.next202, %._crit_edge152.us ]
  %.1116158.us = phi i64 [ %.0115165.us, %.preheader137.us ], [ %68, %._crit_edge152.us ]
  %45 = shl i32 %indvar, 2
  %46 = add i32 %45, 4
  %smin214 = call i32 @llvm.smin.i32(i32 %1, i32 %46)
  %47 = shl i32 %indvar, 2
  %48 = sub i32 %smin214, %47
  %49 = sext i32 %48 to i64
  %50 = shl i32 %indvar, 2
  %51 = add i32 %50, 4
  %smin = call i32 @llvm.smin.i32(i32 %1, i32 %51)
  %52 = shl i32 %indvar, 2
  %53 = sub i32 %smin, %52
  %54 = sext i32 %53 to i64
  %55 = add nsw i64 %54, -1
  %56 = add i64 %34, %indvars.iv201
  %57 = add i64 %35, %indvars.iv201
  %58 = add i64 %36, %indvars.iv201
  %59 = add i64 %38, %indvars.iv201
  %indvars.iv.next202 = add nuw i64 %indvars.iv201, 4
  %60 = trunc nuw i64 %indvars.iv.next202 to i32
  %.not132.us = icmp slt i32 %60, %1
  %61 = trunc i64 %indvars.iv201 to i32
  %62 = sub i32 %1, %61
  br i1 %41, label %.preheader135.lr.ph.us, label %.preheader.us.preheader

._crit_edge152.us:                                ; preds = %.preheader.us, %.preheader136.us
  call void @compress_DDS_alpha_block(ptr noundef nonnull %6, ptr noundef nonnull %7)
  %sext = shl i64 %.1116158.us, 32
  %63 = ashr exact i64 %sext, 32
  %scevgep = getelementptr i8, ptr %23, i64 %63
  %64 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %64, ptr %scevgep, align 1, !tbaa !9
  call void @compress_DDS_color_block(i32 noundef 4, ptr noundef nonnull %6, ptr noundef nonnull %7)
  %65 = shl i64 %.1116158.us, 32
  %sext207 = add i64 %65, 34359738368
  %66 = ashr exact i64 %sext207, 32
  %scevgep193 = getelementptr i8, ptr %23, i64 %66
  %67 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %67, ptr %scevgep193, align 1, !tbaa !9
  %68 = add nsw i64 %66, 8
  %indvar.next = add i32 %indvar, 1
  br i1 %.not132.us, label %44, label %._crit_edge161.us, !llvm.loop !10

._crit_edge.us.loopexit:                          ; preds = %.lr.ph143.us
  %69 = trunc nsw i64 %indvars.iv.next178 to i32
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.loopexit, %.preheader134.us
  %.2.lcssa.us = phi i32 [ %160, %.preheader134.us ], [ %69, %._crit_edge.us.loopexit ]
  %indvars.iv.next181 = add nuw nsw i64 %indvars.iv180, 1
  %70 = icmp slt i64 %indvars.iv.next181, %43
  br i1 %70, label %.preheader135.us, label %.preheader136.us, !llvm.loop !12

.lr.ph143.us:                                     ; preds = %.lr.ph143.us.preheader, %.lr.ph143.us
  %indvars.iv177 = phi i64 [ %161, %.lr.ph143.us.preheader ], [ %indvars.iv.next178, %.lr.ph143.us ]
  %.1122141.us = phi i32 [ %62, %.lr.ph143.us.preheader ], [ %82, %.lr.ph143.us ]
  %71 = load i8, ptr %6, align 16, !tbaa !9
  %72 = add nsw i64 %indvars.iv177, 1
  %73 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %indvars.iv177
  store i8 %71, ptr %73, align 1, !tbaa !9
  %74 = load i8, ptr %25, align 1, !tbaa !9
  %75 = add nsw i64 %indvars.iv177, 2
  %76 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %72
  store i8 %74, ptr %76, align 1, !tbaa !9
  %77 = load i8, ptr %26, align 2, !tbaa !9
  %78 = add nsw i64 %indvars.iv177, 3
  %79 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %75
  store i8 %77, ptr %79, align 1, !tbaa !9
  %80 = load i8, ptr %27, align 1, !tbaa !9
  %indvars.iv.next178 = add nsw i64 %indvars.iv177, 4
  %81 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %78
  store i8 %80, ptr %81, align 1, !tbaa !9
  %82 = add nsw i32 %.1122141.us, 1
  %83 = icmp slt i32 %.1122141.us, 3
  br i1 %83, label %.lr.ph143.us, label %._crit_edge.us.loopexit, !llvm.loop !13

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv172 = phi i64 [ %indvars.iv.next173, %scalar.ph ], [ %indvars.iv172.ph, %scalar.ph.preheader ]
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %84 = add nuw nsw i64 %173, %indvars.iv172
  %85 = trunc nuw i64 %84 to i32
  %86 = mul i32 %85, %3
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds i8, ptr %0, i64 %87
  %89 = load i8, ptr %88, align 1, !tbaa !9
  %90 = add nsw i64 %indvars.iv, 1
  %91 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %indvars.iv
  store i8 %89, ptr %91, align 1, !tbaa !9
  %92 = add nsw i32 %86, %spec.select
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds i8, ptr %0, i64 %93
  %95 = load i8, ptr %94, align 1, !tbaa !9
  %96 = add nsw i64 %indvars.iv, 2
  %97 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %90
  store i8 %95, ptr %97, align 1, !tbaa !9
  %98 = add nsw i32 %92, %spec.select
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds i8, ptr %0, i64 %99
  %101 = load i8, ptr %100, align 1, !tbaa !9
  %102 = add nsw i64 %indvars.iv, 3
  %103 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %96
  store i8 %101, ptr %103, align 1, !tbaa !9
  %104 = add nsw i32 %86, %3
  %105 = sext i32 %104 to i64
  %gep.us = getelementptr i8, ptr %invariant.gep, i64 %105
  %106 = load i8, ptr %gep.us, align 1, !tbaa !9
  %107 = zext i8 %106 to i32
  %108 = mul nuw nsw i32 %15, %107
  %109 = add nuw nsw i32 %108, %24
  %110 = trunc i32 %109 to i8
  %indvars.iv.next = add nsw i64 %indvars.iv, 4
  %111 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %102
  store i8 %110, ptr %111, align 1, !tbaa !9
  %indvars.iv.next173 = add nuw nsw i64 %indvars.iv172, 1
  %112 = icmp slt i64 %indvars.iv.next173, %212
  br i1 %112, label %scalar.ph, label %.preheader134.us, !llvm.loop !14

.preheader.us:                                    ; preds = %.preheader.us.preheader, %.preheader.us
  %.3151.us = phi i32 [ %indvars.iv.next184.3, %.preheader.us ], [ %.3151.us.ph, %.preheader.us.preheader ]
  %.1120150.us = phi i32 [ %158, %.preheader.us ], [ %40, %.preheader.us.preheader ]
  %113 = sext i32 %.3151.us to i64
  %114 = load i8, ptr %6, align 16, !tbaa !9
  %115 = add nsw i64 %113, 1
  %116 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %113
  store i8 %114, ptr %116, align 1, !tbaa !9
  %117 = load i8, ptr %25, align 1, !tbaa !9
  %118 = add nsw i64 %113, 2
  %119 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %115
  store i8 %117, ptr %119, align 1, !tbaa !9
  %120 = load i8, ptr %26, align 2, !tbaa !9
  %121 = add nsw i64 %113, 3
  %122 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %118
  store i8 %120, ptr %122, align 1, !tbaa !9
  %123 = load i8, ptr %27, align 1, !tbaa !9
  %indvars.iv.next184 = add nsw i64 %113, 4
  %124 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %121
  store i8 %123, ptr %124, align 1, !tbaa !9
  %125 = load i8, ptr %6, align 16, !tbaa !9
  %126 = add nsw i64 %113, 5
  %127 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %indvars.iv.next184
  store i8 %125, ptr %127, align 1, !tbaa !9
  %128 = load i8, ptr %25, align 1, !tbaa !9
  %129 = add nsw i64 %113, 6
  %130 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %126
  store i8 %128, ptr %130, align 1, !tbaa !9
  %131 = load i8, ptr %26, align 2, !tbaa !9
  %132 = add nsw i64 %113, 7
  %133 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %129
  store i8 %131, ptr %133, align 1, !tbaa !9
  %134 = load i8, ptr %27, align 1, !tbaa !9
  %indvars.iv.next184.1 = add nsw i64 %113, 8
  %135 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %132
  store i8 %134, ptr %135, align 1, !tbaa !9
  %136 = load i8, ptr %6, align 16, !tbaa !9
  %137 = add nsw i64 %113, 9
  %138 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %indvars.iv.next184.1
  store i8 %136, ptr %138, align 1, !tbaa !9
  %139 = load i8, ptr %25, align 1, !tbaa !9
  %140 = add nsw i64 %113, 10
  %141 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %137
  store i8 %139, ptr %141, align 1, !tbaa !9
  %142 = load i8, ptr %26, align 2, !tbaa !9
  %143 = add nsw i64 %113, 11
  %144 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %140
  store i8 %142, ptr %144, align 1, !tbaa !9
  %145 = load i8, ptr %27, align 1, !tbaa !9
  %indvars.iv.next184.2 = add nsw i64 %113, 12
  %146 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %143
  store i8 %145, ptr %146, align 1, !tbaa !9
  %147 = load i8, ptr %6, align 16, !tbaa !9
  %148 = add nsw i64 %113, 13
  %149 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %indvars.iv.next184.2
  store i8 %147, ptr %149, align 1, !tbaa !9
  %150 = load i8, ptr %25, align 1, !tbaa !9
  %151 = add nsw i64 %113, 14
  %152 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %148
  store i8 %150, ptr %152, align 1, !tbaa !9
  %153 = load i8, ptr %26, align 2, !tbaa !9
  %154 = add nsw i64 %113, 15
  %155 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %151
  store i8 %153, ptr %155, align 1, !tbaa !9
  %156 = load i8, ptr %27, align 1, !tbaa !9
  %indvars.iv.next184.3 = add i32 %.3151.us, 16
  %157 = getelementptr inbounds [64 x i8], ptr %6, i64 0, i64 %154
  store i8 %156, ptr %157, align 1, !tbaa !9
  %158 = add nsw i32 %.1120150.us, 1
  %159 = icmp slt i32 %.1120150.us, 3
  br i1 %159, label %.preheader.us, label %._crit_edge152.us, !llvm.loop !16

.preheader134.us:                                 ; preds = %scalar.ph, %middle.block
  %indvars.iv.next.lcssa = phi i64 [ %ind.end, %middle.block ], [ %indvars.iv.next, %scalar.ph ]
  %160 = trunc nsw i64 %indvars.iv.next.lcssa to i32
  br i1 %211, label %.lr.ph143.us.preheader, label %._crit_edge.us

.lr.ph143.us.preheader:                           ; preds = %.preheader135.us, %.preheader134.us
  %.1.lcssa.us209 = phi i32 [ %160, %.preheader134.us ], [ %.0110146.us, %.preheader135.us ]
  %161 = sext i32 %.1.lcssa.us209 to i64
  br label %.lr.ph143.us

.preheader135.us:                                 ; preds = %.preheader135.lr.ph.us, %._crit_edge.us
  %indvars.iv180 = phi i64 [ 0, %.preheader135.lr.ph.us ], [ %indvars.iv.next181, %._crit_edge.us ]
  %.0110146.us = phi i32 [ 0, %.preheader135.lr.ph.us ], [ %.2.lcssa.us, %._crit_edge.us ]
  %162 = mul i64 %indvars.iv180, %28
  %163 = add i64 %56, %162
  %164 = trunc i64 %163 to i32
  %165 = add i64 %57, %162
  %166 = trunc i64 %165 to i32
  %167 = add i64 %58, %162
  %168 = trunc i64 %167 to i32
  %169 = add i64 %59, %162
  %170 = trunc i64 %169 to i32
  br i1 %210, label %.lr.ph.us, label %.lr.ph143.us.preheader

.preheader136.us:                                 ; preds = %._crit_edge.us
  br i1 %42, label %.preheader.us.preheader, label %._crit_edge152.us

.preheader.us.preheader:                          ; preds = %44, %.preheader136.us
  %.3151.us.ph = phi i32 [ 0, %44 ], [ %.2.lcssa.us, %.preheader136.us ]
  br label %.preheader.us

.lr.ph.us:                                        ; preds = %.preheader135.us
  %171 = add nuw nsw i64 %indvars.iv180, %indvars.iv204
  %172 = mul nuw nsw i64 %171, %28
  %173 = add nuw i64 %172, %indvars.iv201
  %174 = sext i32 %.0110146.us to i64
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.scevcheck, %.lr.ph.us
  %indvars.iv172.ph = phi i64 [ 0, %vector.scevcheck ], [ 0, %.lr.ph.us ], [ %n.vec, %middle.block ]
  %indvars.iv.ph = phi i64 [ %174, %vector.scevcheck ], [ %174, %.lr.ph.us ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.scevcheck:                                 ; preds = %.lr.ph.us
  %175 = add i32 %164, %213
  %176 = icmp slt i32 %175, %164
  %177 = or i1 %176, %214
  %178 = add i32 %166, %215
  %179 = icmp slt i32 %178, %166
  %180 = add i32 %168, %216
  %181 = icmp slt i32 %180, %168
  %182 = add i32 %170, %217
  %183 = icmp slt i32 %182, %170
  %184 = or i1 %ident.check, %177
  %185 = or i1 %179, %184
  %186 = or i1 %181, %185
  %187 = or i1 %183, %186
  br i1 %187, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.scevcheck
  %ind.end = add nsw i64 %218, %174
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %188 = shl i64 %index, 2
  %offset.idx = add i64 %188, %174
  %189 = add nuw nsw i64 %173, %index
  %190 = trunc nuw i64 %189 to i32
  %sext221 = shl i64 %189, 32
  %191 = ashr exact i64 %sext221, 32
  %192 = getelementptr inbounds i8, ptr %0, i64 %191
  %wide.load = load <16 x i8>, ptr %192, align 1, !tbaa !9
  %193 = add nsw i32 %190, %spec.select
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds i8, ptr %0, i64 %194
  %wide.load216 = load <16 x i8>, ptr %195, align 1, !tbaa !9
  %196 = add nsw i32 %193, %spec.select
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds i8, ptr %0, i64 %197
  %wide.load217 = load <16 x i8>, ptr %198, align 1, !tbaa !9
  %199 = add nsw i64 %offset.idx, 3
  %200 = shl i64 %189, 32
  %sext222 = add i64 %200, 4294967296
  %201 = ashr exact i64 %sext222, 32
  %202 = getelementptr i8, ptr %invariant.gep, i64 %201
  %wide.load218 = load <16 x i8>, ptr %202, align 1, !tbaa !9
  %203 = zext <16 x i8> %wide.load218 to <16 x i32>
  %204 = mul nuw nsw <16 x i32> %broadcast.splat, %203
  %205 = add nuw nsw <16 x i32> %204, %broadcast.splat220
  %206 = trunc <16 x i32> %205 to <16 x i8>
  %gep = getelementptr [64 x i8], ptr %invariant.gep225, i64 0, i64 %199
  %207 = shufflevector <16 x i8> %wide.load, <16 x i8> %wide.load216, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
  %208 = shufflevector <16 x i8> %wide.load217, <16 x i8> %206, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
  %interleaved.vec = shufflevector <32 x i8> %207, <32 x i8> %208, <64 x i32> <i32 0, i32 16, i32 32, i32 48, i32 1, i32 17, i32 33, i32 49, i32 2, i32 18, i32 34, i32 50, i32 3, i32 19, i32 35, i32 51, i32 4, i32 20, i32 36, i32 52, i32 5, i32 21, i32 37, i32 53, i32 6, i32 22, i32 38, i32 54, i32 7, i32 23, i32 39, i32 55, i32 8, i32 24, i32 40, i32 56, i32 9, i32 25, i32 41, i32 57, i32 10, i32 26, i32 42, i32 58, i32 11, i32 27, i32 43, i32 59, i32 12, i32 28, i32 44, i32 60, i32 13, i32 29, i32 45, i32 61, i32 14, i32 30, i32 46, i32 62, i32 15, i32 31, i32 47, i32 63>
  store <64 x i8> %interleaved.vec, ptr %gep, align 1, !tbaa !9
  %index.next = add nuw i64 %index, 16
  %209 = icmp eq i64 %index.next, %n.vec
  br i1 %209, label %middle.block, label %vector.body, !llvm.loop !17

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.preheader134.us, label %scalar.ph.preheader

.preheader135.lr.ph.us:                           ; preds = %44
  %.0109.us = select i1 %.not132.us, i32 4, i32 %62
  %210 = icmp sgt i32 %.0109.us, 0
  %211 = icmp slt i32 %.0109.us, 4
  %212 = sext i32 %.0109.us to i64
  %min.iters.check = icmp ult i32 %48, 16
  %213 = trunc i64 %55 to i32
  %214 = icmp ugt i64 %55, 4294967295
  %215 = trunc i64 %55 to i32
  %216 = trunc i64 %55 to i32
  %217 = trunc i64 %55 to i32
  %n.vec = and i64 %49, -16
  %218 = shl nsw i64 %n.vec, 2
  %cmp.n = icmp eq i64 %n.vec, %49
  br label %.preheader135.us

._crit_edge161.us:                                ; preds = %._crit_edge152.us
  %indvar.next213 = add i64 %indvar212, 1
  br i1 %.not.us, label %.preheader137.us, label %.loopexit138, !llvm.loop !19

.loopexit138:                                     ; preds = %._crit_edge161.us, %5
  %.0111 = phi ptr [ null, %5 ], [ %23, %._crit_edge161.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #4
  ret ptr %.0111
}

; 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 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 @compress_DDS_color_block(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @compress_DDS_alpha_block(ptr noundef, ptr noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }
attributes #5 = { 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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11, !15}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11, !15, !18}
!18 = !{!"llvm.loop.unroll.runtime.disable"}
!19 = distinct !{!19, !11}


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