; LLVM IR from achilles288/robot-monitor-graphics :: src/base/bitmap.ll (ZN3rmg6Bitmap9pasteRGBAERKS0_ss)

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

%"class.rmg::Bitmap" = type { i16, i16, i8, ptr }

; 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 nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #1

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN3rmg6Bitmap9pasteRGBAERKS0_ss(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 8 dereferenceable(16) %1, i16 noundef signext %2, i16 noundef signext %3) #2 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i16, align 2
  %8 = alloca i16, align 2
  %9 = alloca i16, align 2
  %10 = alloca i16, align 2
  %11 = alloca i16, align 2
  %12 = alloca i16, align 2
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i16, align 2
  %18 = alloca i32, align 4
  %19 = alloca i16, align 2
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca i16, align 2
  %23 = alloca i16, align 2
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i16 %2, ptr %7, align 2, !tbaa !9
  store i16 %3, ptr %8, align 2, !tbaa !9
  %28 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #3
  %29 = load ptr, ptr %6, align 8, !tbaa !5
  %30 = getelementptr inbounds %"class.rmg::Bitmap", ptr %29, i32 0, i32 0
  %31 = load i16, ptr %30, align 8, !tbaa !11
  store i16 %31, ptr %9, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #3
  %32 = load ptr, ptr %6, align 8, !tbaa !5
  %33 = getelementptr inbounds %"class.rmg::Bitmap", ptr %32, i32 0, i32 1
  %34 = load i16, ptr %33, align 2, !tbaa !13
  store i16 %34, ptr %10, align 2, !tbaa !9
  %35 = load i16, ptr %7, align 2, !tbaa !9
  %36 = sext i16 %35 to i32
  %37 = load i16, ptr %9, align 2, !tbaa !9
  %38 = zext i16 %37 to i32
  %39 = add nsw i32 %36, %38
  %40 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 0
  %41 = load i16, ptr %40, align 8, !tbaa !11
  %42 = zext i16 %41 to i32
  %43 = icmp sgt i32 %39, %42
  br i1 %43, label %44, label %52

44:                                               ; preds = %4
  %45 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 0
  %46 = load i16, ptr %45, align 8, !tbaa !11
  %47 = zext i16 %46 to i32
  %48 = load i16, ptr %7, align 2, !tbaa !9
  %49 = sext i16 %48 to i32
  %50 = sub nsw i32 %47, %49
  %51 = trunc i32 %50 to i16
  store i16 %51, ptr %9, align 2, !tbaa !9
  br label %52

52:                                               ; preds = %44, %4
  %53 = load i16, ptr %8, align 2, !tbaa !9
  %54 = sext i16 %53 to i32
  %55 = load i16, ptr %10, align 2, !tbaa !9
  %56 = zext i16 %55 to i32
  %57 = add nsw i32 %54, %56
  %58 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 1
  %59 = load i16, ptr %58, align 2, !tbaa !13
  %60 = zext i16 %59 to i32
  %61 = icmp sgt i32 %57, %60
  br i1 %61, label %62, label %70

62:                                               ; preds = %52
  %63 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 1
  %64 = load i16, ptr %63, align 2, !tbaa !13
  %65 = zext i16 %64 to i32
  %66 = load i16, ptr %8, align 2, !tbaa !9
  %67 = sext i16 %66 to i32
  %68 = sub nsw i32 %65, %67
  %69 = trunc i32 %68 to i16
  store i16 %69, ptr %10, align 2, !tbaa !9
  br label %70

70:                                               ; preds = %62, %52
  call void @llvm.lifetime.start.p0(i64 2, ptr %11) #3
  %71 = load i16, ptr %7, align 2, !tbaa !9
  %72 = sext i16 %71 to i32
  %73 = icmp slt i32 %72, 0
  br i1 %73, label %74, label %78

74:                                               ; preds = %70
  %75 = load i16, ptr %7, align 2, !tbaa !9
  %76 = sext i16 %75 to i32
  %77 = sub nsw i32 0, %76
  br label %79

78:                                               ; preds = %70
  br label %79

79:                                               ; preds = %78, %74
  %80 = phi i32 [ %77, %74 ], [ 0, %78 ]
  %81 = trunc i32 %80 to i16
  store i16 %81, ptr %11, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #3
  %82 = load i16, ptr %8, align 2, !tbaa !9
  %83 = sext i16 %82 to i32
  %84 = icmp slt i32 %83, 0
  br i1 %84, label %85, label %89

85:                                               ; preds = %79
  %86 = load i16, ptr %8, align 2, !tbaa !9
  %87 = sext i16 %86 to i32
  %88 = sub nsw i32 0, %87
  br label %90

89:                                               ; preds = %79
  br label %90

90:                                               ; preds = %89, %85
  %91 = phi i32 [ %88, %85 ], [ 0, %89 ]
  %92 = trunc i32 %91 to i16
  store i16 %92, ptr %12, align 2, !tbaa !9
  %93 = load i16, ptr %11, align 2, !tbaa !9
  %94 = zext i16 %93 to i32
  %95 = load i16, ptr %9, align 2, !tbaa !9
  %96 = zext i16 %95 to i32
  %97 = sub nsw i32 %96, %94
  %98 = trunc i32 %97 to i16
  store i16 %98, ptr %9, align 2, !tbaa !9
  %99 = load i16, ptr %12, align 2, !tbaa !9
  %100 = zext i16 %99 to i32
  %101 = load i16, ptr %10, align 2, !tbaa !9
  %102 = zext i16 %101 to i32
  %103 = sub nsw i32 %102, %100
  %104 = trunc i32 %103 to i16
  store i16 %104, ptr %10, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %"class.rmg::Bitmap", ptr %105, i32 0, i32 3
  %107 = load ptr, ptr %106, align 8, !tbaa !14
  %108 = load i16, ptr %11, align 2, !tbaa !9
  %109 = zext i16 %108 to i32
  %110 = load i16, ptr %12, align 2, !tbaa !9
  %111 = zext i16 %110 to i32
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = getelementptr inbounds %"class.rmg::Bitmap", ptr %112, i32 0, i32 0
  %114 = load i16, ptr %113, align 8, !tbaa !11
  %115 = zext i16 %114 to i32
  %116 = mul nsw i32 %111, %115
  %117 = add nsw i32 %109, %116
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds %"class.rmg::Bitmap", ptr %118, i32 0, i32 2
  %120 = load i8, ptr %119, align 4, !tbaa !15
  %121 = zext i8 %120 to i32
  %122 = mul nsw i32 %117, %121
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds i8, ptr %107, i64 %123
  store ptr %124, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %125 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 3
  %126 = load ptr, ptr %125, align 8, !tbaa !14
  %127 = load i16, ptr %7, align 2, !tbaa !9
  %128 = sext i16 %127 to i32
  %129 = load i16, ptr %8, align 2, !tbaa !9
  %130 = sext i16 %129 to i32
  %131 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 0
  %132 = load i16, ptr %131, align 8, !tbaa !11
  %133 = zext i16 %132 to i32
  %134 = mul nsw i32 %130, %133
  %135 = add nsw i32 %128, %134
  %136 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 2
  %137 = load i8, ptr %136, align 4, !tbaa !15
  %138 = zext i8 %137 to i32
  %139 = mul nsw i32 %135, %138
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i8, ptr %126, i64 %140
  store ptr %141, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %"class.rmg::Bitmap", ptr %142, i32 0, i32 0
  %144 = load i16, ptr %143, align 8, !tbaa !11
  %145 = zext i16 %144 to i32
  %146 = load i16, ptr %9, align 2, !tbaa !9
  %147 = zext i16 %146 to i32
  %148 = sub nsw i32 %145, %147
  %149 = load ptr, ptr %6, align 8, !tbaa !5
  %150 = getelementptr inbounds %"class.rmg::Bitmap", ptr %149, i32 0, i32 2
  %151 = load i8, ptr %150, align 4, !tbaa !15
  %152 = zext i8 %151 to i32
  %153 = mul nsw i32 %148, %152
  %154 = sext i32 %153 to i64
  store i64 %154, ptr %15, align 8, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %155 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 0
  %156 = load i16, ptr %155, align 8, !tbaa !11
  %157 = zext i16 %156 to i32
  %158 = load i16, ptr %9, align 2, !tbaa !9
  %159 = zext i16 %158 to i32
  %160 = sub nsw i32 %157, %159
  %161 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 2
  %162 = load i8, ptr %161, align 4, !tbaa !15
  %163 = zext i8 %162 to i32
  %164 = mul nsw i32 %160, %163
  %165 = sext i32 %164 to i64
  store i64 %165, ptr %16, align 8, !tbaa !16
  %166 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 2
  %167 = load i8, ptr %166, align 4, !tbaa !15
  %168 = zext i8 %167 to i32
  %169 = icmp eq i32 %168, 3
  br i1 %169, label %170, label %267

170:                                              ; preds = %90
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #3
  store i16 0, ptr %17, align 2, !tbaa !9
  br label %171

171:                                              ; preds = %263, %170
  %172 = load i16, ptr %17, align 2, !tbaa !9
  %173 = zext i16 %172 to i32
  %174 = load i16, ptr %10, align 2, !tbaa !9
  %175 = zext i16 %174 to i32
  %176 = icmp slt i32 %173, %175
  br i1 %176, label %178, label %177

177:                                              ; preds = %171
  store i32 2, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #3
  br label %266

178:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #3
  store i16 0, ptr %19, align 2, !tbaa !9
  br label %179

179:                                              ; preds = %253, %178
  %180 = load i16, ptr %19, align 2, !tbaa !9
  %181 = zext i16 %180 to i32
  %182 = load i16, ptr %9, align 2, !tbaa !9
  %183 = zext i16 %182 to i32
  %184 = icmp slt i32 %181, %183
  br i1 %184, label %186, label %185

185:                                              ; preds = %179
  store i32 5, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #3
  br label %256

186:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %187 = load ptr, ptr %13, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %187, i64 3
  %189 = load i8, ptr %188, align 1, !tbaa !18
  %190 = zext i8 %189 to i32
  %191 = sitofp i32 %190 to float
  %192 = fdiv float %191, 2.550000e+02
  store float %192, ptr %20, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %193 = load float, ptr %20, align 4, !tbaa !19
  %194 = fsub float 1.000000e+00, %193
  store float %194, ptr %21, align 4, !tbaa !19
  %195 = load float, ptr %20, align 4, !tbaa !19
  %196 = load ptr, ptr %13, align 8, !tbaa !5
  %197 = getelementptr inbounds i8, ptr %196, i64 0
  %198 = load i8, ptr %197, align 1, !tbaa !18
  %199 = zext i8 %198 to i32
  %200 = sitofp i32 %199 to float
  %201 = load float, ptr %21, align 4, !tbaa !19
  %202 = load ptr, ptr %14, align 8, !tbaa !5
  %203 = getelementptr inbounds i8, ptr %202, i64 0
  %204 = load i8, ptr %203, align 1, !tbaa !18
  %205 = zext i8 %204 to i32
  %206 = sitofp i32 %205 to float
  %207 = fmul float %201, %206
  %208 = call float @llvm.fmuladd.f32(float %195, float %200, float %207)
  %209 = fadd float %208, 5.000000e-01
  %210 = fptoui float %209 to i8
  %211 = load ptr, ptr %14, align 8, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %211, i64 0
  store i8 %210, ptr %212, align 1, !tbaa !18
  %213 = load float, ptr %20, align 4, !tbaa !19
  %214 = load ptr, ptr %13, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %214, i64 1
  %216 = load i8, ptr %215, align 1, !tbaa !18
  %217 = zext i8 %216 to i32
  %218 = sitofp i32 %217 to float
  %219 = load float, ptr %21, align 4, !tbaa !19
  %220 = load ptr, ptr %14, align 8, !tbaa !5
  %221 = getelementptr inbounds i8, ptr %220, i64 1
  %222 = load i8, ptr %221, align 1, !tbaa !18
  %223 = zext i8 %222 to i32
  %224 = sitofp i32 %223 to float
  %225 = fmul float %219, %224
  %226 = call float @llvm.fmuladd.f32(float %213, float %218, float %225)
  %227 = fadd float %226, 5.000000e-01
  %228 = fptoui float %227 to i8
  %229 = load ptr, ptr %14, align 8, !tbaa !5
  %230 = getelementptr inbounds i8, ptr %229, i64 1
  store i8 %228, ptr %230, align 1, !tbaa !18
  %231 = load float, ptr %20, align 4, !tbaa !19
  %232 = load ptr, ptr %13, align 8, !tbaa !5
  %233 = getelementptr inbounds i8, ptr %232, i64 2
  %234 = load i8, ptr %233, align 1, !tbaa !18
  %235 = zext i8 %234 to i32
  %236 = sitofp i32 %235 to float
  %237 = load float, ptr %21, align 4, !tbaa !19
  %238 = load ptr, ptr %14, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %238, i64 2
  %240 = load i8, ptr %239, align 1, !tbaa !18
  %241 = zext i8 %240 to i32
  %242 = sitofp i32 %241 to float
  %243 = fmul float %237, %242
  %244 = call float @llvm.fmuladd.f32(float %231, float %236, float %243)
  %245 = fadd float %244, 5.000000e-01
  %246 = fptoui float %245 to i8
  %247 = load ptr, ptr %14, align 8, !tbaa !5
  %248 = getelementptr inbounds i8, ptr %247, i64 2
  store i8 %246, ptr %248, align 1, !tbaa !18
  %249 = load ptr, ptr %13, align 8, !tbaa !5
  %250 = getelementptr inbounds i8, ptr %249, i64 4
  store ptr %250, ptr %13, align 8, !tbaa !5
  %251 = load ptr, ptr %14, align 8, !tbaa !5
  %252 = getelementptr inbounds i8, ptr %251, i64 3
  store ptr %252, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %253

253:                                              ; preds = %186
  %254 = load i16, ptr %19, align 2, !tbaa !9
  %255 = add i16 %254, 1
  store i16 %255, ptr %19, align 2, !tbaa !9
  br label %179, !llvm.loop !21

256:                                              ; preds = %185
  %257 = load i64, ptr %15, align 8, !tbaa !16
  %258 = load ptr, ptr %13, align 8, !tbaa !5
  %259 = getelementptr inbounds i8, ptr %258, i64 %257
  store ptr %259, ptr %13, align 8, !tbaa !5
  %260 = load i64, ptr %16, align 8, !tbaa !16
  %261 = load ptr, ptr %14, align 8, !tbaa !5
  %262 = getelementptr inbounds i8, ptr %261, i64 %260
  store ptr %262, ptr %14, align 8, !tbaa !5
  br label %263

263:                                              ; preds = %256
  %264 = load i16, ptr %17, align 2, !tbaa !9
  %265 = add i16 %264, 1
  store i16 %265, ptr %17, align 2, !tbaa !9
  br label %171, !llvm.loop !23

266:                                              ; preds = %177
  br label %386

267:                                              ; preds = %90
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #3
  store i16 0, ptr %22, align 2, !tbaa !9
  br label %268

268:                                              ; preds = %382, %267
  %269 = load i16, ptr %22, align 2, !tbaa !9
  %270 = zext i16 %269 to i32
  %271 = load i16, ptr %10, align 2, !tbaa !9
  %272 = zext i16 %271 to i32
  %273 = icmp slt i32 %270, %272
  br i1 %273, label %275, label %274

274:                                              ; preds = %268
  store i32 8, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #3
  br label %385

275:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #3
  store i16 0, ptr %23, align 2, !tbaa !9
  br label %276

276:                                              ; preds = %372, %275
  %277 = load i16, ptr %23, align 2, !tbaa !9
  %278 = zext i16 %277 to i32
  %279 = load i16, ptr %9, align 2, !tbaa !9
  %280 = zext i16 %279 to i32
  %281 = icmp slt i32 %278, %280
  br i1 %281, label %283, label %282

282:                                              ; preds = %276
  store i32 11, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #3
  br label %375

283:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %284 = load ptr, ptr %13, align 8, !tbaa !5
  %285 = getelementptr inbounds i8, ptr %284, i64 3
  %286 = load i8, ptr %285, align 1, !tbaa !18
  %287 = zext i8 %286 to i32
  %288 = sitofp i32 %287 to float
  %289 = fdiv float %288, 2.550000e+02
  store float %289, ptr %24, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %290 = load ptr, ptr %14, align 8, !tbaa !5
  %291 = getelementptr inbounds i8, ptr %290, i64 3
  %292 = load i8, ptr %291, align 1, !tbaa !18
  %293 = zext i8 %292 to i32
  %294 = sitofp i32 %293 to float
  %295 = fdiv float %294, 2.550000e+02
  store float %295, ptr %25, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %296 = load float, ptr %25, align 4, !tbaa !19
  %297 = load float, ptr %24, align 4, !tbaa !19
  %298 = fsub float 1.000000e+00, %297
  %299 = fmul float %296, %298
  store float %299, ptr %26, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  %300 = load float, ptr %24, align 4, !tbaa !19
  %301 = load float, ptr %26, align 4, !tbaa !19
  %302 = fadd float %300, %301
  store float %302, ptr %27, align 4, !tbaa !19
  %303 = load float, ptr %24, align 4, !tbaa !19
  %304 = load ptr, ptr %13, align 8, !tbaa !5
  %305 = getelementptr inbounds i8, ptr %304, i64 0
  %306 = load i8, ptr %305, align 1, !tbaa !18
  %307 = zext i8 %306 to i32
  %308 = sitofp i32 %307 to float
  %309 = load float, ptr %26, align 4, !tbaa !19
  %310 = load ptr, ptr %14, align 8, !tbaa !5
  %311 = getelementptr inbounds i8, ptr %310, i64 0
  %312 = load i8, ptr %311, align 1, !tbaa !18
  %313 = zext i8 %312 to i32
  %314 = sitofp i32 %313 to float
  %315 = fmul float %309, %314
  %316 = call float @llvm.fmuladd.f32(float %303, float %308, float %315)
  %317 = load float, ptr %27, align 4, !tbaa !19
  %318 = fdiv float %316, %317
  %319 = fadd float %318, 5.000000e-01
  %320 = fptoui float %319 to i8
  %321 = load ptr, ptr %14, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i64 0
  store i8 %320, ptr %322, align 1, !tbaa !18
  %323 = load float, ptr %24, align 4, !tbaa !19
  %324 = load ptr, ptr %13, align 8, !tbaa !5
  %325 = getelementptr inbounds i8, ptr %324, i64 1
  %326 = load i8, ptr %325, align 1, !tbaa !18
  %327 = zext i8 %326 to i32
  %328 = sitofp i32 %327 to float
  %329 = load float, ptr %26, align 4, !tbaa !19
  %330 = load ptr, ptr %14, align 8, !tbaa !5
  %331 = getelementptr inbounds i8, ptr %330, i64 1
  %332 = load i8, ptr %331, align 1, !tbaa !18
  %333 = zext i8 %332 to i32
  %334 = sitofp i32 %333 to float
  %335 = fmul float %329, %334
  %336 = call float @llvm.fmuladd.f32(float %323, float %328, float %335)
  %337 = load float, ptr %27, align 4, !tbaa !19
  %338 = fdiv float %336, %337
  %339 = fadd float %338, 5.000000e-01
  %340 = fptoui float %339 to i8
  %341 = load ptr, ptr %14, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %341, i64 1
  store i8 %340, ptr %342, align 1, !tbaa !18
  %343 = load float, ptr %24, align 4, !tbaa !19
  %344 = load ptr, ptr %13, align 8, !tbaa !5
  %345 = getelementptr inbounds i8, ptr %344, i64 2
  %346 = load i8, ptr %345, align 1, !tbaa !18
  %347 = zext i8 %346 to i32
  %348 = sitofp i32 %347 to float
  %349 = load float, ptr %26, align 4, !tbaa !19
  %350 = load ptr, ptr %14, align 8, !tbaa !5
  %351 = getelementptr inbounds i8, ptr %350, i64 2
  %352 = load i8, ptr %351, align 1, !tbaa !18
  %353 = zext i8 %352 to i32
  %354 = sitofp i32 %353 to float
  %355 = fmul float %349, %354
  %356 = call float @llvm.fmuladd.f32(float %343, float %348, float %355)
  %357 = load float, ptr %27, align 4, !tbaa !19
  %358 = fdiv float %356, %357
  %359 = fadd float %358, 5.000000e-01
  %360 = fptoui float %359 to i8
  %361 = load ptr, ptr %14, align 8, !tbaa !5
  %362 = getelementptr inbounds i8, ptr %361, i64 2
  store i8 %360, ptr %362, align 1, !tbaa !18
  %363 = load float, ptr %27, align 4, !tbaa !19
  %364 = call float @llvm.fmuladd.f32(float %363, float 2.550000e+02, float 5.000000e-01)
  %365 = fptoui float %364 to i8
  %366 = load ptr, ptr %14, align 8, !tbaa !5
  %367 = getelementptr inbounds i8, ptr %366, i64 3
  store i8 %365, ptr %367, align 1, !tbaa !18
  %368 = load ptr, ptr %13, align 8, !tbaa !5
  %369 = getelementptr inbounds i8, ptr %368, i64 4
  store ptr %369, ptr %13, align 8, !tbaa !5
  %370 = load ptr, ptr %14, align 8, !tbaa !5
  %371 = getelementptr inbounds i8, ptr %370, i64 4
  store ptr %371, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  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 %372

372:                                              ; preds = %283
  %373 = load i16, ptr %23, align 2, !tbaa !9
  %374 = add i16 %373, 1
  store i16 %374, ptr %23, align 2, !tbaa !9
  br label %276, !llvm.loop !24

375:                                              ; preds = %282
  %376 = load i64, ptr %15, align 8, !tbaa !16
  %377 = load ptr, ptr %13, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i64 %376
  store ptr %378, ptr %13, align 8, !tbaa !5
  %379 = load i64, ptr %16, align 8, !tbaa !16
  %380 = load ptr, ptr %14, align 8, !tbaa !5
  %381 = getelementptr inbounds i8, ptr %380, i64 %379
  store ptr %381, ptr %14, align 8, !tbaa !5
  br label %382

382:                                              ; preds = %375
  %383 = load i16, ptr %22, align 2, !tbaa !9
  %384 = add i16 %383, 1
  store i16 %384, ptr %22, align 2, !tbaa !9
  br label %268, !llvm.loop !25

385:                                              ; preds = %274
  br label %386

386:                                              ; preds = %385, %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #3
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #3 = { 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 = !{!"short", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTSN3rmg6BitmapE", !10, i64 0, !10, i64 2, !7, i64 4, !6, i64 8}
!13 = !{!12, !10, i64 2}
!14 = !{!12, !6, i64 8}
!15 = !{!12, !7, i64 4}
!16 = !{!17, !17, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}


; 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 speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #0

; Function Attrs: mustprogress nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @_ZN3rmg6Bitmap9pasteRGBAERKS0_ss(ptr nocapture noundef nonnull readonly align 8 dereferenceable(16) %0, ptr nocapture noundef nonnull readonly align 8 dereferenceable(16) %1, i16 noundef signext %2, i16 noundef signext %3) local_unnamed_addr #1 align 2 {
  %5 = load i16, ptr %1, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 2
  %7 = load i16, ptr %6, align 2, !tbaa !11
  %8 = sext i16 %2 to i32
  %9 = zext i16 %5 to i32
  %10 = add nsw i32 %9, %8
  %11 = load i16, ptr %0, align 8, !tbaa !5
  %12 = zext i16 %11 to i32
  %13 = icmp sgt i32 %10, %12
  %14 = sub i16 %11, %2
  %spec.select = select i1 %13, i16 %14, i16 %5
  %15 = sext i16 %3 to i32
  %16 = zext i16 %7 to i32
  %17 = add nsw i32 %16, %15
  %18 = getelementptr inbounds i8, ptr %0, i64 2
  %19 = load i16, ptr %18, align 2, !tbaa !11
  %20 = zext i16 %19 to i32
  %21 = icmp sgt i32 %17, %20
  %22 = sub i16 %19, %3
  %.094 = select i1 %21, i16 %22, i16 %7
  %23 = icmp slt i16 %2, 0
  %24 = sub i16 0, %2
  %25 = select i1 %23, i16 %24, i16 0
  %26 = icmp slt i16 %3, 0
  %27 = sub i16 0, %3
  %28 = select i1 %26, i16 %27, i16 0
  %29 = zext i16 %25 to i32
  %30 = sub i16 %spec.select, %25
  %31 = zext i16 %28 to i32
  %32 = sub i16 %.094, %28
  %33 = getelementptr inbounds i8, ptr %1, i64 8
  %34 = load ptr, ptr %33, align 8, !tbaa !12
  %35 = mul nuw nsw i32 %9, %31
  %36 = add nuw nsw i32 %35, %29
  %37 = getelementptr inbounds i8, ptr %1, i64 4
  %38 = load i8, ptr %37, align 4, !tbaa !13
  %39 = zext i8 %38 to i32
  %40 = mul nuw nsw i32 %36, %39
  %41 = zext nneg i32 %40 to i64
  %42 = getelementptr inbounds i8, ptr %34, i64 %41
  %43 = getelementptr inbounds i8, ptr %0, i64 8
  %44 = load ptr, ptr %43, align 8, !tbaa !12
  %45 = mul nsw i32 %12, %15
  %46 = add nsw i32 %45, %8
  %47 = getelementptr inbounds i8, ptr %0, i64 4
  %48 = load i8, ptr %47, align 4, !tbaa !13
  %49 = zext i8 %48 to i32
  %50 = mul nsw i32 %46, %49
  %51 = sext i32 %50 to i64
  %52 = getelementptr inbounds i8, ptr %44, i64 %51
  %53 = zext i16 %30 to i32
  %54 = sub nsw i32 %9, %53
  %55 = mul nsw i32 %54, %39
  %56 = sext i32 %55 to i64
  %57 = sub nsw i32 %12, %53
  %58 = mul nsw i32 %57, %49
  %59 = sext i32 %58 to i64
  %60 = icmp eq i8 %48, 3
  %.not127 = icmp eq i16 %.094, %28
  %.not128 = icmp eq i16 %spec.select, %25
  %or.cond145 = select i1 %.not127, i1 true, i1 %.not128
  br i1 %60, label %.preheader106, label %.preheader108

.preheader108:                                    ; preds = %4
  br i1 %or.cond145, label %.loopexit, label %.preheader107.us.preheader

.preheader107.us.preheader:                       ; preds = %.preheader108
  %umax = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax135 = tail call i16 @llvm.umax.i16(i16 %32, i16 1)
  %61 = add i16 %umax, -1
  %62 = zext i16 %61 to i64
  %63 = shl nuw nsw i64 %62, 2
  %64 = add nuw nsw i64 %63, 4
  %65 = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax151 = zext i16 %65 to i64
  %min.iters.check = icmp ult i16 %30, 4
  %n.vec = and i64 %umax151, 65532
  %66 = shl nuw nsw i64 %n.vec, 2
  %67 = shl nuw nsw i64 %n.vec, 2
  %ind.end154 = trunc nuw i64 %n.vec to i16
  %cmp.n = icmp eq i64 %n.vec, %umax151
  br label %.preheader107.us

.preheader107.us:                                 ; preds = %.preheader107.us.preheader, %._crit_edge.us
  %.2116.us = phi ptr [ %240, %._crit_edge.us ], [ %42, %.preheader107.us.preheader ]
  %.298115.us = phi ptr [ %241, %._crit_edge.us ], [ %52, %.preheader107.us.preheader ]
  %.0101114.us = phi i16 [ %242, %._crit_edge.us ], [ 0, %.preheader107.us.preheader ]
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader107.us
  %scevgep = getelementptr i8, ptr %.298115.us, i64 %64
  %scevgep150 = getelementptr i8, ptr %.2116.us, i64 %64
  %bound0 = icmp ult ptr %.298115.us, %scevgep150
  %bound1 = icmp ult ptr %.2116.us, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %ind.end = getelementptr i8, ptr %.2116.us, i64 %66
  %ind.end152 = getelementptr i8, ptr %.298115.us, i64 %67
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = shl i64 %index, 2
  %68 = or disjoint i64 %offset.idx, 4
  %69 = or disjoint i64 %offset.idx, 8
  %70 = or disjoint i64 %offset.idx, 12
  %next.gep = getelementptr i8, ptr %.2116.us, i64 %offset.idx
  %next.gep156 = getelementptr i8, ptr %.2116.us, i64 %68
  %next.gep157 = getelementptr i8, ptr %.2116.us, i64 %69
  %next.gep158 = getelementptr i8, ptr %.2116.us, i64 %70
  %offset.idx159 = shl i64 %index, 2
  %71 = or disjoint i64 %offset.idx159, 4
  %72 = or disjoint i64 %offset.idx159, 8
  %73 = or disjoint i64 %offset.idx159, 12
  %next.gep160 = getelementptr i8, ptr %.298115.us, i64 %offset.idx159
  %next.gep161 = getelementptr i8, ptr %.298115.us, i64 %71
  %next.gep162 = getelementptr i8, ptr %.298115.us, i64 %72
  %next.gep163 = getelementptr i8, ptr %.298115.us, i64 %73
  %74 = getelementptr inbounds i8, ptr %next.gep, i64 3
  %75 = getelementptr inbounds i8, ptr %next.gep156, i64 3
  %76 = getelementptr inbounds i8, ptr %next.gep157, i64 3
  %77 = getelementptr inbounds i8, ptr %next.gep158, i64 3
  %78 = load i8, ptr %74, align 1, !tbaa !14, !alias.scope !15
  %79 = load i8, ptr %75, align 1, !tbaa !14, !alias.scope !15
  %80 = load i8, ptr %76, align 1, !tbaa !14, !alias.scope !15
  %81 = load i8, ptr %77, align 1, !tbaa !14, !alias.scope !15
  %82 = insertelement <4 x i8> poison, i8 %78, i64 0
  %83 = insertelement <4 x i8> %82, i8 %79, i64 1
  %84 = insertelement <4 x i8> %83, i8 %80, i64 2
  %85 = insertelement <4 x i8> %84, i8 %81, i64 3
  %86 = uitofp <4 x i8> %85 to <4 x float>
  %87 = fdiv <4 x float> %86, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>
  %88 = getelementptr inbounds i8, ptr %next.gep160, i64 3
  %89 = getelementptr inbounds i8, ptr %next.gep161, i64 3
  %90 = getelementptr inbounds i8, ptr %next.gep162, i64 3
  %91 = getelementptr inbounds i8, ptr %next.gep163, i64 3
  %92 = load i8, ptr %88, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %93 = load i8, ptr %89, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %94 = load i8, ptr %90, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %95 = load i8, ptr %91, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %96 = insertelement <4 x i8> poison, i8 %92, i64 0
  %97 = insertelement <4 x i8> %96, i8 %93, i64 1
  %98 = insertelement <4 x i8> %97, i8 %94, i64 2
  %99 = insertelement <4 x i8> %98, i8 %95, i64 3
  %100 = uitofp <4 x i8> %99 to <4 x float>
  %101 = fdiv <4 x float> %100, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>
  %102 = fsub <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %87
  %103 = fmul <4 x float> %101, %102
  %104 = fadd <4 x float> %87, %103
  %105 = load i8, ptr %next.gep, align 1, !tbaa !14, !alias.scope !15
  %106 = load i8, ptr %next.gep156, align 1, !tbaa !14, !alias.scope !15
  %107 = load i8, ptr %next.gep157, align 1, !tbaa !14, !alias.scope !15
  %108 = load i8, ptr %next.gep158, align 1, !tbaa !14, !alias.scope !15
  %109 = insertelement <4 x i8> poison, i8 %105, i64 0
  %110 = insertelement <4 x i8> %109, i8 %106, i64 1
  %111 = insertelement <4 x i8> %110, i8 %107, i64 2
  %112 = insertelement <4 x i8> %111, i8 %108, i64 3
  %113 = uitofp <4 x i8> %112 to <4 x float>
  %114 = load i8, ptr %next.gep160, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %115 = load i8, ptr %next.gep161, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %116 = load i8, ptr %next.gep162, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %117 = load i8, ptr %next.gep163, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %118 = insertelement <4 x i8> poison, i8 %114, i64 0
  %119 = insertelement <4 x i8> %118, i8 %115, i64 1
  %120 = insertelement <4 x i8> %119, i8 %116, i64 2
  %121 = insertelement <4 x i8> %120, i8 %117, i64 3
  %122 = uitofp <4 x i8> %121 to <4 x float>
  %123 = fmul <4 x float> %103, %122
  %124 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %87, <4 x float> %113, <4 x float> %123)
  %125 = fdiv <4 x float> %124, %104
  %126 = fadd <4 x float> %125, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
  %127 = getelementptr inbounds i8, ptr %next.gep, i64 1
  %128 = getelementptr inbounds i8, ptr %next.gep156, i64 1
  %129 = getelementptr inbounds i8, ptr %next.gep157, i64 1
  %130 = getelementptr inbounds i8, ptr %next.gep158, i64 1
  %131 = load i8, ptr %127, align 1, !tbaa !14, !alias.scope !15
  %132 = load i8, ptr %128, align 1, !tbaa !14, !alias.scope !15
  %133 = load i8, ptr %129, align 1, !tbaa !14, !alias.scope !15
  %134 = load i8, ptr %130, align 1, !tbaa !14, !alias.scope !15
  %135 = insertelement <4 x i8> poison, i8 %131, i64 0
  %136 = insertelement <4 x i8> %135, i8 %132, i64 1
  %137 = insertelement <4 x i8> %136, i8 %133, i64 2
  %138 = insertelement <4 x i8> %137, i8 %134, i64 3
  %139 = uitofp <4 x i8> %138 to <4 x float>
  %140 = getelementptr inbounds i8, ptr %next.gep160, i64 1
  %141 = getelementptr inbounds i8, ptr %next.gep161, i64 1
  %142 = getelementptr inbounds i8, ptr %next.gep162, i64 1
  %143 = getelementptr inbounds i8, ptr %next.gep163, i64 1
  %144 = load i8, ptr %140, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %145 = load i8, ptr %141, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %146 = load i8, ptr %142, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %147 = load i8, ptr %143, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %148 = insertelement <4 x i8> poison, i8 %144, i64 0
  %149 = insertelement <4 x i8> %148, i8 %145, i64 1
  %150 = insertelement <4 x i8> %149, i8 %146, i64 2
  %151 = insertelement <4 x i8> %150, i8 %147, i64 3
  %152 = uitofp <4 x i8> %151 to <4 x float>
  %153 = fmul <4 x float> %103, %152
  %154 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %87, <4 x float> %139, <4 x float> %153)
  %155 = fdiv <4 x float> %154, %104
  %156 = fadd <4 x float> %155, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
  %157 = getelementptr inbounds i8, ptr %next.gep, i64 2
  %158 = getelementptr inbounds i8, ptr %next.gep156, i64 2
  %159 = getelementptr inbounds i8, ptr %next.gep157, i64 2
  %160 = getelementptr inbounds i8, ptr %next.gep158, i64 2
  %161 = load i8, ptr %157, align 1, !tbaa !14, !alias.scope !15
  %162 = load i8, ptr %158, align 1, !tbaa !14, !alias.scope !15
  %163 = load i8, ptr %159, align 1, !tbaa !14, !alias.scope !15
  %164 = load i8, ptr %160, align 1, !tbaa !14, !alias.scope !15
  %165 = insertelement <4 x i8> poison, i8 %161, i64 0
  %166 = insertelement <4 x i8> %165, i8 %162, i64 1
  %167 = insertelement <4 x i8> %166, i8 %163, i64 2
  %168 = insertelement <4 x i8> %167, i8 %164, i64 3
  %169 = uitofp <4 x i8> %168 to <4 x float>
  %170 = getelementptr inbounds i8, ptr %next.gep160, i64 2
  %171 = getelementptr inbounds i8, ptr %next.gep161, i64 2
  %172 = getelementptr inbounds i8, ptr %next.gep162, i64 2
  %173 = getelementptr inbounds i8, ptr %next.gep163, i64 2
  %174 = load i8, ptr %170, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %175 = load i8, ptr %171, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %176 = load i8, ptr %172, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %177 = load i8, ptr %173, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %178 = insertelement <4 x i8> poison, i8 %174, i64 0
  %179 = insertelement <4 x i8> %178, i8 %175, i64 1
  %180 = insertelement <4 x i8> %179, i8 %176, i64 2
  %181 = insertelement <4 x i8> %180, i8 %177, i64 3
  %182 = uitofp <4 x i8> %181 to <4 x float>
  %183 = fmul <4 x float> %103, %182
  %184 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %87, <4 x float> %169, <4 x float> %183)
  %185 = fdiv <4 x float> %184, %104
  %186 = fadd <4 x float> %185, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
  %187 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %104, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>)
  %188 = shufflevector <4 x float> %126, <4 x float> %156, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %189 = fptoui <8 x float> %188 to <8 x i8>
  %190 = shufflevector <4 x float> %186, <4 x float> %187, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %191 = fptoui <8 x float> %190 to <8 x i8>
  %interleaved.vec = shufflevector <8 x i8> %189, <8 x i8> %191, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>
  store <16 x i8> %interleaved.vec, ptr %next.gep160, align 1, !tbaa !14
  %index.next = add nuw i64 %index, 4
  %192 = icmp eq i64 %index.next, %n.vec
  br i1 %192, label %middle.block, label %vector.body, !llvm.loop !20

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

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.preheader107.us
  %.3112.us.ph = phi ptr [ %.2116.us, %vector.memcheck ], [ %.2116.us, %.preheader107.us ], [ %ind.end, %middle.block ]
  %.399111.us.ph = phi ptr [ %.298115.us, %vector.memcheck ], [ %.298115.us, %.preheader107.us ], [ %ind.end152, %middle.block ]
  %.0100110.us.ph = phi i16 [ 0, %vector.memcheck ], [ 0, %.preheader107.us ], [ %ind.end154, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.3112.us = phi ptr [ %237, %scalar.ph ], [ %.3112.us.ph, %scalar.ph.preheader ]
  %.399111.us = phi ptr [ %238, %scalar.ph ], [ %.399111.us.ph, %scalar.ph.preheader ]
  %.0100110.us = phi i16 [ %239, %scalar.ph ], [ %.0100110.us.ph, %scalar.ph.preheader ]
  %193 = getelementptr inbounds i8, ptr %.3112.us, i64 3
  %194 = load i8, ptr %193, align 1, !tbaa !14
  %195 = uitofp i8 %194 to float
  %196 = fdiv float %195, 2.550000e+02
  %197 = getelementptr inbounds i8, ptr %.399111.us, i64 3
  %198 = load i8, ptr %197, align 1, !tbaa !14
  %199 = uitofp i8 %198 to float
  %200 = fdiv float %199, 2.550000e+02
  %201 = fsub float 1.000000e+00, %196
  %202 = fmul float %200, %201
  %203 = fadd float %196, %202
  %204 = load i8, ptr %.3112.us, align 1, !tbaa !14
  %205 = uitofp i8 %204 to float
  %206 = load i8, ptr %.399111.us, align 1, !tbaa !14
  %207 = uitofp i8 %206 to float
  %208 = fmul float %202, %207
  %209 = tail call float @llvm.fmuladd.f32(float %196, float %205, float %208)
  %210 = fdiv float %209, %203
  %211 = fadd float %210, 5.000000e-01
  %212 = fptoui float %211 to i8
  store i8 %212, ptr %.399111.us, align 1, !tbaa !14
  %213 = getelementptr inbounds i8, ptr %.3112.us, i64 1
  %214 = load i8, ptr %213, align 1, !tbaa !14
  %215 = uitofp i8 %214 to float
  %216 = getelementptr inbounds i8, ptr %.399111.us, i64 1
  %217 = load i8, ptr %216, align 1, !tbaa !14
  %218 = uitofp i8 %217 to float
  %219 = fmul float %202, %218
  %220 = tail call float @llvm.fmuladd.f32(float %196, float %215, float %219)
  %221 = fdiv float %220, %203
  %222 = fadd float %221, 5.000000e-01
  %223 = fptoui float %222 to i8
  store i8 %223, ptr %216, align 1, !tbaa !14
  %224 = getelementptr inbounds i8, ptr %.3112.us, i64 2
  %225 = load i8, ptr %224, align 1, !tbaa !14
  %226 = uitofp i8 %225 to float
  %227 = getelementptr inbounds i8, ptr %.399111.us, i64 2
  %228 = load i8, ptr %227, align 1, !tbaa !14
  %229 = uitofp i8 %228 to float
  %230 = fmul float %202, %229
  %231 = tail call float @llvm.fmuladd.f32(float %196, float %226, float %230)
  %232 = fdiv float %231, %203
  %233 = fadd float %232, 5.000000e-01
  %234 = fptoui float %233 to i8
  store i8 %234, ptr %227, align 1, !tbaa !14
  %235 = tail call float @llvm.fmuladd.f32(float %203, float 2.550000e+02, float 5.000000e-01)
  %236 = fptoui float %235 to i8
  store i8 %236, ptr %197, align 1, !tbaa !14
  %237 = getelementptr inbounds i8, ptr %.3112.us, i64 4
  %238 = getelementptr inbounds i8, ptr %.399111.us, i64 4
  %239 = add nuw i16 %.0100110.us, 1
  %exitcond.not = icmp eq i16 %239, %umax
  br i1 %exitcond.not, label %._crit_edge.us, label %scalar.ph, !llvm.loop !24

._crit_edge.us:                                   ; preds = %scalar.ph, %middle.block
  %.lcssa149 = phi ptr [ %ind.end, %middle.block ], [ %237, %scalar.ph ]
  %.lcssa148 = phi ptr [ %ind.end152, %middle.block ], [ %238, %scalar.ph ]
  %240 = getelementptr inbounds i8, ptr %.lcssa149, i64 %56
  %241 = getelementptr inbounds i8, ptr %.lcssa148, i64 %59
  %242 = add nuw i16 %.0101114.us, 1
  %exitcond136.not = icmp eq i16 %242, %umax135
  br i1 %exitcond136.not, label %.loopexit, label %.preheader107.us, !llvm.loop !25

.preheader106:                                    ; preds = %4
  br i1 %or.cond145, label %.loopexit, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %.preheader106
  %umax137 = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax139 = tail call i16 @llvm.umax.i16(i16 %32, i16 1)
  %243 = add i16 %umax137, -1
  %244 = zext i16 %243 to i64
  %245 = mul nuw nsw i64 %244, 3
  %246 = add nuw nsw i64 %245, 3
  %247 = shl nuw nsw i64 %244, 2
  %248 = add nuw nsw i64 %247, 4
  %249 = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax170 = zext i16 %249 to i64
  %min.iters.check173 = icmp ult i16 %30, 8
  %n.vec176 = and i64 %umax170, 65528
  %250 = shl nuw nsw i64 %n.vec176, 2
  %251 = mul nuw nsw i64 %n.vec176, 3
  %ind.end181 = trunc nuw i64 %n.vec176 to i16
  %cmp.n200 = icmp eq i64 %n.vec176, %umax170
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us124
  %.095123.us = phi ptr [ %406, %._crit_edge.us124 ], [ %42, %.preheader.us.preheader ]
  %.096122.us = phi ptr [ %407, %._crit_edge.us124 ], [ %52, %.preheader.us.preheader ]
  %.0102121.us = phi i16 [ %408, %._crit_edge.us124 ], [ 0, %.preheader.us.preheader ]
  br i1 %min.iters.check173, label %scalar.ph172.preheader, label %vector.memcheck164

vector.memcheck164:                               ; preds = %.preheader.us
  %scevgep165 = getelementptr i8, ptr %.096122.us, i64 %246
  %scevgep166 = getelementptr i8, ptr %.095123.us, i64 %248
  %bound0167 = icmp ult ptr %.096122.us, %scevgep166
  %bound1168 = icmp ult ptr %.095123.us, %scevgep165
  %found.conflict169 = and i1 %bound0167, %bound1168
  br i1 %found.conflict169, label %scalar.ph172.preheader, label %vector.ph174

vector.ph174:                                     ; preds = %vector.memcheck164
  %ind.end177 = getelementptr i8, ptr %.095123.us, i64 %250
  %ind.end179 = getelementptr i8, ptr %.096122.us, i64 %251
  br label %vector.body183

vector.body183:                                   ; preds = %vector.body183, %vector.ph174
  %index184 = phi i64 [ 0, %vector.ph174 ], [ %index.next199, %vector.body183 ]
  %offset.idx185 = shl i64 %index184, 2
  %252 = or disjoint i64 %offset.idx185, 4
  %253 = or disjoint i64 %offset.idx185, 8
  %254 = or disjoint i64 %offset.idx185, 12
  %255 = or disjoint i64 %offset.idx185, 16
  %256 = or disjoint i64 %offset.idx185, 20
  %257 = or disjoint i64 %offset.idx185, 24
  %258 = or disjoint i64 %offset.idx185, 28
  %next.gep186 = getelementptr i8, ptr %.095123.us, i64 %offset.idx185
  %next.gep187 = getelementptr i8, ptr %.095123.us, i64 %252
  %next.gep188 = getelementptr i8, ptr %.095123.us, i64 %253
  %next.gep189 = getelementptr i8, ptr %.095123.us, i64 %254
  %next.gep190 = getelementptr i8, ptr %.095123.us, i64 %255
  %next.gep191 = getelementptr i8, ptr %.095123.us, i64 %256
  %next.gep192 = getelementptr i8, ptr %.095123.us, i64 %257
  %next.gep193 = getelementptr i8, ptr %.095123.us, i64 %258
  %offset.idx194 = mul i64 %index184, 3
  %next.gep195 = getelementptr i8, ptr %.096122.us, i64 %offset.idx194
  %259 = getelementptr inbounds i8, ptr %next.gep186, i64 3
  %260 = getelementptr inbounds i8, ptr %next.gep187, i64 3
  %261 = getelementptr inbounds i8, ptr %next.gep188, i64 3
  %262 = getelementptr inbounds i8, ptr %next.gep189, i64 3
  %263 = getelementptr inbounds i8, ptr %next.gep190, i64 3
  %264 = getelementptr inbounds i8, ptr %next.gep191, i64 3
  %265 = getelementptr inbounds i8, ptr %next.gep192, i64 3
  %266 = getelementptr inbounds i8, ptr %next.gep193, i64 3
  %267 = load i8, ptr %259, align 1, !tbaa !14, !alias.scope !26
  %268 = load i8, ptr %260, align 1, !tbaa !14, !alias.scope !26
  %269 = load i8, ptr %261, align 1, !tbaa !14, !alias.scope !26
  %270 = load i8, ptr %262, align 1, !tbaa !14, !alias.scope !26
  %271 = load i8, ptr %263, align 1, !tbaa !14, !alias.scope !26
  %272 = load i8, ptr %264, align 1, !tbaa !14, !alias.scope !26
  %273 = load i8, ptr %265, align 1, !tbaa !14, !alias.scope !26
  %274 = load i8, ptr %266, align 1, !tbaa !14, !alias.scope !26
  %275 = insertelement <8 x i8> poison, i8 %267, i64 0
  %276 = insertelement <8 x i8> %275, i8 %268, i64 1
  %277 = insertelement <8 x i8> %276, i8 %269, i64 2
  %278 = insertelement <8 x i8> %277, i8 %270, i64 3
  %279 = insertelement <8 x i8> %278, i8 %271, i64 4
  %280 = insertelement <8 x i8> %279, i8 %272, i64 5
  %281 = insertelement <8 x i8> %280, i8 %273, i64 6
  %282 = insertelement <8 x i8> %281, i8 %274, i64 7
  %283 = uitofp <8 x i8> %282 to <8 x float>
  %284 = fdiv <8 x float> %283, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>
  %285 = fsub <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %284
  %286 = load i8, ptr %next.gep186, align 1, !tbaa !14, !alias.scope !26
  %287 = load i8, ptr %next.gep187, align 1, !tbaa !14, !alias.scope !26
  %288 = load i8, ptr %next.gep188, align 1, !tbaa !14, !alias.scope !26
  %289 = load i8, ptr %next.gep189, align 1, !tbaa !14, !alias.scope !26
  %290 = load i8, ptr %next.gep190, align 1, !tbaa !14, !alias.scope !26
  %291 = load i8, ptr %next.gep191, align 1, !tbaa !14, !alias.scope !26
  %292 = load i8, ptr %next.gep192, align 1, !tbaa !14, !alias.scope !26
  %293 = load i8, ptr %next.gep193, align 1, !tbaa !14, !alias.scope !26
  %294 = insertelement <8 x i8> poison, i8 %286, i64 0
  %295 = insertelement <8 x i8> %294, i8 %287, i64 1
  %296 = insertelement <8 x i8> %295, i8 %288, i64 2
  %297 = insertelement <8 x i8> %296, i8 %289, i64 3
  %298 = insertelement <8 x i8> %297, i8 %290, i64 4
  %299 = insertelement <8 x i8> %298, i8 %291, i64 5
  %300 = insertelement <8 x i8> %299, i8 %292, i64 6
  %301 = insertelement <8 x i8> %300, i8 %293, i64 7
  %302 = uitofp <8 x i8> %301 to <8 x float>
  %wide.vec = load <24 x i8>, ptr %next.gep195, align 1, !tbaa !14
  %strided.vec = shufflevector <24 x i8> %wide.vec, <24 x i8> poison, <8 x i32> <i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21>
  %strided.vec196 = shufflevector <24 x i8> %wide.vec, <24 x i8> poison, <8 x i32> <i32 1, i32 4, i32 7, i32 10, i32 13, i32 16, i32 19, i32 22>
  %strided.vec197 = shufflevector <24 x i8> %wide.vec, <24 x i8> poison, <8 x i32> <i32 2, i32 5, i32 8, i32 11, i32 14, i32 17, i32 20, i32 23>
  %303 = uitofp <8 x i8> %strided.vec to <8 x float>
  %304 = fmul <8 x float> %285, %303
  %305 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %284, <8 x float> %302, <8 x float> %304)
  %306 = fadd <8 x float> %305, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
  %307 = getelementptr inbounds i8, ptr %next.gep186, i64 1
  %308 = getelementptr inbounds i8, ptr %next.gep187, i64 1
  %309 = getelementptr inbounds i8, ptr %next.gep188, i64 1
  %310 = getelementptr inbounds i8, ptr %next.gep189, i64 1
  %311 = getelementptr inbounds i8, ptr %next.gep190, i64 1
  %312 = getelementptr inbounds i8, ptr %next.gep191, i64 1
  %313 = getelementptr inbounds i8, ptr %next.gep192, i64 1
  %314 = getelementptr inbounds i8, ptr %next.gep193, i64 1
  %315 = load i8, ptr %307, align 1, !tbaa !14, !alias.scope !26
  %316 = load i8, ptr %308, align 1, !tbaa !14, !alias.scope !26
  %317 = load i8, ptr %309, align 1, !tbaa !14, !alias.scope !26
  %318 = load i8, ptr %310, align 1, !tbaa !14, !alias.scope !26
  %319 = load i8, ptr %311, align 1, !tbaa !14, !alias.scope !26
  %320 = load i8, ptr %312, align 1, !tbaa !14, !alias.scope !26
  %321 = load i8, ptr %313, align 1, !tbaa !14, !alias.scope !26
  %322 = load i8, ptr %314, align 1, !tbaa !14, !alias.scope !26
  %323 = insertelement <8 x i8> poison, i8 %315, i64 0
  %324 = insertelement <8 x i8> %323, i8 %316, i64 1
  %325 = insertelement <8 x i8> %324, i8 %317, i64 2
  %326 = insertelement <8 x i8> %325, i8 %318, i64 3
  %327 = insertelement <8 x i8> %326, i8 %319, i64 4
  %328 = insertelement <8 x i8> %327, i8 %320, i64 5
  %329 = insertelement <8 x i8> %328, i8 %321, i64 6
  %330 = insertelement <8 x i8> %329, i8 %322, i64 7
  %331 = uitofp <8 x i8> %330 to <8 x float>
  %332 = uitofp <8 x i8> %strided.vec196 to <8 x float>
  %333 = fmul <8 x float> %285, %332
  %334 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %284, <8 x float> %331, <8 x float> %333)
  %335 = fadd <8 x float> %334, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
  %336 = getelementptr inbounds i8, ptr %next.gep186, i64 2
  %337 = getelementptr inbounds i8, ptr %next.gep187, i64 2
  %338 = getelementptr inbounds i8, ptr %next.gep188, i64 2
  %339 = getelementptr inbounds i8, ptr %next.gep189, i64 2
  %340 = getelementptr inbounds i8, ptr %next.gep190, i64 2
  %341 = getelementptr inbounds i8, ptr %next.gep191, i64 2
  %342 = getelementptr inbounds i8, ptr %next.gep192, i64 2
  %343 = getelementptr inbounds i8, ptr %next.gep193, i64 2
  %344 = load i8, ptr %336, align 1, !tbaa !14, !alias.scope !26
  %345 = load i8, ptr %337, align 1, !tbaa !14, !alias.scope !26
  %346 = load i8, ptr %338, align 1, !tbaa !14, !alias.scope !26
  %347 = load i8, ptr %339, align 1, !tbaa !14, !alias.scope !26
  %348 = load i8, ptr %340, align 1, !tbaa !14, !alias.scope !26
  %349 = load i8, ptr %341, align 1, !tbaa !14, !alias.scope !26
  %350 = load i8, ptr %342, align 1, !tbaa !14, !alias.scope !26
  %351 = load i8, ptr %343, align 1, !tbaa !14, !alias.scope !26
  %352 = insertelement <8 x i8> poison, i8 %344, i64 0
  %353 = insertelement <8 x i8> %352, i8 %345, i64 1
  %354 = insertelement <8 x i8> %353, i8 %346, i64 2
  %355 = insertelement <8 x i8> %354, i8 %347, i64 3
  %356 = insertelement <8 x i8> %355, i8 %348, i64 4
  %357 = insertelement <8 x i8> %356, i8 %349, i64 5
  %358 = insertelement <8 x i8> %357, i8 %350, i64 6
  %359 = insertelement <8 x i8> %358, i8 %351, i64 7
  %360 = uitofp <8 x i8> %359 to <8 x float>
  %361 = uitofp <8 x i8> %strided.vec197 to <8 x float>
  %362 = fmul <8 x float> %285, %361
  %363 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %284, <8 x float> %360, <8 x float> %362)
  %364 = fadd <8 x float> %363, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
  %365 = fptoui <8 x float> %364 to <8 x i8>
  %366 = shufflevector <8 x float> %306, <8 x float> %335, <16 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>
  %367 = fptoui <16 x float> %366 to <16 x i8>
  %368 = shufflevector <8 x i8> %365, <8 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %interleaved.vec198 = shufflevector <16 x i8> %367, <16 x i8> %368, <24 x i32> <i32 0, i32 8, i32 16, i32 1, i32 9, i32 17, i32 2, i32 10, i32 18, i32 3, i32 11, i32 19, i32 4, i32 12, i32 20, i32 5, i32 13, i32 21, i32 6, i32 14, i32 22, i32 7, i32 15, i32 23>
  store <24 x i8> %interleaved.vec198, ptr %next.gep195, align 1, !tbaa !14
  %index.next199 = add nuw i64 %index184, 8
  %369 = icmp eq i64 %index.next199, %n.vec176
  br i1 %369, label %middle.block171, label %vector.body183, !llvm.loop !29

middle.block171:                                  ; preds = %vector.body183
  br i1 %cmp.n200, label %._crit_edge.us124, label %scalar.ph172.preheader

scalar.ph172.preheader:                           ; preds = %middle.block171, %vector.memcheck164, %.preheader.us
  %.1119.us.ph = phi ptr [ %.095123.us, %vector.memcheck164 ], [ %.095123.us, %.preheader.us ], [ %ind.end177, %middle.block171 ]
  %.197118.us.ph = phi ptr [ %.096122.us, %vector.memcheck164 ], [ %.096122.us, %.preheader.us ], [ %ind.end179, %middle.block171 ]
  %.0103117.us.ph = phi i16 [ 0, %vector.memcheck164 ], [ 0, %.preheader.us ], [ %ind.end181, %middle.block171 ]
  br label %scalar.ph172

scalar.ph172:                                     ; preds = %scalar.ph172.preheader, %scalar.ph172
  %.1119.us = phi ptr [ %403, %scalar.ph172 ], [ %.1119.us.ph, %scalar.ph172.preheader ]
  %.197118.us = phi ptr [ %404, %scalar.ph172 ], [ %.197118.us.ph, %scalar.ph172.preheader ]
  %.0103117.us = phi i16 [ %405, %scalar.ph172 ], [ %.0103117.us.ph, %scalar.ph172.preheader ]
  %370 = getelementptr inbounds i8, ptr %.1119.us, i64 3
  %371 = load i8, ptr %370, align 1, !tbaa !14
  %372 = uitofp i8 %371 to float
  %373 = fdiv float %372, 2.550000e+02
  %374 = fsub float 1.000000e+00, %373
  %375 = load i8, ptr %.1119.us, align 1, !tbaa !14
  %376 = uitofp i8 %375 to float
  %377 = load i8, ptr %.197118.us, align 1, !tbaa !14
  %378 = uitofp i8 %377 to float
  %379 = fmul float %374, %378
  %380 = tail call float @llvm.fmuladd.f32(float %373, float %376, float %379)
  %381 = fadd float %380, 5.000000e-01
  %382 = fptoui float %381 to i8
  store i8 %382, ptr %.197118.us, align 1, !tbaa !14
  %383 = getelementptr inbounds i8, ptr %.1119.us, i64 1
  %384 = load i8, ptr %383, align 1, !tbaa !14
  %385 = uitofp i8 %384 to float
  %386 = getelementptr inbounds i8, ptr %.197118.us, i64 1
  %387 = load i8, ptr %386, align 1, !tbaa !14
  %388 = uitofp i8 %387 to float
  %389 = fmul float %374, %388
  %390 = tail call float @llvm.fmuladd.f32(float %373, float %385, float %389)
  %391 = fadd float %390, 5.000000e-01
  %392 = fptoui float %391 to i8
  store i8 %392, ptr %386, align 1, !tbaa !14
  %393 = getelementptr inbounds i8, ptr %.1119.us, i64 2
  %394 = load i8, ptr %393, align 1, !tbaa !14
  %395 = uitofp i8 %394 to float
  %396 = getelementptr inbounds i8, ptr %.197118.us, i64 2
  %397 = load i8, ptr %396, align 1, !tbaa !14
  %398 = uitofp i8 %397 to float
  %399 = fmul float %374, %398
  %400 = tail call float @llvm.fmuladd.f32(float %373, float %395, float %399)
  %401 = fadd float %400, 5.000000e-01
  %402 = fptoui float %401 to i8
  store i8 %402, ptr %396, align 1, !tbaa !14
  %403 = getelementptr inbounds i8, ptr %.1119.us, i64 4
  %404 = getelementptr inbounds i8, ptr %.197118.us, i64 3
  %405 = add nuw i16 %.0103117.us, 1
  %exitcond138.not = icmp eq i16 %405, %umax137
  br i1 %exitcond138.not, label %._crit_edge.us124, label %scalar.ph172, !llvm.loop !30

._crit_edge.us124:                                ; preds = %scalar.ph172, %middle.block171
  %.lcssa147 = phi ptr [ %ind.end177, %middle.block171 ], [ %403, %scalar.ph172 ]
  %.lcssa = phi ptr [ %ind.end179, %middle.block171 ], [ %404, %scalar.ph172 ]
  %406 = getelementptr inbounds i8, ptr %.lcssa147, i64 %56
  %407 = getelementptr inbounds i8, ptr %.lcssa, i64 %59
  %408 = add nuw i16 %.0102121.us, 1
  %exitcond140.not = icmp eq i16 %408, %umax139
  br i1 %exitcond140.not, label %.loopexit, label %.preheader.us, !llvm.loop !31

.loopexit:                                        ; preds = %._crit_edge.us, %._crit_edge.us124, %.preheader108, %.preheader106
  ret void
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <8 x float> @llvm.fmuladd.v8f32(<8 x float>, <8 x float>, <8 x float>) #2

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

!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 0}
!6 = !{!"_ZTSN3rmg6BitmapE", !7, i64 0, !7, i64 2, !8, i64 4, !10, i64 8}
!7 = !{!"short", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 2}
!12 = !{!6, !10, i64 8}
!13 = !{!6, !8, i64 4}
!14 = !{!8, !8, i64 0}
!15 = !{!16}
!16 = distinct !{!16, !17}
!17 = distinct !{!17, !"LVerDomain"}
!18 = !{!19}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !21, !22, !23}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = distinct !{!24, !21, !22}
!25 = distinct !{!25, !21}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = distinct !{!29, !21, !22, !23}
!30 = distinct !{!30, !21, !22}
!31 = distinct !{!31, !21}


; 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,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass