; LLVM IR from aap/librw :: src/ps2/ps2raster.ll (ZN2rw3ps213swizzleRasterEPNS_6RasterE)

; 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.rw::Raster" = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, i32, i32, i32, ptr, i32, i32 }
%"struct.rw::ps2::Ps2Raster" = type { i64, i32, i16, i8, i8, i64, i64, i32, i32, i32, i8, ptr, i32 }

@_ZN2rw3ps218nativeRasterOffsetE = external dso_local global i32, align 4

; 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: mustprogress nounwind uwtable
declare hidden void @_ZN2rw3ps2L15transferMinSizeEiiPiS1_(i32 noundef, i32 noundef, ptr noundef, ptr noundef) #1

; 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) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef, i32 noundef, i32 noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN2rw3ps213swizzleRasterEPNS_6RasterE(ptr noundef %0) #3 {
  %2 = alloca ptr, align 8
  %3 = alloca [4096 x i8], align 16
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %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 i32, align 4
  %18 = alloca i8, align 1
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4096, ptr %3) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = load i32, ptr @_ZN2rw3ps218nativeRasterOffsetE, align 4, !tbaa !9
  %23 = sext i32 %22 to i64
  %24 = getelementptr inbounds i8, ptr %21, i64 %23
  store ptr %24, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %25 = load ptr, ptr %2, align 8, !tbaa !5
  %26 = getelementptr inbounds %"struct.rw::Raster", ptr %25, i32 0, i32 4
  %27 = load i32, ptr %26, align 8, !tbaa !11
  %28 = and i32 %27, 24576
  %29 = icmp eq i32 %28, 0
  br i1 %29, label %30, label %31

30:                                               ; preds = %1
  store i32 1, ptr %13, align 4
  br label %286

31:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %32 = load ptr, ptr %2, align 8, !tbaa !5
  %33 = getelementptr inbounds %"struct.rw::Raster", ptr %32, i32 0, i32 4
  %34 = load i32, ptr %33, align 8, !tbaa !11
  %35 = and i32 %34, 16384
  %36 = icmp ne i32 %35, 0
  %37 = zext i1 %36 to i64
  %38 = select i1 %36, i32 20, i32 19
  %39 = load ptr, ptr %11, align 8, !tbaa !5
  %40 = getelementptr inbounds %"struct.rw::ps2::Ps2Raster", ptr %39, i32 0, i32 10
  %41 = load i8, ptr %40, align 4, !tbaa !13
  %42 = sext i8 %41 to i32
  call void @_ZN2rw3ps2L15transferMinSizeEiiPiS1_(i32 noundef %38, i32 noundef %42, ptr noundef %14, ptr noundef %15)
  %43 = load ptr, ptr %2, align 8, !tbaa !5
  %44 = getelementptr inbounds %"struct.rw::Raster", ptr %43, i32 0, i32 5
  %45 = load i32, ptr %44, align 4, !tbaa !17
  %46 = load i32, ptr %14, align 4, !tbaa !9
  %47 = icmp sgt i32 %45, %46
  br i1 %47, label %48, label %52

48:                                               ; preds = %31
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.rw::Raster", ptr %49, i32 0, i32 5
  %51 = load i32, ptr %50, align 4, !tbaa !17
  br label %54

52:                                               ; preds = %31
  %53 = load i32, ptr %14, align 4, !tbaa !9
  br label %54

54:                                               ; preds = %52, %48
  %55 = phi i32 [ %51, %48 ], [ %53, %52 ]
  store i32 %55, ptr %7, align 4, !tbaa !9
  %56 = load ptr, ptr %2, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.rw::Raster", ptr %56, i32 0, i32 6
  %58 = load i32, ptr %57, align 8, !tbaa !18
  %59 = load i32, ptr %15, align 4, !tbaa !9
  %60 = icmp sgt i32 %58, %59
  br i1 %60, label %61, label %65

61:                                               ; preds = %54
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %"struct.rw::Raster", ptr %62, i32 0, i32 6
  %64 = load i32, ptr %63, align 8, !tbaa !18
  br label %67

65:                                               ; preds = %54
  %66 = load i32, ptr %15, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %65, %61
  %68 = phi i32 [ %64, %61 ], [ %66, %65 ]
  store i32 %68, ptr %8, align 4, !tbaa !9
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  %70 = getelementptr inbounds %"struct.rw::Raster", ptr %69, i32 0, i32 9
  %71 = load ptr, ptr %70, align 8, !tbaa !19
  store ptr %71, ptr %12, align 8, !tbaa !5
  store i32 0, ptr %10, align 4, !tbaa !9
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %72

72:                                               ; preds = %81, %67
  %73 = load i32, ptr %9, align 4, !tbaa !9
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = getelementptr inbounds %"struct.rw::Raster", ptr %74, i32 0, i32 5
  %76 = load i32, ptr %75, align 4, !tbaa !17
  %77 = icmp slt i32 %73, %76
  br i1 %77, label %78, label %84

78:                                               ; preds = %72
  %79 = load i32, ptr %10, align 4, !tbaa !9
  %80 = add nsw i32 %79, 1
  store i32 %80, ptr %10, align 4, !tbaa !9
  br label %81

81:                                               ; preds = %78
  %82 = load i32, ptr %9, align 4, !tbaa !9
  %83 = mul nsw i32 %82, 2
  store i32 %83, ptr %9, align 4, !tbaa !9
  br label %72, !llvm.loop !20

84:                                               ; preds = %72
  %85 = load i32, ptr %10, align 4, !tbaa !9
  %86 = add nsw i32 %85, 2
  %87 = shl i32 1, %86
  %88 = sub nsw i32 %87, 1
  store i32 %88, ptr %4, align 4, !tbaa !9
  %89 = load ptr, ptr %2, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.rw::Raster", ptr %89, i32 0, i32 4
  %91 = load i32, ptr %90, align 8, !tbaa !11
  %92 = and i32 %91, 16384
  %93 = icmp ne i32 %92, 0
  br i1 %93, label %94, label %211

94:                                               ; preds = %84
  %95 = load ptr, ptr %11, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.rw::ps2::Ps2Raster", ptr %95, i32 0, i32 10
  %97 = load i8, ptr %96, align 4, !tbaa !13
  %98 = sext i8 %97 to i32
  %99 = and i32 %98, 4
  %100 = icmp ne i32 %99, 0
  br i1 %100, label %101, label %211

101:                                              ; preds = %94
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %102

102:                                              ; preds = %207, %101
  %103 = load i32, ptr %6, align 4, !tbaa !9
  %104 = load i32, ptr %8, align 4, !tbaa !9
  %105 = icmp slt i32 %103, %104
  br i1 %105, label %106, label %210

106:                                              ; preds = %102
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %107

107:                                              ; preds = %192, %106
  %108 = load i32, ptr %9, align 4, !tbaa !9
  %109 = icmp slt i32 %108, 4
  br i1 %109, label %110, label %195

110:                                              ; preds = %107
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %111

111:                                              ; preds = %188, %110
  %112 = load i32, ptr %5, align 4, !tbaa !9
  %113 = load i32, ptr %7, align 4, !tbaa !9
  %114 = icmp slt i32 %112, %113
  br i1 %114, label %115, label %191

115:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %116 = load i32, ptr %6, align 4, !tbaa !9
  %117 = load i32, ptr %9, align 4, !tbaa !9
  %118 = add nsw i32 %116, %117
  %119 = load i32, ptr %10, align 4, !tbaa !9
  %120 = shl i32 %118, %119
  %121 = load i32, ptr %5, align 4, !tbaa !9
  %122 = add nsw i32 %120, %121
  store i32 %122, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %123 = load i32, ptr %5, align 4, !tbaa !9
  %124 = load i32, ptr %6, align 4, !tbaa !9
  %125 = load i32, ptr %9, align 4, !tbaa !9
  %126 = add nsw i32 %124, %125
  %127 = load i32, ptr %10, align 4, !tbaa !9
  %128 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %123, i32 noundef %126, i32 noundef %127)
  %129 = load i32, ptr %4, align 4, !tbaa !9
  %130 = and i32 %128, %129
  store i32 %130, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #4
  %131 = load i32, ptr %16, align 4, !tbaa !9
  %132 = and i32 %131, 1
  %133 = icmp ne i32 %132, 0
  br i1 %133, label %134, label %143

134:                                              ; preds = %115
  %135 = load ptr, ptr %12, align 8, !tbaa !5
  %136 = load i32, ptr %16, align 4, !tbaa !9
  %137 = lshr i32 %136, 1
  %138 = zext i32 %137 to i64
  %139 = getelementptr inbounds i8, ptr %135, i64 %138
  %140 = load i8, ptr %139, align 1, !tbaa !22
  %141 = zext i8 %140 to i32
  %142 = ashr i32 %141, 4
  br label %152

143:                                              ; preds = %115
  %144 = load ptr, ptr %12, align 8, !tbaa !5
  %145 = load i32, ptr %16, align 4, !tbaa !9
  %146 = lshr i32 %145, 1
  %147 = zext i32 %146 to i64
  %148 = getelementptr inbounds i8, ptr %144, i64 %147
  %149 = load i8, ptr %148, align 1, !tbaa !22
  %150 = zext i8 %149 to i32
  %151 = and i32 %150, 15
  br label %152

152:                                              ; preds = %143, %134
  %153 = phi i32 [ %142, %134 ], [ %151, %143 ]
  %154 = trunc i32 %153 to i8
  store i8 %154, ptr %18, align 1, !tbaa !22
  %155 = load i32, ptr %17, align 4, !tbaa !9
  %156 = and i32 %155, 1
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %158, label %170

158:                                              ; preds = %152
  %159 = load i32, ptr %17, align 4, !tbaa !9
  %160 = lshr i32 %159, 1
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds [4096 x i8], ptr %3, i64 0, i64 %161
  %163 = load i8, ptr %162, align 1, !tbaa !22
  %164 = zext i8 %163 to i32
  %165 = and i32 %164, 15
  %166 = load i8, ptr %18, align 1, !tbaa !22
  %167 = zext i8 %166 to i32
  %168 = shl i32 %167, 4
  %169 = or i32 %165, %168
  br label %181

170:                                              ; preds = %152
  %171 = load i32, ptr %17, align 4, !tbaa !9
  %172 = lshr i32 %171, 1
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds [4096 x i8], ptr %3, i64 0, i64 %173
  %175 = load i8, ptr %174, align 1, !tbaa !22
  %176 = zext i8 %175 to i32
  %177 = and i32 %176, 240
  %178 = load i8, ptr %18, align 1, !tbaa !22
  %179 = zext i8 %178 to i32
  %180 = or i32 %177, %179
  br label %181

181:                                              ; preds = %170, %158
  %182 = phi i32 [ %169, %158 ], [ %180, %170 ]
  %183 = trunc i32 %182 to i8
  %184 = load i32, ptr %17, align 4, !tbaa !9
  %185 = lshr i32 %184, 1
  %186 = zext i32 %185 to i64
  %187 = getelementptr inbounds [4096 x i8], ptr %3, i64 0, i64 %186
  store i8 %183, ptr %187, align 1, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %188

188:                                              ; preds = %181
  %189 = load i32, ptr %5, align 4, !tbaa !9
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %5, align 4, !tbaa !9
  br label %111, !llvm.loop !23

191:                                              ; preds = %111
  br label %192

192:                                              ; preds = %191
  %193 = load i32, ptr %9, align 4, !tbaa !9
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %9, align 4, !tbaa !9
  br label %107, !llvm.loop !24

195:                                              ; preds = %107
  %196 = load ptr, ptr %12, align 8, !tbaa !5
  %197 = load i32, ptr %6, align 4, !tbaa !9
  %198 = load i32, ptr %10, align 4, !tbaa !9
  %199 = sub nsw i32 %198, 1
  %200 = shl i32 %197, %199
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i8, ptr %196, i64 %201
  %203 = getelementptr inbounds [4096 x i8], ptr %3, i64 0, i64 0
  %204 = load i32, ptr %7, align 4, !tbaa !9
  %205 = mul nsw i32 2, %204
  %206 = sext i32 %205 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %202, ptr align 16 %203, i64 %206, i1 false)
  br label %207

207:                                              ; preds = %195
  %208 = load i32, ptr %6, align 4, !tbaa !9
  %209 = add nsw i32 %208, 4
  store i32 %209, ptr %6, align 4, !tbaa !9
  br label %102, !llvm.loop !25

210:                                              ; preds = %102
  br label %285

211:                                              ; preds = %94, %84
  %212 = load ptr, ptr %2, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.rw::Raster", ptr %212, i32 0, i32 4
  %214 = load i32, ptr %213, align 8, !tbaa !11
  %215 = and i32 %214, 8192
  %216 = icmp ne i32 %215, 0
  br i1 %216, label %217, label %284

217:                                              ; preds = %211
  %218 = load ptr, ptr %11, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.rw::ps2::Ps2Raster", ptr %218, i32 0, i32 10
  %220 = load i8, ptr %219, align 4, !tbaa !13
  %221 = sext i8 %220 to i32
  %222 = and i32 %221, 2
  %223 = icmp ne i32 %222, 0
  br i1 %223, label %224, label %284

224:                                              ; preds = %217
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %225

225:                                              ; preds = %280, %224
  %226 = load i32, ptr %6, align 4, !tbaa !9
  %227 = load i32, ptr %8, align 4, !tbaa !9
  %228 = icmp slt i32 %226, %227
  br i1 %228, label %229, label %283

229:                                              ; preds = %225
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %230

230:                                              ; preds = %266, %229
  %231 = load i32, ptr %9, align 4, !tbaa !9
  %232 = icmp slt i32 %231, 4
  br i1 %232, label %233, label %269

233:                                              ; preds = %230
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %262, %233
  %235 = load i32, ptr %5, align 4, !tbaa !9
  %236 = load i32, ptr %7, align 4, !tbaa !9
  %237 = icmp slt i32 %235, %236
  br i1 %237, label %238, label %265

238:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %239 = load i32, ptr %6, align 4, !tbaa !9
  %240 = load i32, ptr %9, align 4, !tbaa !9
  %241 = add nsw i32 %239, %240
  %242 = load i32, ptr %10, align 4, !tbaa !9
  %243 = shl i32 %241, %242
  %244 = load i32, ptr %5, align 4, !tbaa !9
  %245 = add nsw i32 %243, %244
  store i32 %245, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %246 = load i32, ptr %5, align 4, !tbaa !9
  %247 = load i32, ptr %6, align 4, !tbaa !9
  %248 = load i32, ptr %9, align 4, !tbaa !9
  %249 = add nsw i32 %247, %248
  %250 = load i32, ptr %10, align 4, !tbaa !9
  %251 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %246, i32 noundef %249, i32 noundef %250)
  %252 = load i32, ptr %4, align 4, !tbaa !9
  %253 = and i32 %251, %252
  store i32 %253, ptr %20, align 4, !tbaa !9
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = load i32, ptr %19, align 4, !tbaa !9
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds i8, ptr %254, i64 %256
  %258 = load i8, ptr %257, align 1, !tbaa !22
  %259 = load i32, ptr %20, align 4, !tbaa !9
  %260 = zext i32 %259 to i64
  %261 = getelementptr inbounds [4096 x i8], ptr %3, i64 0, i64 %260
  store i8 %258, ptr %261, align 1, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  br label %262

262:                                              ; preds = %238
  %263 = load i32, ptr %5, align 4, !tbaa !9
  %264 = add nsw i32 %263, 1
  store i32 %264, ptr %5, align 4, !tbaa !9
  br label %234, !llvm.loop !26

265:                                              ; preds = %234
  br label %266

266:                                              ; preds = %265
  %267 = load i32, ptr %9, align 4, !tbaa !9
  %268 = add nsw i32 %267, 1
  store i32 %268, ptr %9, align 4, !tbaa !9
  br label %230, !llvm.loop !27

269:                                              ; preds = %230
  %270 = load ptr, ptr %12, align 8, !tbaa !5
  %271 = load i32, ptr %6, align 4, !tbaa !9
  %272 = load i32, ptr %10, align 4, !tbaa !9
  %273 = shl i32 %271, %272
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds i8, ptr %270, i64 %274
  %276 = getelementptr inbounds [4096 x i8], ptr %3, i64 0, i64 0
  %277 = load i32, ptr %7, align 4, !tbaa !9
  %278 = mul nsw i32 4, %277
  %279 = sext i32 %278 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %275, ptr align 16 %276, i64 %279, i1 false)
  br label %280

280:                                              ; preds = %269
  %281 = load i32, ptr %6, align 4, !tbaa !9
  %282 = add nsw i32 %281, 4
  store i32 %282, ptr %6, align 4, !tbaa !9
  br label %225, !llvm.loop !28

283:                                              ; preds = %225
  br label %284

284:                                              ; preds = %283, %217, %211
  br label %285

285:                                              ; preds = %284, %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  store i32 0, ptr %13, align 4
  br label %286

286:                                              ; preds = %285, %30
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 4096, ptr %3) #4
  %287 = load i32, ptr %13, align 4
  switch i32 %287, label %289 [
    i32 0, label %288
    i32 1, label %288
  ]

288:                                              ; preds = %286, %286
  ret void

289:                                              ; preds = %286
  unreachable
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 16}
!12 = !{!"_ZTSN2rw6RasterE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !6, i64 80, !10, i64 88, !10, i64 92}
!13 = !{!14, !7, i64 44}
!14 = !{!"_ZTSN2rw3ps29Ps2RasterE", !15, i64 0, !10, i64 8, !16, i64 12, !7, i64 14, !7, i64 15, !15, i64 16, !15, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !7, i64 44, !6, i64 48, !10, i64 56}
!15 = !{!"long", !7, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!12, !10, i64 20}
!18 = !{!12, !10, i64 24}
!19 = !{!12, !6, i64 40}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !21}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21}
!28 = distinct !{!28, !21}


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

@_ZN2rw3ps218nativeRasterOffsetE = external dso_local local_unnamed_addr global i32, 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 nounwind uwtable
declare hidden void @_ZN2rw3ps2L15transferMinSizeEiiPiS1_(i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; 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) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN2rw3ps213swizzleRasterEPNS_6RasterE(ptr nocapture noundef readonly %0) local_unnamed_addr #1 {
  %2 = alloca [4096 x i8], align 16
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %2) #4
  %5 = getelementptr inbounds i8, ptr %0, i64 16
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %7 = and i32 %6, 24576
  %8 = icmp eq i32 %7, 0
  br i1 %8, label %223, label %9

9:                                                ; preds = %1
  %10 = load i32, ptr @_ZN2rw3ps218nativeRasterOffsetE, align 4, !tbaa !11
  %11 = sext i32 %10 to i64
  %12 = getelementptr inbounds i8, ptr %0, i64 %11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #4
  %13 = and i32 %6, 16384
  %.not = icmp eq i32 %13, 0
  %14 = select i1 %.not, i32 19, i32 20
  %15 = getelementptr inbounds i8, ptr %12, i64 44
  %16 = load i8, ptr %15, align 4, !tbaa !12
  %17 = sext i8 %16 to i32
  call void @_ZN2rw3ps2L15transferMinSizeEiiPiS1_(i32 noundef %14, i32 noundef %17, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %18 = getelementptr inbounds i8, ptr %0, i64 20
  %19 = load i32, ptr %18, align 4, !tbaa !16
  %20 = load i32, ptr %3, align 4, !tbaa !11
  %. = call i32 @llvm.smax.i32(i32 %19, i32 %20)
  %21 = getelementptr inbounds i8, ptr %0, i64 24
  %22 = load i32, ptr %21, align 8, !tbaa !17
  %23 = load i32, ptr %4, align 4, !tbaa !11
  %24 = call i32 @llvm.smax.i32(i32 %22, i32 %23)
  %25 = getelementptr inbounds i8, ptr %0, i64 40
  %26 = load ptr, ptr %25, align 8, !tbaa !18
  %27 = icmp sgt i32 %19, 1
  br i1 %27, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %9, %.lr.ph
  %.07596 = phi i32 [ %29, %.lr.ph ], [ 1, %9 ]
  %.07795 = phi i32 [ %28, %.lr.ph ], [ 0, %9 ]
  %28 = add nuw nsw i32 %.07795, 1
  %29 = shl nsw i32 %.07596, 1
  %30 = icmp slt i32 %29, %19
  br i1 %30, label %.lr.ph, label %._crit_edge, !llvm.loop !19

._crit_edge:                                      ; preds = %.lr.ph, %9
  %.077.lcssa = phi i32 [ 0, %9 ], [ %28, %.lr.ph ]
  %31 = shl nuw i32 4, %.077.lcssa
  %32 = add nsw i32 %31, -1
  %33 = load i32, ptr %5, align 8, !tbaa !5
  %34 = and i32 %33, 16384
  %.not82 = icmp eq i32 %34, 0
  br i1 %.not82, label %159, label %35

35:                                               ; preds = %._crit_edge
  %36 = load i8, ptr %15, align 4, !tbaa !12
  %37 = and i8 %36, 4
  %.not83 = icmp eq i8 %37, 0
  br i1 %.not83, label %159, label %.preheader93

.preheader93:                                     ; preds = %35
  %38 = icmp sgt i32 %24, 0
  br i1 %38, label %.preheader92.lr.ph, label %.loopexit

.preheader92.lr.ph:                               ; preds = %.preheader93
  %39 = icmp sgt i32 %., 0
  %40 = add nsw i32 %.077.lcssa, -1
  %41 = shl nsw i32 %., 1
  %42 = sext i32 %41 to i64
  br i1 %39, label %.preheader92.us, label %.loopexit

.preheader92.us:                                  ; preds = %.preheader92.lr.ph, %._crit_edge99.us.us.3
  %.073101.us = phi i32 [ %157, %._crit_edge99.us.us.3 ], [ 0, %.preheader92.lr.ph ]
  %43 = shl i32 %.073101.us, %.077.lcssa
  br label %44

44:                                               ; preds = %67, %.preheader92.us
  %.097.us.us = phi i32 [ 0, %.preheader92.us ], [ %69, %67 ]
  %45 = add nsw i32 %.097.us.us, %43
  %46 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %.097.us.us, i32 noundef %.073101.us, i32 noundef %.077.lcssa)
  %47 = and i32 %46, %32
  %48 = and i32 %.097.us.us, 1
  %.not86.us.us = icmp eq i32 %48, 0
  %49 = lshr i32 %45, 1
  %50 = zext nneg i32 %49 to i64
  %51 = getelementptr inbounds i8, ptr %26, i64 %50
  %52 = load i8, ptr %51, align 1, !tbaa !21
  %53 = lshr i8 %52, 4
  %54 = and i8 %52, 15
  %.in.us.us = select i1 %.not86.us.us, i8 %54, i8 %53
  %55 = and i32 %46, 1
  %.not87.us.us = icmp eq i32 %55, 0
  %56 = lshr i32 %47, 1
  %57 = zext nneg i32 %56 to i64
  %58 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %57
  %59 = load i8, ptr %58, align 1, !tbaa !21
  br i1 %.not87.us.us, label %64, label %60

60:                                               ; preds = %44
  %61 = and i8 %59, 15
  %62 = shl nuw i8 %.in.us.us, 4
  %63 = or disjoint i8 %61, %62
  br label %67

64:                                               ; preds = %44
  %65 = and i8 %59, -16
  %66 = or disjoint i8 %65, %.in.us.us
  br label %67

67:                                               ; preds = %64, %60
  %.in88.us.us = phi i8 [ %66, %64 ], [ %63, %60 ]
  %68 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %57
  store i8 %.in88.us.us, ptr %68, align 1, !tbaa !21
  %69 = add nuw nsw i32 %.097.us.us, 1
  %exitcond.not = icmp eq i32 %69, %.
  br i1 %exitcond.not, label %._crit_edge99.us.us, label %44, !llvm.loop !22

._crit_edge99.us.us:                              ; preds = %67
  %70 = or disjoint i32 %.073101.us, 1
  %71 = shl i32 %70, %.077.lcssa
  br label %72

72:                                               ; preds = %95, %._crit_edge99.us.us
  %.097.us.us.1 = phi i32 [ 0, %._crit_edge99.us.us ], [ %97, %95 ]
  %73 = add nsw i32 %.097.us.us.1, %71
  %74 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %.097.us.us.1, i32 noundef %70, i32 noundef %.077.lcssa)
  %75 = and i32 %74, %32
  %76 = and i32 %73, 1
  %.not86.us.us.1 = icmp eq i32 %76, 0
  %77 = lshr i32 %73, 1
  %78 = zext nneg i32 %77 to i64
  %79 = getelementptr inbounds i8, ptr %26, i64 %78
  %80 = load i8, ptr %79, align 1, !tbaa !21
  %81 = lshr i8 %80, 4
  %82 = and i8 %80, 15
  %.in.us.us.1 = select i1 %.not86.us.us.1, i8 %82, i8 %81
  %83 = and i32 %74, 1
  %.not87.us.us.1 = icmp eq i32 %83, 0
  %84 = lshr i32 %75, 1
  %85 = zext nneg i32 %84 to i64
  %86 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %85
  %87 = load i8, ptr %86, align 1, !tbaa !21
  br i1 %.not87.us.us.1, label %92, label %88

88:                                               ; preds = %72
  %89 = and i8 %87, 15
  %90 = shl nuw i8 %.in.us.us.1, 4
  %91 = or disjoint i8 %89, %90
  br label %95

92:                                               ; preds = %72
  %93 = and i8 %87, -16
  %94 = or disjoint i8 %93, %.in.us.us.1
  br label %95

95:                                               ; preds = %92, %88
  %.in88.us.us.1 = phi i8 [ %94, %92 ], [ %91, %88 ]
  %96 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %85
  store i8 %.in88.us.us.1, ptr %96, align 1, !tbaa !21
  %97 = add nuw nsw i32 %.097.us.us.1, 1
  %exitcond.1.not = icmp eq i32 %97, %.
  br i1 %exitcond.1.not, label %._crit_edge99.us.us.1, label %72, !llvm.loop !22

._crit_edge99.us.us.1:                            ; preds = %95
  %98 = or disjoint i32 %.073101.us, 2
  %99 = shl i32 %98, %.077.lcssa
  br label %100

100:                                              ; preds = %123, %._crit_edge99.us.us.1
  %.097.us.us.2 = phi i32 [ 0, %._crit_edge99.us.us.1 ], [ %125, %123 ]
  %101 = add nsw i32 %.097.us.us.2, %99
  %102 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %.097.us.us.2, i32 noundef %98, i32 noundef %.077.lcssa)
  %103 = and i32 %102, %32
  %104 = and i32 %.097.us.us.2, 1
  %.not86.us.us.2 = icmp eq i32 %104, 0
  %105 = lshr i32 %101, 1
  %106 = zext nneg i32 %105 to i64
  %107 = getelementptr inbounds i8, ptr %26, i64 %106
  %108 = load i8, ptr %107, align 1, !tbaa !21
  %109 = lshr i8 %108, 4
  %110 = and i8 %108, 15
  %.in.us.us.2 = select i1 %.not86.us.us.2, i8 %110, i8 %109
  %111 = and i32 %102, 1
  %.not87.us.us.2 = icmp eq i32 %111, 0
  %112 = lshr i32 %103, 1
  %113 = zext nneg i32 %112 to i64
  %114 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %113
  %115 = load i8, ptr %114, align 1, !tbaa !21
  br i1 %.not87.us.us.2, label %120, label %116

116:                                              ; preds = %100
  %117 = and i8 %115, 15
  %118 = shl nuw i8 %.in.us.us.2, 4
  %119 = or disjoint i8 %117, %118
  br label %123

120:                                              ; preds = %100
  %121 = and i8 %115, -16
  %122 = or disjoint i8 %121, %.in.us.us.2
  br label %123

123:                                              ; preds = %120, %116
  %.in88.us.us.2 = phi i8 [ %122, %120 ], [ %119, %116 ]
  %124 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %113
  store i8 %.in88.us.us.2, ptr %124, align 1, !tbaa !21
  %125 = add nuw nsw i32 %.097.us.us.2, 1
  %exitcond.2.not = icmp eq i32 %125, %.
  br i1 %exitcond.2.not, label %._crit_edge99.us.us.2, label %100, !llvm.loop !22

._crit_edge99.us.us.2:                            ; preds = %123
  %126 = or disjoint i32 %.073101.us, 3
  %127 = shl i32 %126, %.077.lcssa
  br label %128

128:                                              ; preds = %151, %._crit_edge99.us.us.2
  %.097.us.us.3 = phi i32 [ 0, %._crit_edge99.us.us.2 ], [ %153, %151 ]
  %129 = add nsw i32 %.097.us.us.3, %127
  %130 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %.097.us.us.3, i32 noundef %126, i32 noundef %.077.lcssa)
  %131 = and i32 %130, %32
  %132 = and i32 %129, 1
  %.not86.us.us.3 = icmp eq i32 %132, 0
  %133 = lshr i32 %129, 1
  %134 = zext nneg i32 %133 to i64
  %135 = getelementptr inbounds i8, ptr %26, i64 %134
  %136 = load i8, ptr %135, align 1, !tbaa !21
  %137 = lshr i8 %136, 4
  %138 = and i8 %136, 15
  %.in.us.us.3 = select i1 %.not86.us.us.3, i8 %138, i8 %137
  %139 = and i32 %130, 1
  %.not87.us.us.3 = icmp eq i32 %139, 0
  %140 = lshr i32 %131, 1
  %141 = zext nneg i32 %140 to i64
  %142 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %141
  %143 = load i8, ptr %142, align 1, !tbaa !21
  br i1 %.not87.us.us.3, label %148, label %144

144:                                              ; preds = %128
  %145 = and i8 %143, 15
  %146 = shl nuw i8 %.in.us.us.3, 4
  %147 = or disjoint i8 %145, %146
  br label %151

148:                                              ; preds = %128
  %149 = and i8 %143, -16
  %150 = or disjoint i8 %149, %.in.us.us.3
  br label %151

151:                                              ; preds = %148, %144
  %.in88.us.us.3 = phi i8 [ %150, %148 ], [ %147, %144 ]
  %152 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %141
  store i8 %.in88.us.us.3, ptr %152, align 1, !tbaa !21
  %153 = add nuw nsw i32 %.097.us.us.3, 1
  %exitcond.3.not = icmp eq i32 %153, %.
  br i1 %exitcond.3.not, label %._crit_edge99.us.us.3, label %128, !llvm.loop !22

._crit_edge99.us.us.3:                            ; preds = %151
  %154 = shl i32 %.073101.us, %40
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds i8, ptr %26, i64 %155
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %156, ptr nonnull align 16 %2, i64 %42, i1 false)
  %157 = add nuw nsw i32 %.073101.us, 4
  %158 = icmp slt i32 %157, %24
  br i1 %158, label %.preheader92.us, label %.loopexit, !llvm.loop !23

159:                                              ; preds = %35, %._crit_edge
  %160 = and i32 %33, 8192
  %.not84 = icmp eq i32 %160, 0
  br i1 %.not84, label %.loopexit, label %161

161:                                              ; preds = %159
  %162 = load i8, ptr %15, align 4, !tbaa !12
  %163 = and i8 %162, 2
  %.not85 = icmp ne i8 %163, 0
  %164 = icmp sgt i32 %24, 0
  %or.cond = select i1 %.not85, i1 %164, i1 false
  br i1 %or.cond, label %.preheader89.lr.ph, label %.loopexit

.preheader89.lr.ph:                               ; preds = %161
  %165 = icmp sgt i32 %., 0
  %166 = shl nsw i32 %., 2
  %167 = sext i32 %166 to i64
  br i1 %165, label %.preheader89.us.preheader, label %.loopexit

.preheader89.us.preheader:                        ; preds = %.preheader89.lr.ph
  %wide.trip.count = zext nneg i32 %. to i64
  br label %.preheader89.us

.preheader89.us:                                  ; preds = %.preheader89.us.preheader, %._crit_edge104.us.us.3
  %.174108.us = phi i32 [ %221, %._crit_edge104.us.us.3 ], [ 0, %.preheader89.us.preheader ]
  %168 = shl i32 %.174108.us, %.077.lcssa
  %169 = sext i32 %168 to i64
  br label %170

170:                                              ; preds = %170, %.preheader89.us
  %indvars.iv = phi i64 [ %indvars.iv.next, %170 ], [ 0, %.preheader89.us ]
  %171 = trunc nuw nsw i64 %indvars.iv to i32
  %172 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %171, i32 noundef %.174108.us, i32 noundef %.077.lcssa)
  %173 = and i32 %172, %32
  %174 = trunc i64 %indvars.iv to i32
  %175 = add i32 %168, %174
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds i8, ptr %26, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !21
  %179 = zext i32 %173 to i64
  %180 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %179
  store i8 %178, ptr %180, align 1, !tbaa !21
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond114.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond114.not, label %._crit_edge104.us.us, label %170, !llvm.loop !24

._crit_edge104.us.us:                             ; preds = %170
  %181 = or disjoint i32 %.174108.us, 1
  %182 = shl i32 %181, %.077.lcssa
  br label %183

183:                                              ; preds = %183, %._crit_edge104.us.us
  %indvars.iv.1 = phi i64 [ %indvars.iv.next.1, %183 ], [ 0, %._crit_edge104.us.us ]
  %184 = trunc nuw nsw i64 %indvars.iv.1 to i32
  %185 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %184, i32 noundef %181, i32 noundef %.077.lcssa)
  %186 = and i32 %185, %32
  %187 = trunc i64 %indvars.iv.1 to i32
  %188 = add i32 %182, %187
  %189 = zext i32 %188 to i64
  %190 = getelementptr inbounds i8, ptr %26, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !21
  %192 = zext i32 %186 to i64
  %193 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %192
  store i8 %191, ptr %193, align 1, !tbaa !21
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.1, 1
  %exitcond114.1.not = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond114.1.not, label %._crit_edge104.us.us.1, label %183, !llvm.loop !24

._crit_edge104.us.us.1:                           ; preds = %183
  %194 = or disjoint i32 %.174108.us, 2
  %195 = shl i32 %194, %.077.lcssa
  br label %196

196:                                              ; preds = %196, %._crit_edge104.us.us.1
  %indvars.iv.2 = phi i64 [ %indvars.iv.next.2, %196 ], [ 0, %._crit_edge104.us.us.1 ]
  %197 = trunc nuw nsw i64 %indvars.iv.2 to i32
  %198 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %197, i32 noundef %194, i32 noundef %.077.lcssa)
  %199 = and i32 %198, %32
  %200 = trunc i64 %indvars.iv.2 to i32
  %201 = add i32 %195, %200
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds i8, ptr %26, i64 %202
  %204 = load i8, ptr %203, align 1, !tbaa !21
  %205 = zext i32 %199 to i64
  %206 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %205
  store i8 %204, ptr %206, align 1, !tbaa !21
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv.2, 1
  %exitcond114.2.not = icmp eq i64 %indvars.iv.next.2, %wide.trip.count
  br i1 %exitcond114.2.not, label %._crit_edge104.us.us.2, label %196, !llvm.loop !24

._crit_edge104.us.us.2:                           ; preds = %196
  %207 = or disjoint i32 %.174108.us, 3
  %208 = shl i32 %207, %.077.lcssa
  br label %209

209:                                              ; preds = %209, %._crit_edge104.us.us.2
  %indvars.iv.3 = phi i64 [ %indvars.iv.next.3, %209 ], [ 0, %._crit_edge104.us.us.2 ]
  %210 = trunc nuw nsw i64 %indvars.iv.3 to i32
  %211 = call noundef i32 @_ZN2rw3ps2L7swizzleEjjj(i32 noundef %210, i32 noundef %207, i32 noundef %.077.lcssa)
  %212 = and i32 %211, %32
  %213 = trunc i64 %indvars.iv.3 to i32
  %214 = add i32 %208, %213
  %215 = zext i32 %214 to i64
  %216 = getelementptr inbounds i8, ptr %26, i64 %215
  %217 = load i8, ptr %216, align 1, !tbaa !21
  %218 = zext i32 %212 to i64
  %219 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %218
  store i8 %217, ptr %219, align 1, !tbaa !21
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv.3, 1
  %exitcond114.3.not = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond114.3.not, label %._crit_edge104.us.us.3, label %209, !llvm.loop !24

._crit_edge104.us.us.3:                           ; preds = %209
  %220 = getelementptr inbounds i8, ptr %26, i64 %169
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %220, ptr nonnull align 16 %2, i64 %167, i1 false)
  %221 = add nuw nsw i32 %.174108.us, 4
  %222 = icmp slt i32 %221, %24
  br i1 %222, label %.preheader89.us, label %.loopexit, !llvm.loop !25

.loopexit:                                        ; preds = %._crit_edge99.us.us.3, %._crit_edge104.us.us.3, %.preheader92.lr.ph, %.preheader89.lr.ph, %.preheader93, %159, %161
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #4
  br label %223

223:                                              ; preds = %1, %.loopexit
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %2) #4
  ret void
}

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress 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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 16}
!6 = !{!"_ZTSN2rw6RasterE", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !7, i64 64, !7, i64 68, !7, i64 72, !10, i64 80, !7, i64 88, !7, i64 92}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !8, i64 44}
!13 = !{!"_ZTSN2rw3ps29Ps2RasterE", !14, i64 0, !7, i64 8, !15, i64 12, !8, i64 14, !8, i64 15, !14, i64 16, !14, i64 24, !7, i64 32, !7, i64 36, !7, i64 40, !8, i64 44, !10, i64 48, !7, i64 56}
!14 = !{!"long", !8, i64 0}
!15 = !{!"short", !8, i64 0}
!16 = !{!6, !7, i64 20}
!17 = !{!6, !7, i64 24}
!18 = !{!6, !10, i64 40}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!8, !8, i64 0}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass