; LLVM IR from achilles288/robot-monitor-graphics :: src/base/bitmap.ll (ZN3rmg6Bitmap7pasteGAERKS0_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 @_ZN3rmg6Bitmap7pasteGAERKS0_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 i16, align 2
  %22 = alloca i16, align 2
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = 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
  %27 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #3
  %28 = load ptr, ptr %6, align 8, !tbaa !5
  %29 = getelementptr inbounds %"class.rmg::Bitmap", ptr %28, i32 0, i32 0
  %30 = load i16, ptr %29, align 8, !tbaa !11
  store i16 %30, ptr %9, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #3
  %31 = load ptr, ptr %6, align 8, !tbaa !5
  %32 = getelementptr inbounds %"class.rmg::Bitmap", ptr %31, i32 0, i32 1
  %33 = load i16, ptr %32, align 2, !tbaa !13
  store i16 %33, ptr %10, align 2, !tbaa !9
  %34 = load i16, ptr %7, align 2, !tbaa !9
  %35 = sext i16 %34 to i32
  %36 = load i16, ptr %9, align 2, !tbaa !9
  %37 = zext i16 %36 to i32
  %38 = add nsw i32 %35, %37
  %39 = getelementptr inbounds %"class.rmg::Bitmap", ptr %27, i32 0, i32 0
  %40 = load i16, ptr %39, align 8, !tbaa !11
  %41 = zext i16 %40 to i32
  %42 = icmp sgt i32 %38, %41
  br i1 %42, label %43, label %51

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

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

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

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

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

77:                                               ; preds = %69
  br label %78

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

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

88:                                               ; preds = %78
  br label %89

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

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

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

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

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

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

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

185:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %186 = load ptr, ptr %13, align 8, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %186, i64 1
  %188 = load i8, ptr %187, align 1, !tbaa !18
  %189 = zext i8 %188 to i32
  %190 = sitofp i32 %189 to float
  %191 = fdiv float %190, 2.550000e+02
  store float %191, ptr %20, align 4, !tbaa !19
  %192 = load float, ptr %20, align 4, !tbaa !19
  %193 = load ptr, ptr %13, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %193, i64 0
  %195 = load i8, ptr %194, align 1, !tbaa !18
  %196 = zext i8 %195 to i32
  %197 = sitofp i32 %196 to float
  %198 = load float, ptr %20, align 4, !tbaa !19
  %199 = fsub float 1.000000e+00, %198
  %200 = load ptr, ptr %14, align 8, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %200, i64 0
  %202 = load i8, ptr %201, align 1, !tbaa !18
  %203 = zext i8 %202 to i32
  %204 = sitofp i32 %203 to float
  %205 = fmul float %199, %204
  %206 = call float @llvm.fmuladd.f32(float %192, float %197, float %205)
  %207 = fadd float %206, 5.000000e-01
  %208 = fptoui float %207 to i8
  %209 = load ptr, ptr %14, align 8, !tbaa !5
  %210 = getelementptr inbounds i8, ptr %209, i64 0
  store i8 %208, ptr %210, align 1, !tbaa !18
  %211 = load ptr, ptr %13, align 8, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %211, i64 2
  store ptr %212, ptr %13, align 8, !tbaa !5
  %213 = load ptr, ptr %14, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %213, i64 1
  store ptr %214, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %215

215:                                              ; preds = %185
  %216 = load i16, ptr %19, align 2, !tbaa !9
  %217 = add i16 %216, 1
  store i16 %217, ptr %19, align 2, !tbaa !9
  br label %178, !llvm.loop !21

218:                                              ; preds = %184
  %219 = load i64, ptr %15, align 8, !tbaa !16
  %220 = load ptr, ptr %13, align 8, !tbaa !5
  %221 = getelementptr inbounds i8, ptr %220, i64 %219
  store ptr %221, ptr %13, align 8, !tbaa !5
  %222 = load i64, ptr %16, align 8, !tbaa !16
  %223 = load ptr, ptr %14, align 8, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %223, i64 %222
  store ptr %224, ptr %14, align 8, !tbaa !5
  br label %225

225:                                              ; preds = %218
  %226 = load i16, ptr %17, align 2, !tbaa !9
  %227 = add i16 %226, 1
  store i16 %227, ptr %17, align 2, !tbaa !9
  br label %170, !llvm.loop !23

228:                                              ; preds = %176
  br label %308

229:                                              ; preds = %89
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #3
  store i16 0, ptr %21, align 2, !tbaa !9
  br label %230

230:                                              ; preds = %304, %229
  %231 = load i16, ptr %21, align 2, !tbaa !9
  %232 = zext i16 %231 to i32
  %233 = load i16, ptr %10, align 2, !tbaa !9
  %234 = zext i16 %233 to i32
  %235 = icmp slt i32 %232, %234
  br i1 %235, label %237, label %236

236:                                              ; preds = %230
  store i32 8, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #3
  br label %307

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

238:                                              ; preds = %294, %237
  %239 = load i16, ptr %22, align 2, !tbaa !9
  %240 = zext i16 %239 to i32
  %241 = load i16, ptr %9, align 2, !tbaa !9
  %242 = zext i16 %241 to i32
  %243 = icmp slt i32 %240, %242
  br i1 %243, label %245, label %244

244:                                              ; preds = %238
  store i32 11, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #3
  br label %297

245:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %246 = load ptr, ptr %13, align 8, !tbaa !5
  %247 = getelementptr inbounds i8, ptr %246, i64 1
  %248 = load i8, ptr %247, align 1, !tbaa !18
  %249 = zext i8 %248 to i32
  %250 = sitofp i32 %249 to float
  %251 = fdiv float %250, 2.550000e+02
  store float %251, ptr %23, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %252 = load ptr, ptr %14, align 8, !tbaa !5
  %253 = getelementptr inbounds i8, ptr %252, i64 1
  %254 = load i8, ptr %253, align 1, !tbaa !18
  %255 = zext i8 %254 to i32
  %256 = sitofp i32 %255 to float
  %257 = fdiv float %256, 2.550000e+02
  store float %257, ptr %24, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %258 = load float, ptr %24, align 4, !tbaa !19
  %259 = load float, ptr %23, align 4, !tbaa !19
  %260 = fsub float 1.000000e+00, %259
  %261 = fmul float %258, %260
  store float %261, ptr %25, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %262 = load float, ptr %23, align 4, !tbaa !19
  %263 = load float, ptr %25, align 4, !tbaa !19
  %264 = fadd float %262, %263
  store float %264, ptr %26, align 4, !tbaa !19
  %265 = load float, ptr %23, align 4, !tbaa !19
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = getelementptr inbounds i8, ptr %266, i64 0
  %268 = load i8, ptr %267, align 1, !tbaa !18
  %269 = zext i8 %268 to i32
  %270 = sitofp i32 %269 to float
  %271 = load float, ptr %25, align 4, !tbaa !19
  %272 = load ptr, ptr %14, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %272, i64 0
  %274 = load i8, ptr %273, align 1, !tbaa !18
  %275 = zext i8 %274 to i32
  %276 = sitofp i32 %275 to float
  %277 = fmul float %271, %276
  %278 = call float @llvm.fmuladd.f32(float %265, float %270, float %277)
  %279 = load float, ptr %26, align 4, !tbaa !19
  %280 = fdiv float %278, %279
  %281 = fadd float %280, 5.000000e-01
  %282 = fptoui float %281 to i8
  %283 = load ptr, ptr %14, align 8, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %283, i64 0
  store i8 %282, ptr %284, align 1, !tbaa !18
  %285 = load float, ptr %26, align 4, !tbaa !19
  %286 = call float @llvm.fmuladd.f32(float %285, float 2.550000e+02, float 5.000000e-01)
  %287 = fptoui float %286 to i8
  %288 = load ptr, ptr %14, align 8, !tbaa !5
  %289 = getelementptr inbounds i8, ptr %288, i64 1
  store i8 %287, ptr %289, align 1, !tbaa !18
  %290 = load ptr, ptr %13, align 8, !tbaa !5
  %291 = getelementptr inbounds i8, ptr %290, i64 2
  store ptr %291, ptr %13, align 8, !tbaa !5
  %292 = load ptr, ptr %14, align 8, !tbaa !5
  %293 = getelementptr inbounds i8, ptr %292, i64 2
  store ptr %293, ptr %14, align 8, !tbaa !5
  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
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %294

294:                                              ; preds = %245
  %295 = load i16, ptr %22, align 2, !tbaa !9
  %296 = add i16 %295, 1
  store i16 %296, ptr %22, align 2, !tbaa !9
  br label %238, !llvm.loop !24

297:                                              ; preds = %244
  %298 = load i64, ptr %15, align 8, !tbaa !16
  %299 = load ptr, ptr %13, align 8, !tbaa !5
  %300 = getelementptr inbounds i8, ptr %299, i64 %298
  store ptr %300, ptr %13, align 8, !tbaa !5
  %301 = load i64, ptr %16, align 8, !tbaa !16
  %302 = load ptr, ptr %14, align 8, !tbaa !5
  %303 = getelementptr inbounds i8, ptr %302, i64 %301
  store ptr %303, ptr %14, align 8, !tbaa !5
  br label %304

304:                                              ; preds = %297
  %305 = load i16, ptr %21, align 2, !tbaa !9
  %306 = add i16 %305, 1
  store i16 %306, ptr %21, align 2, !tbaa !9
  br label %230, !llvm.loop !25

307:                                              ; preds = %236
  br label %308

308:                                              ; preds = %307, %228
  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 @_ZN3rmg6Bitmap7pasteGAERKS0_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
  %.071 = 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 %.071, %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, 1
  %.not104 = icmp eq i16 %.071, %28
  %.not105 = icmp eq i16 %spec.select, %25
  %or.cond122 = select i1 %.not104, i1 true, i1 %.not105
  br i1 %60, label %.preheader83, label %.preheader85

.preheader85:                                     ; preds = %4
  br i1 %or.cond122, label %.loopexit, label %.preheader84.us.preheader

.preheader84.us.preheader:                        ; preds = %.preheader85
  %umax = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax112 = 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, 1
  %64 = add nuw nsw i64 %63, 2
  %65 = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax128 = zext i16 %65 to i64
  %min.iters.check = icmp ult i16 %30, 4
  %n.vec = and i64 %umax128, 65532
  %66 = shl nuw nsw i64 %n.vec, 1
  %67 = shl nuw nsw i64 %n.vec, 1
  %ind.end131 = trunc nuw i64 %n.vec to i16
  %cmp.n = icmp eq i64 %n.vec, %umax128
  br label %.preheader84.us

.preheader84.us:                                  ; preds = %.preheader84.us.preheader, %._crit_edge.us
  %.293.us = phi ptr [ %155, %._crit_edge.us ], [ %42, %.preheader84.us.preheader ]
  %.27592.us = phi ptr [ %156, %._crit_edge.us ], [ %52, %.preheader84.us.preheader ]
  %.07891.us = phi i16 [ %157, %._crit_edge.us ], [ 0, %.preheader84.us.preheader ]
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader84.us
  %scevgep = getelementptr i8, ptr %.27592.us, i64 %64
  %scevgep127 = getelementptr i8, ptr %.293.us, i64 %64
  %bound0 = icmp ult ptr %.27592.us, %scevgep127
  %bound1 = icmp ult ptr %.293.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 %.293.us, i64 %66
  %ind.end129 = getelementptr i8, ptr %.27592.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, 1
  %68 = or disjoint i64 %offset.idx, 2
  %69 = or disjoint i64 %offset.idx, 4
  %70 = or disjoint i64 %offset.idx, 6
  %next.gep = getelementptr i8, ptr %.293.us, i64 %offset.idx
  %next.gep133 = getelementptr i8, ptr %.293.us, i64 %68
  %next.gep134 = getelementptr i8, ptr %.293.us, i64 %69
  %next.gep135 = getelementptr i8, ptr %.293.us, i64 %70
  %offset.idx136 = shl i64 %index, 1
  %71 = or disjoint i64 %offset.idx136, 2
  %72 = or disjoint i64 %offset.idx136, 4
  %73 = or disjoint i64 %offset.idx136, 6
  %next.gep137 = getelementptr i8, ptr %.27592.us, i64 %offset.idx136
  %next.gep138 = getelementptr i8, ptr %.27592.us, i64 %71
  %next.gep139 = getelementptr i8, ptr %.27592.us, i64 %72
  %next.gep140 = getelementptr i8, ptr %.27592.us, i64 %73
  %74 = getelementptr inbounds i8, ptr %next.gep, i64 1
  %75 = getelementptr inbounds i8, ptr %next.gep133, i64 1
  %76 = getelementptr inbounds i8, ptr %next.gep134, i64 1
  %77 = getelementptr inbounds i8, ptr %next.gep135, i64 1
  %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.gep137, i64 1
  %89 = getelementptr inbounds i8, ptr %next.gep138, i64 1
  %90 = getelementptr inbounds i8, ptr %next.gep139, i64 1
  %91 = getelementptr inbounds i8, ptr %next.gep140, i64 1
  %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.gep133, align 1, !tbaa !14, !alias.scope !15
  %107 = load i8, ptr %next.gep134, align 1, !tbaa !14, !alias.scope !15
  %108 = load i8, ptr %next.gep135, 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.gep137, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %115 = load i8, ptr %next.gep138, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %116 = load i8, ptr %next.gep139, align 1, !tbaa !14, !alias.scope !18, !noalias !15
  %117 = load i8, ptr %next.gep140, 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 = 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>)
  %128 = shufflevector <4 x float> %126, <4 x float> %127, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  %interleaved.vec = fptoui <8 x float> %128 to <8 x i8>
  store <8 x i8> %interleaved.vec, ptr %next.gep137, align 1, !tbaa !14
  %index.next = add nuw i64 %index, 4
  %129 = icmp eq i64 %index.next, %n.vec
  br i1 %129, 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, %.preheader84.us
  %.389.us.ph = phi ptr [ %.293.us, %vector.memcheck ], [ %.293.us, %.preheader84.us ], [ %ind.end, %middle.block ]
  %.37688.us.ph = phi ptr [ %.27592.us, %vector.memcheck ], [ %.27592.us, %.preheader84.us ], [ %ind.end129, %middle.block ]
  %.07787.us.ph = phi i16 [ 0, %vector.memcheck ], [ 0, %.preheader84.us ], [ %ind.end131, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.389.us = phi ptr [ %152, %scalar.ph ], [ %.389.us.ph, %scalar.ph.preheader ]
  %.37688.us = phi ptr [ %153, %scalar.ph ], [ %.37688.us.ph, %scalar.ph.preheader ]
  %.07787.us = phi i16 [ %154, %scalar.ph ], [ %.07787.us.ph, %scalar.ph.preheader ]
  %130 = getelementptr inbounds i8, ptr %.389.us, i64 1
  %131 = load i8, ptr %130, align 1, !tbaa !14
  %132 = uitofp i8 %131 to float
  %133 = fdiv float %132, 2.550000e+02
  %134 = getelementptr inbounds i8, ptr %.37688.us, i64 1
  %135 = load i8, ptr %134, align 1, !tbaa !14
  %136 = uitofp i8 %135 to float
  %137 = fdiv float %136, 2.550000e+02
  %138 = fsub float 1.000000e+00, %133
  %139 = fmul float %137, %138
  %140 = fadd float %133, %139
  %141 = load i8, ptr %.389.us, align 1, !tbaa !14
  %142 = uitofp i8 %141 to float
  %143 = load i8, ptr %.37688.us, align 1, !tbaa !14
  %144 = uitofp i8 %143 to float
  %145 = fmul float %139, %144
  %146 = tail call float @llvm.fmuladd.f32(float %133, float %142, float %145)
  %147 = fdiv float %146, %140
  %148 = fadd float %147, 5.000000e-01
  %149 = fptoui float %148 to i8
  store i8 %149, ptr %.37688.us, align 1, !tbaa !14
  %150 = tail call float @llvm.fmuladd.f32(float %140, float 2.550000e+02, float 5.000000e-01)
  %151 = fptoui float %150 to i8
  store i8 %151, ptr %134, align 1, !tbaa !14
  %152 = getelementptr inbounds i8, ptr %.389.us, i64 2
  %153 = getelementptr inbounds i8, ptr %.37688.us, i64 2
  %154 = add nuw i16 %.07787.us, 1
  %exitcond.not = icmp eq i16 %154, %umax
  br i1 %exitcond.not, label %._crit_edge.us, label %scalar.ph, !llvm.loop !24

._crit_edge.us:                                   ; preds = %scalar.ph, %middle.block
  %.lcssa126 = phi ptr [ %ind.end, %middle.block ], [ %152, %scalar.ph ]
  %.lcssa125 = phi ptr [ %ind.end129, %middle.block ], [ %153, %scalar.ph ]
  %155 = getelementptr inbounds i8, ptr %.lcssa126, i64 %56
  %156 = getelementptr inbounds i8, ptr %.lcssa125, i64 %59
  %157 = add nuw i16 %.07891.us, 1
  %exitcond113.not = icmp eq i16 %157, %umax112
  br i1 %exitcond113.not, label %.loopexit, label %.preheader84.us, !llvm.loop !25

.preheader83:                                     ; preds = %4
  br i1 %or.cond122, label %.loopexit, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %.preheader83
  %umax114 = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax116 = tail call i16 @llvm.umax.i16(i16 %32, i16 1)
  %158 = add i16 %umax114, -1
  %159 = zext i16 %158 to i64
  %160 = zext i16 %umax114 to i64
  %161 = shl nuw nsw i64 %159, 1
  %162 = add nuw nsw i64 %161, 2
  %163 = tail call i16 @llvm.umax.i16(i16 %30, i16 1)
  %umax147 = zext i16 %163 to i64
  %min.iters.check150 = icmp ult i16 %30, 16
  %n.vec153 = and i64 %umax147, 65520
  %164 = shl nuw nsw i64 %n.vec153, 1
  %ind.end158 = trunc nuw i64 %n.vec153 to i16
  %cmp.n181 = icmp eq i64 %n.vec153, %umax147
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us101
  %.072100.us = phi ptr [ %286, %._crit_edge.us101 ], [ %42, %.preheader.us.preheader ]
  %.07399.us = phi ptr [ %287, %._crit_edge.us101 ], [ %52, %.preheader.us.preheader ]
  %.07998.us = phi i16 [ %288, %._crit_edge.us101 ], [ 0, %.preheader.us.preheader ]
  br i1 %min.iters.check150, label %scalar.ph149.preheader, label %vector.memcheck141

vector.memcheck141:                               ; preds = %.preheader.us
  %scevgep142 = getelementptr i8, ptr %.07399.us, i64 %160
  %scevgep143 = getelementptr i8, ptr %.072100.us, i64 %162
  %bound0144 = icmp ult ptr %.07399.us, %scevgep143
  %bound1145 = icmp ult ptr %.072100.us, %scevgep142
  %found.conflict146 = and i1 %bound0144, %bound1145
  br i1 %found.conflict146, label %scalar.ph149.preheader, label %vector.ph151

vector.ph151:                                     ; preds = %vector.memcheck141
  %ind.end154 = getelementptr i8, ptr %.072100.us, i64 %164
  %ind.end156 = getelementptr i8, ptr %.07399.us, i64 %n.vec153
  br label %vector.body160

vector.body160:                                   ; preds = %vector.body160, %vector.ph151
  %index161 = phi i64 [ 0, %vector.ph151 ], [ %index.next180, %vector.body160 ]
  %offset.idx162 = shl i64 %index161, 1
  %165 = or disjoint i64 %offset.idx162, 2
  %166 = or disjoint i64 %offset.idx162, 4
  %167 = or disjoint i64 %offset.idx162, 6
  %168 = or disjoint i64 %offset.idx162, 8
  %169 = or disjoint i64 %offset.idx162, 10
  %170 = or disjoint i64 %offset.idx162, 12
  %171 = or disjoint i64 %offset.idx162, 14
  %172 = or disjoint i64 %offset.idx162, 16
  %173 = or disjoint i64 %offset.idx162, 18
  %174 = or disjoint i64 %offset.idx162, 20
  %175 = or disjoint i64 %offset.idx162, 22
  %176 = or disjoint i64 %offset.idx162, 24
  %177 = or disjoint i64 %offset.idx162, 26
  %178 = or disjoint i64 %offset.idx162, 28
  %179 = or disjoint i64 %offset.idx162, 30
  %next.gep163 = getelementptr i8, ptr %.072100.us, i64 %offset.idx162
  %next.gep164 = getelementptr i8, ptr %.072100.us, i64 %165
  %next.gep165 = getelementptr i8, ptr %.072100.us, i64 %166
  %next.gep166 = getelementptr i8, ptr %.072100.us, i64 %167
  %next.gep167 = getelementptr i8, ptr %.072100.us, i64 %168
  %next.gep168 = getelementptr i8, ptr %.072100.us, i64 %169
  %next.gep169 = getelementptr i8, ptr %.072100.us, i64 %170
  %next.gep170 = getelementptr i8, ptr %.072100.us, i64 %171
  %next.gep171 = getelementptr i8, ptr %.072100.us, i64 %172
  %next.gep172 = getelementptr i8, ptr %.072100.us, i64 %173
  %next.gep173 = getelementptr i8, ptr %.072100.us, i64 %174
  %next.gep174 = getelementptr i8, ptr %.072100.us, i64 %175
  %next.gep175 = getelementptr i8, ptr %.072100.us, i64 %176
  %next.gep176 = getelementptr i8, ptr %.072100.us, i64 %177
  %next.gep177 = getelementptr i8, ptr %.072100.us, i64 %178
  %next.gep178 = getelementptr i8, ptr %.072100.us, i64 %179
  %next.gep179 = getelementptr i8, ptr %.07399.us, i64 %index161
  %180 = getelementptr inbounds i8, ptr %next.gep163, i64 1
  %181 = getelementptr inbounds i8, ptr %next.gep164, i64 1
  %182 = getelementptr inbounds i8, ptr %next.gep165, i64 1
  %183 = getelementptr inbounds i8, ptr %next.gep166, i64 1
  %184 = getelementptr inbounds i8, ptr %next.gep167, i64 1
  %185 = getelementptr inbounds i8, ptr %next.gep168, i64 1
  %186 = getelementptr inbounds i8, ptr %next.gep169, i64 1
  %187 = getelementptr inbounds i8, ptr %next.gep170, i64 1
  %188 = getelementptr inbounds i8, ptr %next.gep171, i64 1
  %189 = getelementptr inbounds i8, ptr %next.gep172, i64 1
  %190 = getelementptr inbounds i8, ptr %next.gep173, i64 1
  %191 = getelementptr inbounds i8, ptr %next.gep174, i64 1
  %192 = getelementptr inbounds i8, ptr %next.gep175, i64 1
  %193 = getelementptr inbounds i8, ptr %next.gep176, i64 1
  %194 = getelementptr inbounds i8, ptr %next.gep177, i64 1
  %195 = getelementptr inbounds i8, ptr %next.gep178, i64 1
  %196 = load i8, ptr %180, align 1, !tbaa !14, !alias.scope !26
  %197 = load i8, ptr %181, align 1, !tbaa !14, !alias.scope !26
  %198 = load i8, ptr %182, align 1, !tbaa !14, !alias.scope !26
  %199 = load i8, ptr %183, align 1, !tbaa !14, !alias.scope !26
  %200 = load i8, ptr %184, align 1, !tbaa !14, !alias.scope !26
  %201 = load i8, ptr %185, align 1, !tbaa !14, !alias.scope !26
  %202 = load i8, ptr %186, align 1, !tbaa !14, !alias.scope !26
  %203 = load i8, ptr %187, align 1, !tbaa !14, !alias.scope !26
  %204 = load i8, ptr %188, align 1, !tbaa !14, !alias.scope !26
  %205 = load i8, ptr %189, align 1, !tbaa !14, !alias.scope !26
  %206 = load i8, ptr %190, align 1, !tbaa !14, !alias.scope !26
  %207 = load i8, ptr %191, align 1, !tbaa !14, !alias.scope !26
  %208 = load i8, ptr %192, align 1, !tbaa !14, !alias.scope !26
  %209 = load i8, ptr %193, align 1, !tbaa !14, !alias.scope !26
  %210 = load i8, ptr %194, align 1, !tbaa !14, !alias.scope !26
  %211 = load i8, ptr %195, align 1, !tbaa !14, !alias.scope !26
  %212 = insertelement <16 x i8> poison, i8 %196, i64 0
  %213 = insertelement <16 x i8> %212, i8 %197, i64 1
  %214 = insertelement <16 x i8> %213, i8 %198, i64 2
  %215 = insertelement <16 x i8> %214, i8 %199, i64 3
  %216 = insertelement <16 x i8> %215, i8 %200, i64 4
  %217 = insertelement <16 x i8> %216, i8 %201, i64 5
  %218 = insertelement <16 x i8> %217, i8 %202, i64 6
  %219 = insertelement <16 x i8> %218, i8 %203, i64 7
  %220 = insertelement <16 x i8> %219, i8 %204, i64 8
  %221 = insertelement <16 x i8> %220, i8 %205, i64 9
  %222 = insertelement <16 x i8> %221, i8 %206, i64 10
  %223 = insertelement <16 x i8> %222, i8 %207, i64 11
  %224 = insertelement <16 x i8> %223, i8 %208, i64 12
  %225 = insertelement <16 x i8> %224, i8 %209, i64 13
  %226 = insertelement <16 x i8> %225, i8 %210, i64 14
  %227 = insertelement <16 x i8> %226, i8 %211, i64 15
  %228 = uitofp <16 x i8> %227 to <16 x float>
  %229 = fdiv <16 x float> %228, <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, 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>
  %230 = load i8, ptr %next.gep163, align 1, !tbaa !14, !alias.scope !26
  %231 = load i8, ptr %next.gep164, align 1, !tbaa !14, !alias.scope !26
  %232 = load i8, ptr %next.gep165, align 1, !tbaa !14, !alias.scope !26
  %233 = load i8, ptr %next.gep166, align 1, !tbaa !14, !alias.scope !26
  %234 = load i8, ptr %next.gep167, align 1, !tbaa !14, !alias.scope !26
  %235 = load i8, ptr %next.gep168, align 1, !tbaa !14, !alias.scope !26
  %236 = load i8, ptr %next.gep169, align 1, !tbaa !14, !alias.scope !26
  %237 = load i8, ptr %next.gep170, align 1, !tbaa !14, !alias.scope !26
  %238 = load i8, ptr %next.gep171, align 1, !tbaa !14, !alias.scope !26
  %239 = load i8, ptr %next.gep172, align 1, !tbaa !14, !alias.scope !26
  %240 = load i8, ptr %next.gep173, align 1, !tbaa !14, !alias.scope !26
  %241 = load i8, ptr %next.gep174, align 1, !tbaa !14, !alias.scope !26
  %242 = load i8, ptr %next.gep175, align 1, !tbaa !14, !alias.scope !26
  %243 = load i8, ptr %next.gep176, align 1, !tbaa !14, !alias.scope !26
  %244 = load i8, ptr %next.gep177, align 1, !tbaa !14, !alias.scope !26
  %245 = load i8, ptr %next.gep178, align 1, !tbaa !14, !alias.scope !26
  %246 = insertelement <16 x i8> poison, i8 %230, i64 0
  %247 = insertelement <16 x i8> %246, i8 %231, i64 1
  %248 = insertelement <16 x i8> %247, i8 %232, i64 2
  %249 = insertelement <16 x i8> %248, i8 %233, i64 3
  %250 = insertelement <16 x i8> %249, i8 %234, i64 4
  %251 = insertelement <16 x i8> %250, i8 %235, i64 5
  %252 = insertelement <16 x i8> %251, i8 %236, i64 6
  %253 = insertelement <16 x i8> %252, i8 %237, i64 7
  %254 = insertelement <16 x i8> %253, i8 %238, i64 8
  %255 = insertelement <16 x i8> %254, i8 %239, i64 9
  %256 = insertelement <16 x i8> %255, i8 %240, i64 10
  %257 = insertelement <16 x i8> %256, i8 %241, i64 11
  %258 = insertelement <16 x i8> %257, i8 %242, i64 12
  %259 = insertelement <16 x i8> %258, i8 %243, i64 13
  %260 = insertelement <16 x i8> %259, i8 %244, i64 14
  %261 = insertelement <16 x i8> %260, i8 %245, i64 15
  %262 = uitofp <16 x i8> %261 to <16 x float>
  %263 = fsub <16 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, 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>, %229
  %wide.load = load <16 x i8>, ptr %next.gep179, align 1, !tbaa !14, !alias.scope !29, !noalias !26
  %264 = uitofp <16 x i8> %wide.load to <16 x float>
  %265 = fmul <16 x float> %263, %264
  %266 = tail call <16 x float> @llvm.fmuladd.v16f32(<16 x float> %229, <16 x float> %262, <16 x float> %265)
  %267 = fadd <16 x float> %266, <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, 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>
  %268 = fptoui <16 x float> %267 to <16 x i8>
  store <16 x i8> %268, ptr %next.gep179, align 1, !tbaa !14, !alias.scope !29, !noalias !26
  %index.next180 = add nuw i64 %index161, 16
  %269 = icmp eq i64 %index.next180, %n.vec153
  br i1 %269, label %middle.block148, label %vector.body160, !llvm.loop !31

middle.block148:                                  ; preds = %vector.body160
  br i1 %cmp.n181, label %._crit_edge.us101, label %scalar.ph149.preheader

scalar.ph149.preheader:                           ; preds = %middle.block148, %vector.memcheck141, %.preheader.us
  %.196.us.ph = phi ptr [ %.072100.us, %vector.memcheck141 ], [ %.072100.us, %.preheader.us ], [ %ind.end154, %middle.block148 ]
  %.17495.us.ph = phi ptr [ %.07399.us, %vector.memcheck141 ], [ %.07399.us, %.preheader.us ], [ %ind.end156, %middle.block148 ]
  %.08094.us.ph = phi i16 [ 0, %vector.memcheck141 ], [ 0, %.preheader.us ], [ %ind.end158, %middle.block148 ]
  br label %scalar.ph149

scalar.ph149:                                     ; preds = %scalar.ph149.preheader, %scalar.ph149
  %.196.us = phi ptr [ %283, %scalar.ph149 ], [ %.196.us.ph, %scalar.ph149.preheader ]
  %.17495.us = phi ptr [ %284, %scalar.ph149 ], [ %.17495.us.ph, %scalar.ph149.preheader ]
  %.08094.us = phi i16 [ %285, %scalar.ph149 ], [ %.08094.us.ph, %scalar.ph149.preheader ]
  %270 = getelementptr inbounds i8, ptr %.196.us, i64 1
  %271 = load i8, ptr %270, align 1, !tbaa !14
  %272 = uitofp i8 %271 to float
  %273 = fdiv float %272, 2.550000e+02
  %274 = load i8, ptr %.196.us, align 1, !tbaa !14
  %275 = uitofp i8 %274 to float
  %276 = fsub float 1.000000e+00, %273
  %277 = load i8, ptr %.17495.us, align 1, !tbaa !14
  %278 = uitofp i8 %277 to float
  %279 = fmul float %276, %278
  %280 = tail call float @llvm.fmuladd.f32(float %273, float %275, float %279)
  %281 = fadd float %280, 5.000000e-01
  %282 = fptoui float %281 to i8
  store i8 %282, ptr %.17495.us, align 1, !tbaa !14
  %283 = getelementptr inbounds i8, ptr %.196.us, i64 2
  %284 = getelementptr inbounds i8, ptr %.17495.us, i64 1
  %285 = add nuw i16 %.08094.us, 1
  %exitcond115.not = icmp eq i16 %285, %umax114
  br i1 %exitcond115.not, label %._crit_edge.us101, label %scalar.ph149, !llvm.loop !32

._crit_edge.us101:                                ; preds = %scalar.ph149, %middle.block148
  %.lcssa124 = phi ptr [ %ind.end154, %middle.block148 ], [ %283, %scalar.ph149 ]
  %.lcssa = phi ptr [ %ind.end156, %middle.block148 ], [ %284, %scalar.ph149 ]
  %286 = getelementptr inbounds i8, ptr %.lcssa124, i64 %56
  %287 = getelementptr inbounds i8, ptr %.lcssa, i64 %59
  %288 = add nuw i16 %.07998.us, 1
  %exitcond117.not = icmp eq i16 %288, %umax116
  br i1 %exitcond117.not, label %.loopexit, label %.preheader.us, !llvm.loop !33

.loopexit:                                        ; preds = %._crit_edge.us, %._crit_edge.us101, %.preheader85, %.preheader83
  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 <16 x float> @llvm.fmuladd.v16f32(<16 x float>, <16 x float>, <16 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 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !21, !22, !23}
!32 = distinct !{!32, !21, !22}
!33 = distinct !{!33, !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