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

; 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 uwtable
define dso_local void @_ZNK3rmg6Bitmap5toRGBEv(ptr dead_on_unwind noalias writable sret(%"class.rmg::Bitmap") align 8 %0, ptr noundef nonnull align 8 dereferenceable(16) %1) #2 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i1, align 1
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca float, align 4
  %12 = alloca i8, align 1
  %13 = alloca i64, align 8
  %14 = alloca float, align 4
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %15 = load ptr, ptr %4, align 8
  %16 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 2
  %17 = load i8, ptr %16, align 4, !tbaa !9
  %18 = zext i8 %17 to i32
  %19 = icmp eq i32 %18, 3
  br i1 %19, label %20, label %21

20:                                               ; preds = %2
  call void @_ZN3rmg6BitmapC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 8 dereferenceable(16) %15)
  br label %195

21:                                               ; preds = %2
  store i1 false, ptr %5, align 1
  %22 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 0
  %23 = load i16, ptr %22, align 8, !tbaa !12
  %24 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 1
  %25 = load i16, ptr %24, align 2, !tbaa !13
  call void @_ZN3rmg6BitmapC1Etth(ptr noundef nonnull align 8 dereferenceable(16) %0, i16 noundef zeroext %23, i16 noundef zeroext %25, i8 noundef zeroext 3)
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %26 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 3
  %27 = load ptr, ptr %26, align 8, !tbaa !14
  store ptr %27, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %28 = getelementptr inbounds %"class.rmg::Bitmap", ptr %0, i32 0, i32 3
  %29 = load ptr, ptr %28, align 8, !tbaa !14
  store ptr %29, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %30 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 0
  %31 = load i16, ptr %30, align 8, !tbaa !12
  %32 = zext i16 %31 to i32
  %33 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 1
  %34 = load i16, ptr %33, align 2, !tbaa !13
  %35 = zext i16 %34 to i32
  %36 = mul nsw i32 %32, %35
  %37 = sext i32 %36 to i64
  store i64 %37, ptr %8, align 8, !tbaa !15
  %38 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 2
  %39 = load i8, ptr %38, align 4, !tbaa !9
  %40 = zext i8 %39 to i32
  %41 = icmp eq i32 %40, 1
  br i1 %41, label %42, label %72

42:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  store i64 0, ptr %9, align 8, !tbaa !15
  br label %43

43:                                               ; preds = %68, %42
  %44 = load i64, ptr %9, align 8, !tbaa !15
  %45 = load i64, ptr %8, align 8, !tbaa !15
  %46 = icmp ult i64 %44, %45
  br i1 %46, label %48, label %47

47:                                               ; preds = %43
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  br label %71

48:                                               ; preds = %43
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %49, i64 0
  %51 = load i8, ptr %50, align 1, !tbaa !17
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %52, i64 0
  store i8 %51, ptr %53, align 1, !tbaa !17
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %54, i64 0
  %56 = load i8, ptr %55, align 1, !tbaa !17
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i64 1
  store i8 %56, ptr %58, align 1, !tbaa !17
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = getelementptr inbounds i8, ptr %59, i64 0
  %61 = load i8, ptr %60, align 1, !tbaa !17
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %62, i64 2
  store i8 %61, ptr %63, align 1, !tbaa !17
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %64, i64 1
  store ptr %65, ptr %6, align 8, !tbaa !5
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  %67 = getelementptr inbounds i8, ptr %66, i64 3
  store ptr %67, ptr %7, align 8, !tbaa !5
  br label %68

68:                                               ; preds = %48
  %69 = load i64, ptr %9, align 8, !tbaa !15
  %70 = add i64 %69, 1
  store i64 %70, ptr %9, align 8, !tbaa !15
  br label %43, !llvm.loop !18

71:                                               ; preds = %47
  br label %191

72:                                               ; preds = %21
  %73 = getelementptr inbounds %"class.rmg::Bitmap", ptr %15, i32 0, i32 2
  %74 = load i8, ptr %73, align 4, !tbaa !9
  %75 = zext i8 %74 to i32
  %76 = icmp eq i32 %75, 2
  br i1 %76, label %77, label %121

77:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  store i64 0, ptr %10, align 8, !tbaa !15
  br label %78

78:                                               ; preds = %117, %77
  %79 = load i64, ptr %10, align 8, !tbaa !15
  %80 = load i64, ptr %8, align 8, !tbaa !15
  %81 = icmp ult i64 %79, %80
  br i1 %81, label %83, label %82

82:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  br label %120

83:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %84, i64 1
  %86 = load i8, ptr %85, align 1, !tbaa !17
  %87 = zext i8 %86 to i32
  %88 = sitofp i32 %87 to float
  %89 = fdiv float %88, 2.550000e+02
  store float %89, ptr %11, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #3
  %90 = load float, ptr %11, align 4, !tbaa !20
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = getelementptr inbounds i8, ptr %91, i64 0
  %93 = load i8, ptr %92, align 1, !tbaa !17
  %94 = zext i8 %93 to i32
  %95 = sitofp i32 %94 to float
  %96 = call float @llvm.fmuladd.f32(float %90, float %95, float 2.555000e+02)
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %97, i64 1
  %99 = load i8, ptr %98, align 1, !tbaa !17
  %100 = zext i8 %99 to i32
  %101 = sitofp i32 %100 to float
  %102 = fsub float %96, %101
  %103 = fptoui float %102 to i8
  store i8 %103, ptr %12, align 1, !tbaa !17
  %104 = load i8, ptr %12, align 1, !tbaa !17
  %105 = load ptr, ptr %7, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %105, i64 0
  store i8 %104, ptr %106, align 1, !tbaa !17
  %107 = load i8, ptr %12, align 1, !tbaa !17
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %108, i64 1
  store i8 %107, ptr %109, align 1, !tbaa !17
  %110 = load i8, ptr %12, align 1, !tbaa !17
  %111 = load ptr, ptr %7, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i64 2
  store i8 %110, ptr %112, align 1, !tbaa !17
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = getelementptr inbounds i8, ptr %113, i64 2
  store ptr %114, ptr %6, align 8, !tbaa !5
  %115 = load ptr, ptr %7, align 8, !tbaa !5
  %116 = getelementptr inbounds i8, ptr %115, i64 3
  store ptr %116, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  br label %117

117:                                              ; preds = %83
  %118 = load i64, ptr %10, align 8, !tbaa !15
  %119 = add i64 %118, 1
  store i64 %119, ptr %10, align 8, !tbaa !15
  br label %78, !llvm.loop !22

120:                                              ; preds = %82
  br label %190

121:                                              ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  store i64 0, ptr %13, align 8, !tbaa !15
  br label %122

122:                                              ; preds = %186, %121
  %123 = load i64, ptr %13, align 8, !tbaa !15
  %124 = load i64, ptr %8, align 8, !tbaa !15
  %125 = icmp ult i64 %123, %124
  br i1 %125, label %127, label %126

126:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  br label %189

127:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  %128 = load ptr, ptr %6, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i64 3
  %130 = load i8, ptr %129, align 1, !tbaa !17
  %131 = zext i8 %130 to i32
  %132 = sitofp i32 %131 to float
  %133 = fdiv float %132, 2.550000e+02
  store float %133, ptr %14, align 4, !tbaa !20
  %134 = load float, ptr %14, align 4, !tbaa !20
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = getelementptr inbounds i8, ptr %135, i64 0
  %137 = load i8, ptr %136, align 1, !tbaa !17
  %138 = zext i8 %137 to i32
  %139 = sitofp i32 %138 to float
  %140 = call float @llvm.fmuladd.f32(float %134, float %139, float 2.555000e+02)
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %141, i64 3
  %143 = load i8, ptr %142, align 1, !tbaa !17
  %144 = zext i8 %143 to i32
  %145 = sitofp i32 %144 to float
  %146 = fsub float %140, %145
  %147 = fptoui float %146 to i8
  %148 = load ptr, ptr %7, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 0
  store i8 %147, ptr %149, align 1, !tbaa !17
  %150 = load float, ptr %14, align 4, !tbaa !20
  %151 = load ptr, ptr %6, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i64 1
  %153 = load i8, ptr %152, align 1, !tbaa !17
  %154 = zext i8 %153 to i32
  %155 = sitofp i32 %154 to float
  %156 = call float @llvm.fmuladd.f32(float %150, float %155, float 2.555000e+02)
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = getelementptr inbounds i8, ptr %157, i64 3
  %159 = load i8, ptr %158, align 1, !tbaa !17
  %160 = zext i8 %159 to i32
  %161 = sitofp i32 %160 to float
  %162 = fsub float %156, %161
  %163 = fptoui float %162 to i8
  %164 = load ptr, ptr %7, align 8, !tbaa !5
  %165 = getelementptr inbounds i8, ptr %164, i64 1
  store i8 %163, ptr %165, align 1, !tbaa !17
  %166 = load float, ptr %14, align 4, !tbaa !20
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %167, i64 2
  %169 = load i8, ptr %168, align 1, !tbaa !17
  %170 = zext i8 %169 to i32
  %171 = sitofp i32 %170 to float
  %172 = call float @llvm.fmuladd.f32(float %166, float %171, float 2.555000e+02)
  %173 = load ptr, ptr %6, align 8, !tbaa !5
  %174 = getelementptr inbounds i8, ptr %173, i64 3
  %175 = load i8, ptr %174, align 1, !tbaa !17
  %176 = zext i8 %175 to i32
  %177 = sitofp i32 %176 to float
  %178 = fsub float %172, %177
  %179 = fptoui float %178 to i8
  %180 = load ptr, ptr %7, align 8, !tbaa !5
  %181 = getelementptr inbounds i8, ptr %180, i64 2
  store i8 %179, ptr %181, align 1, !tbaa !17
  %182 = load ptr, ptr %6, align 8, !tbaa !5
  %183 = getelementptr inbounds i8, ptr %182, i64 4
  store ptr %183, ptr %6, align 8, !tbaa !5
  %184 = load ptr, ptr %7, align 8, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %184, i64 3
  store ptr %185, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  br label %186

186:                                              ; preds = %127
  %187 = load i64, ptr %13, align 8, !tbaa !15
  %188 = add i64 %187, 1
  store i64 %188, ptr %13, align 8, !tbaa !15
  br label %122, !llvm.loop !23

189:                                              ; preds = %126
  br label %190

190:                                              ; preds = %189, %120
  br label %191

191:                                              ; preds = %190, %71
  store i1 true, ptr %5, align 1
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  %192 = load i1, ptr %5, align 1
  br i1 %192, label %194, label %193

193:                                              ; preds = %191
  call void @_ZN3rmg6BitmapD1Ev(ptr noundef nonnull align 8 dereferenceable(16) %0) #3
  br label %194

194:                                              ; preds = %193, %191
  br label %195

195:                                              ; preds = %194, %20
  ret void
}

declare void @_ZN3rmg6BitmapC1Etth(ptr, i16, i16, i8)

declare void @_ZN3rmg6BitmapD1Ev(ptr)

declare void @_ZN3rmg6BitmapC1ERKS0_(ptr, ptr)

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


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

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK3rmg6Bitmap5toRGBEv(ptr dead_on_unwind noalias writable sret(%"class.rmg::Bitmap") align 8 %0, ptr noundef nonnull align 8 dereferenceable(16) %1) local_unnamed_addr #1 align 2 {
  %3 = getelementptr inbounds i8, ptr %1, i64 4
  %4 = load i8, ptr %3, align 4, !tbaa !5
  %5 = icmp eq i8 %4, 3
  br i1 %5, label %6, label %7

6:                                                ; preds = %2
  tail call void @_ZN3rmg6BitmapC1ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 8 dereferenceable(16) %1)
  br label %.loopexit

7:                                                ; preds = %2
  %8 = load i16, ptr %1, align 8, !tbaa !11
  %9 = getelementptr inbounds i8, ptr %1, i64 2
  %10 = load i16, ptr %9, align 2, !tbaa !12
  tail call void @_ZN3rmg6BitmapC1Etth(ptr noundef nonnull align 8 dereferenceable(16) %0, i16 noundef zeroext %8, i16 noundef zeroext %10, i8 noundef zeroext 3)
  %11 = getelementptr inbounds i8, ptr %1, i64 8
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %0, i64 8
  %14 = load ptr, ptr %13, align 8, !tbaa !13
  %15 = load i16, ptr %1, align 8, !tbaa !11
  %16 = zext i16 %15 to i64
  %17 = load i16, ptr %9, align 2, !tbaa !12
  %18 = zext i16 %17 to i64
  %19 = mul nuw nsw i64 %18, %16
  %20 = load i8, ptr %3, align 4, !tbaa !5
  %.not68 = icmp eq i64 %19, 0
  switch i8 %20, label %.preheader [
    i8 1, label %.preheader52
    i8 2, label %.preheader54
  ]

.preheader54:                                     ; preds = %7
  br i1 %.not68, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader54
  %min.iters.check = icmp ult i64 %19, 8
  br i1 %min.iters.check, label %.lr.ph.preheader123, label %vector.memcheck

.lr.ph.preheader123:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph.preheader
  %.158.ph = phi ptr [ %12, %vector.memcheck ], [ %12, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.14757.ph = phi ptr [ %14, %vector.memcheck ], [ %14, %.lr.ph.preheader ], [ %ind.end78, %middle.block ]
  %.04956.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %.neg = or disjoint i64 %.04956.ph, 1
  %xtraiter = and i64 %19, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader123
  %21 = getelementptr inbounds i8, ptr %.158.ph, i64 1
  %22 = load i8, ptr %21, align 1, !tbaa !14
  %23 = uitofp i8 %22 to float
  %24 = fdiv float %23, 2.550000e+02
  %25 = load i8, ptr %.158.ph, align 1, !tbaa !14
  %26 = uitofp i8 %25 to float
  %27 = tail call float @llvm.fmuladd.f32(float %24, float %26, float 2.555000e+02)
  %28 = fsub float %27, %23
  %29 = fptoui float %28 to i8
  store i8 %29, ptr %.14757.ph, align 1, !tbaa !14
  %30 = getelementptr inbounds i8, ptr %.14757.ph, i64 1
  store i8 %29, ptr %30, align 1, !tbaa !14
  %31 = getelementptr inbounds i8, ptr %.14757.ph, i64 2
  store i8 %29, ptr %31, align 1, !tbaa !14
  %32 = getelementptr inbounds i8, ptr %.158.ph, i64 2
  %33 = getelementptr inbounds i8, ptr %.14757.ph, i64 3
  %34 = or disjoint i64 %.04956.ph, 1
  br label %.lr.ph.prol.loopexit

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader123
  %.158.unr = phi ptr [ %.158.ph, %.lr.ph.preheader123 ], [ %32, %.lr.ph.prol ]
  %.14757.unr = phi ptr [ %.14757.ph, %.lr.ph.preheader123 ], [ %33, %.lr.ph.prol ]
  %.04956.unr = phi i64 [ %.04956.ph, %.lr.ph.preheader123 ], [ %34, %.lr.ph.prol ]
  %35 = icmp eq i64 %19, %.neg
  br i1 %35, label %.loopexit, label %.lr.ph

vector.memcheck:                                  ; preds = %.lr.ph.preheader
  %36 = mul nuw nsw i64 %18, %16
  %37 = mul nuw nsw i64 %36, 3
  %scevgep = getelementptr i8, ptr %14, i64 %37
  %38 = shl nuw nsw i64 %36, 1
  %scevgep77 = getelementptr i8, ptr %12, i64 %38
  %bound0 = icmp ult ptr %14, %scevgep77
  %bound1 = icmp ult ptr %12, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph.preheader123, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %19, 4294967288
  %39 = shl nuw nsw i64 %n.vec, 1
  %ind.end = getelementptr i8, ptr %12, i64 %39
  %40 = mul nuw nsw i64 %n.vec, 3
  %ind.end78 = getelementptr i8, ptr %14, i64 %40
  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
  %41 = or disjoint i64 %offset.idx, 2
  %42 = or disjoint i64 %offset.idx, 4
  %43 = or disjoint i64 %offset.idx, 6
  %44 = or disjoint i64 %offset.idx, 8
  %45 = or disjoint i64 %offset.idx, 10
  %46 = or disjoint i64 %offset.idx, 12
  %47 = or disjoint i64 %offset.idx, 14
  %next.gep = getelementptr i8, ptr %12, i64 %offset.idx
  %next.gep81 = getelementptr i8, ptr %12, i64 %41
  %next.gep82 = getelementptr i8, ptr %12, i64 %42
  %next.gep83 = getelementptr i8, ptr %12, i64 %43
  %next.gep84 = getelementptr i8, ptr %12, i64 %44
  %next.gep85 = getelementptr i8, ptr %12, i64 %45
  %next.gep86 = getelementptr i8, ptr %12, i64 %46
  %next.gep87 = getelementptr i8, ptr %12, i64 %47
  %offset.idx88 = mul i64 %index, 3
  %next.gep89 = getelementptr i8, ptr %14, i64 %offset.idx88
  %48 = getelementptr inbounds i8, ptr %next.gep, i64 1
  %49 = getelementptr inbounds i8, ptr %next.gep81, i64 1
  %50 = getelementptr inbounds i8, ptr %next.gep82, i64 1
  %51 = getelementptr inbounds i8, ptr %next.gep83, i64 1
  %52 = getelementptr inbounds i8, ptr %next.gep84, i64 1
  %53 = getelementptr inbounds i8, ptr %next.gep85, i64 1
  %54 = getelementptr inbounds i8, ptr %next.gep86, i64 1
  %55 = getelementptr inbounds i8, ptr %next.gep87, i64 1
  %56 = load i8, ptr %48, align 1, !tbaa !14, !alias.scope !15
  %57 = load i8, ptr %49, align 1, !tbaa !14, !alias.scope !15
  %58 = load i8, ptr %50, align 1, !tbaa !14, !alias.scope !15
  %59 = load i8, ptr %51, align 1, !tbaa !14, !alias.scope !15
  %60 = load i8, ptr %52, align 1, !tbaa !14, !alias.scope !15
  %61 = load i8, ptr %53, align 1, !tbaa !14, !alias.scope !15
  %62 = load i8, ptr %54, align 1, !tbaa !14, !alias.scope !15
  %63 = load i8, ptr %55, align 1, !tbaa !14, !alias.scope !15
  %64 = insertelement <8 x i8> poison, i8 %56, i64 0
  %65 = insertelement <8 x i8> %64, i8 %57, i64 1
  %66 = insertelement <8 x i8> %65, i8 %58, i64 2
  %67 = insertelement <8 x i8> %66, i8 %59, i64 3
  %68 = insertelement <8 x i8> %67, i8 %60, i64 4
  %69 = insertelement <8 x i8> %68, i8 %61, i64 5
  %70 = insertelement <8 x i8> %69, i8 %62, i64 6
  %71 = insertelement <8 x i8> %70, i8 %63, i64 7
  %72 = uitofp <8 x i8> %71 to <8 x float>
  %73 = fdiv <8 x float> %72, <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>
  %74 = load i8, ptr %next.gep, align 1, !tbaa !14, !alias.scope !15
  %75 = load i8, ptr %next.gep81, align 1, !tbaa !14, !alias.scope !15
  %76 = load i8, ptr %next.gep82, align 1, !tbaa !14, !alias.scope !15
  %77 = load i8, ptr %next.gep83, align 1, !tbaa !14, !alias.scope !15
  %78 = load i8, ptr %next.gep84, align 1, !tbaa !14, !alias.scope !15
  %79 = load i8, ptr %next.gep85, align 1, !tbaa !14, !alias.scope !15
  %80 = load i8, ptr %next.gep86, align 1, !tbaa !14, !alias.scope !15
  %81 = load i8, ptr %next.gep87, align 1, !tbaa !14, !alias.scope !15
  %82 = insertelement <8 x i8> poison, i8 %74, i64 0
  %83 = insertelement <8 x i8> %82, i8 %75, i64 1
  %84 = insertelement <8 x i8> %83, i8 %76, i64 2
  %85 = insertelement <8 x i8> %84, i8 %77, i64 3
  %86 = insertelement <8 x i8> %85, i8 %78, i64 4
  %87 = insertelement <8 x i8> %86, i8 %79, i64 5
  %88 = insertelement <8 x i8> %87, i8 %80, i64 6
  %89 = insertelement <8 x i8> %88, i8 %81, i64 7
  %90 = uitofp <8 x i8> %89 to <8 x float>
  %91 = tail call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %73, <8 x float> %90, <8 x float> <float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02>)
  %92 = fsub <8 x float> %91, %72
  %93 = fptoui <8 x float> %92 to <8 x i8>
  %interleaved.vec = shufflevector <8 x i8> %93, <8 x i8> poison, <24 x i32> <i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 4, i32 4, i32 4, i32 5, i32 5, i32 5, i32 6, i32 6, i32 6, i32 7, i32 7, i32 7>
  store <24 x i8> %interleaved.vec, ptr %next.gep89, align 1, !tbaa !14
  %index.next = add nuw i64 %index, 8
  %94 = icmp eq i64 %index.next, %n.vec
  br i1 %94, label %middle.block, label %vector.body, !llvm.loop !18

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %19, %n.vec
  br i1 %cmp.n, label %.loopexit, label %.lr.ph.preheader123

.preheader52:                                     ; preds = %7
  br i1 %.not68, label %.loopexit, label %.lr.ph62.preheader

.lr.ph62.preheader:                               ; preds = %.preheader52
  %xtraiter125 = and i64 %19, 3
  %95 = icmp ult i64 %19, 4
  br i1 %95, label %.loopexit.loopexit122.unr-lcssa, label %.lr.ph62.preheader.new

.lr.ph62.preheader.new:                           ; preds = %.lr.ph62.preheader
  %unroll_iter = and i64 %19, 4294967292
  br label %.lr.ph62

.preheader:                                       ; preds = %7
  br i1 %.not68, label %.loopexit, label %.lr.ph66.preheader

.lr.ph66.preheader:                               ; preds = %.preheader
  %min.iters.check98 = icmp ult i64 %19, 5
  br i1 %min.iters.check98, label %.lr.ph66.preheader121, label %vector.memcheck90

.lr.ph66.preheader121:                            ; preds = %vector.body107, %vector.memcheck90, %.lr.ph66.preheader
  %.065.ph = phi i64 [ 0, %vector.memcheck90 ], [ 0, %.lr.ph66.preheader ], [ %n.vec101, %vector.body107 ]
  %.264.ph = phi ptr [ %12, %vector.memcheck90 ], [ %12, %.lr.ph66.preheader ], [ %ind.end103, %vector.body107 ]
  %.24863.ph = phi ptr [ %14, %vector.memcheck90 ], [ %14, %.lr.ph66.preheader ], [ %ind.end105, %vector.body107 ]
  br label %.lr.ph66

vector.memcheck90:                                ; preds = %.lr.ph66.preheader
  %96 = mul nuw nsw i64 %18, %16
  %97 = mul nuw nsw i64 %96, 3
  %scevgep91 = getelementptr i8, ptr %14, i64 %97
  %98 = shl nuw nsw i64 %96, 2
  %scevgep92 = getelementptr i8, ptr %12, i64 %98
  %bound093 = icmp ult ptr %14, %scevgep92
  %bound194 = icmp ult ptr %12, %scevgep91
  %found.conflict95 = and i1 %bound093, %bound194
  br i1 %found.conflict95, label %.lr.ph66.preheader121, label %vector.ph99

vector.ph99:                                      ; preds = %vector.memcheck90
  %n.mod.vf100 = and i64 %19, 3
  %99 = icmp eq i64 %n.mod.vf100, 0
  %100 = select i1 %99, i64 4, i64 %n.mod.vf100
  %n.vec101 = sub nsw i64 %19, %100
  %101 = shl nsw i64 %n.vec101, 2
  %ind.end103 = getelementptr i8, ptr %12, i64 %101
  %102 = mul nsw i64 %n.vec101, 3
  %ind.end105 = getelementptr i8, ptr %14, i64 %102
  %invariant.gep = getelementptr i8, ptr %12, i64 3
  %invariant.gep128 = getelementptr i8, ptr %12, i64 3
  %invariant.gep130 = getelementptr i8, ptr %12, i64 3
  br label %vector.body107

vector.body107:                                   ; preds = %vector.body107, %vector.ph99
  %index108 = phi i64 [ 0, %vector.ph99 ], [ %index.next120, %vector.body107 ]
  %offset.idx109 = shl i64 %index108, 2
  %103 = or disjoint i64 %offset.idx109, 4
  %104 = or disjoint i64 %offset.idx109, 8
  %105 = or disjoint i64 %offset.idx109, 12
  %next.gep110 = getelementptr i8, ptr %12, i64 %offset.idx109
  %offset.idx114 = mul i64 %index108, 3
  %next.gep115 = getelementptr i8, ptr %14, i64 %offset.idx114
  %106 = getelementptr inbounds i8, ptr %next.gep110, i64 3
  %gep = getelementptr i8, ptr %invariant.gep, i64 %103
  %gep129 = getelementptr i8, ptr %invariant.gep128, i64 %104
  %gep131 = getelementptr i8, ptr %invariant.gep130, i64 %105
  %107 = load i8, ptr %106, align 1, !tbaa !14, !alias.scope !22
  %108 = load i8, ptr %gep, align 1, !tbaa !14, !alias.scope !22
  %109 = load i8, ptr %gep129, align 1, !tbaa !14, !alias.scope !22
  %110 = load i8, ptr %gep131, align 1, !tbaa !14, !alias.scope !22
  %111 = insertelement <4 x i8> poison, i8 %107, i64 0
  %112 = insertelement <4 x i8> %111, i8 %108, i64 1
  %113 = insertelement <4 x i8> %112, i8 %109, i64 2
  %114 = insertelement <4 x i8> %113, i8 %110, i64 3
  %115 = uitofp <4 x i8> %114 to <4 x float>
  %116 = fdiv <4 x float> %115, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>
  %wide.vec = load <16 x i8>, ptr %next.gep110, align 1, !tbaa !14
  %strided.vec = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
  %strided.vec116 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
  %strided.vec117 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
  %strided.vec118 = shufflevector <16 x i8> %wide.vec, <16 x i8> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
  %117 = uitofp <4 x i8> %strided.vec to <4 x float>
  %118 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %116, <4 x float> %117, <4 x float> <float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02>)
  %119 = fsub <4 x float> %118, %115
  %120 = uitofp <4 x i8> %strided.vec116 to <4 x float>
  %121 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %116, <4 x float> %120, <4 x float> <float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02>)
  %122 = load <16 x i8>, ptr %next.gep110, align 1
  %123 = shufflevector <16 x i8> %122, <16 x i8> poison, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>
  %124 = load i8, ptr %gep, align 1, !tbaa !14, !alias.scope !22
  %125 = load i8, ptr %gep129, align 1, !tbaa !14, !alias.scope !22
  %126 = load i8, ptr %gep131, align 1, !tbaa !14, !alias.scope !22
  %127 = insertelement <4 x i8> %123, i8 %124, i64 1
  %128 = insertelement <4 x i8> %127, i8 %125, i64 2
  %129 = insertelement <4 x i8> %128, i8 %126, i64 3
  %130 = uitofp <4 x i8> %129 to <4 x float>
  %131 = fsub <4 x float> %121, %130
  %132 = uitofp <4 x i8> %strided.vec117 to <4 x float>
  %133 = tail call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %116, <4 x float> %132, <4 x float> <float 2.555000e+02, float 2.555000e+02, float 2.555000e+02, float 2.555000e+02>)
  %134 = uitofp <4 x i8> %strided.vec118 to <4 x float>
  %135 = fsub <4 x float> %133, %134
  %136 = fptoui <4 x float> %135 to <4 x i8>
  %137 = shufflevector <4 x float> %119, <4 x float> %131, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %138 = fptoui <8 x float> %137 to <8 x i8>
  %139 = shufflevector <4 x i8> %136, <4 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
  %interleaved.vec119 = shufflevector <8 x i8> %138, <8 x i8> %139, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>
  store <12 x i8> %interleaved.vec119, ptr %next.gep115, align 1, !tbaa !14
  %index.next120 = add nuw i64 %index108, 4
  %140 = icmp eq i64 %index.next120, %n.vec101
  br i1 %140, label %.lr.ph66.preheader121, label %vector.body107, !llvm.loop !25

.lr.ph62:                                         ; preds = %.lr.ph62, %.lr.ph62.preheader.new
  %.04561 = phi ptr [ %12, %.lr.ph62.preheader.new ], [ %163, %.lr.ph62 ]
  %.04660 = phi ptr [ %14, %.lr.ph62.preheader.new ], [ %164, %.lr.ph62 ]
  %niter = phi i64 [ 0, %.lr.ph62.preheader.new ], [ %niter.next.3, %.lr.ph62 ]
  %141 = load i8, ptr %.04561, align 1, !tbaa !14
  store i8 %141, ptr %.04660, align 1, !tbaa !14
  %142 = getelementptr inbounds i8, ptr %.04660, i64 1
  store i8 %141, ptr %142, align 1, !tbaa !14
  %143 = load i8, ptr %.04561, align 1, !tbaa !14
  %144 = getelementptr inbounds i8, ptr %.04660, i64 2
  store i8 %143, ptr %144, align 1, !tbaa !14
  %145 = getelementptr inbounds i8, ptr %.04561, i64 1
  %146 = getelementptr inbounds i8, ptr %.04660, i64 3
  %147 = load i8, ptr %145, align 1, !tbaa !14
  store i8 %147, ptr %146, align 1, !tbaa !14
  %148 = getelementptr inbounds i8, ptr %.04660, i64 4
  store i8 %147, ptr %148, align 1, !tbaa !14
  %149 = load i8, ptr %145, align 1, !tbaa !14
  %150 = getelementptr inbounds i8, ptr %.04660, i64 5
  store i8 %149, ptr %150, align 1, !tbaa !14
  %151 = getelementptr inbounds i8, ptr %.04561, i64 2
  %152 = getelementptr inbounds i8, ptr %.04660, i64 6
  %153 = load i8, ptr %151, align 1, !tbaa !14
  store i8 %153, ptr %152, align 1, !tbaa !14
  %154 = getelementptr inbounds i8, ptr %.04660, i64 7
  store i8 %153, ptr %154, align 1, !tbaa !14
  %155 = load i8, ptr %151, align 1, !tbaa !14
  %156 = getelementptr inbounds i8, ptr %.04660, i64 8
  store i8 %155, ptr %156, align 1, !tbaa !14
  %157 = getelementptr inbounds i8, ptr %.04561, i64 3
  %158 = getelementptr inbounds i8, ptr %.04660, i64 9
  %159 = load i8, ptr %157, align 1, !tbaa !14
  store i8 %159, ptr %158, align 1, !tbaa !14
  %160 = getelementptr inbounds i8, ptr %.04660, i64 10
  store i8 %159, ptr %160, align 1, !tbaa !14
  %161 = load i8, ptr %157, align 1, !tbaa !14
  %162 = getelementptr inbounds i8, ptr %.04660, i64 11
  store i8 %161, ptr %162, align 1, !tbaa !14
  %163 = getelementptr inbounds i8, ptr %.04561, i64 4
  %164 = getelementptr inbounds i8, ptr %.04660, i64 12
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.loopexit.loopexit122.unr-lcssa, label %.lr.ph62, !llvm.loop !26

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.158 = phi ptr [ %189, %.lr.ph ], [ %.158.unr, %.lr.ph.prol.loopexit ]
  %.14757 = phi ptr [ %190, %.lr.ph ], [ %.14757.unr, %.lr.ph.prol.loopexit ]
  %.04956 = phi i64 [ %191, %.lr.ph ], [ %.04956.unr, %.lr.ph.prol.loopexit ]
  %165 = getelementptr inbounds i8, ptr %.158, i64 1
  %166 = load i8, ptr %165, align 1, !tbaa !14
  %167 = uitofp i8 %166 to float
  %168 = fdiv float %167, 2.550000e+02
  %169 = load i8, ptr %.158, align 1, !tbaa !14
  %170 = uitofp i8 %169 to float
  %171 = tail call float @llvm.fmuladd.f32(float %168, float %170, float 2.555000e+02)
  %172 = fsub float %171, %167
  %173 = fptoui float %172 to i8
  store i8 %173, ptr %.14757, align 1, !tbaa !14
  %174 = getelementptr inbounds i8, ptr %.14757, i64 1
  store i8 %173, ptr %174, align 1, !tbaa !14
  %175 = getelementptr inbounds i8, ptr %.14757, i64 2
  store i8 %173, ptr %175, align 1, !tbaa !14
  %176 = getelementptr inbounds i8, ptr %.158, i64 2
  %177 = getelementptr inbounds i8, ptr %.14757, i64 3
  %178 = getelementptr inbounds i8, ptr %.158, i64 3
  %179 = load i8, ptr %178, align 1, !tbaa !14
  %180 = uitofp i8 %179 to float
  %181 = fdiv float %180, 2.550000e+02
  %182 = load i8, ptr %176, align 1, !tbaa !14
  %183 = uitofp i8 %182 to float
  %184 = tail call float @llvm.fmuladd.f32(float %181, float %183, float 2.555000e+02)
  %185 = fsub float %184, %180
  %186 = fptoui float %185 to i8
  store i8 %186, ptr %177, align 1, !tbaa !14
  %187 = getelementptr inbounds i8, ptr %.14757, i64 4
  store i8 %186, ptr %187, align 1, !tbaa !14
  %188 = getelementptr inbounds i8, ptr %.14757, i64 5
  store i8 %186, ptr %188, align 1, !tbaa !14
  %189 = getelementptr inbounds i8, ptr %.158, i64 4
  %190 = getelementptr inbounds i8, ptr %.14757, i64 6
  %191 = add nuw nsw i64 %.04956, 2
  %exitcond.not.1 = icmp eq i64 %191, %19
  br i1 %exitcond.not.1, label %.loopexit, label %.lr.ph, !llvm.loop !27

.lr.ph66:                                         ; preds = %.lr.ph66.preheader121, %.lr.ph66
  %.065 = phi i64 [ %221, %.lr.ph66 ], [ %.065.ph, %.lr.ph66.preheader121 ]
  %.264 = phi ptr [ %219, %.lr.ph66 ], [ %.264.ph, %.lr.ph66.preheader121 ]
  %.24863 = phi ptr [ %220, %.lr.ph66 ], [ %.24863.ph, %.lr.ph66.preheader121 ]
  %192 = getelementptr inbounds i8, ptr %.264, i64 3
  %193 = load i8, ptr %192, align 1, !tbaa !14
  %194 = uitofp i8 %193 to float
  %195 = fdiv float %194, 2.550000e+02
  %196 = load i8, ptr %.264, align 1, !tbaa !14
  %197 = uitofp i8 %196 to float
  %198 = tail call float @llvm.fmuladd.f32(float %195, float %197, float 2.555000e+02)
  %199 = fsub float %198, %194
  %200 = fptoui float %199 to i8
  store i8 %200, ptr %.24863, align 1, !tbaa !14
  %201 = getelementptr inbounds i8, ptr %.264, i64 1
  %202 = load i8, ptr %201, align 1, !tbaa !14
  %203 = uitofp i8 %202 to float
  %204 = tail call float @llvm.fmuladd.f32(float %195, float %203, float 2.555000e+02)
  %205 = load i8, ptr %192, align 1, !tbaa !14
  %206 = uitofp i8 %205 to float
  %207 = fsub float %204, %206
  %208 = fptoui float %207 to i8
  %209 = getelementptr inbounds i8, ptr %.24863, i64 1
  store i8 %208, ptr %209, align 1, !tbaa !14
  %210 = getelementptr inbounds i8, ptr %.264, i64 2
  %211 = load i8, ptr %210, align 1, !tbaa !14
  %212 = uitofp i8 %211 to float
  %213 = tail call float @llvm.fmuladd.f32(float %195, float %212, float 2.555000e+02)
  %214 = load i8, ptr %192, align 1, !tbaa !14
  %215 = uitofp i8 %214 to float
  %216 = fsub float %213, %215
  %217 = fptoui float %216 to i8
  %218 = getelementptr inbounds i8, ptr %.24863, i64 2
  store i8 %217, ptr %218, align 1, !tbaa !14
  %219 = getelementptr inbounds i8, ptr %.264, i64 4
  %220 = getelementptr inbounds i8, ptr %.24863, i64 3
  %221 = add nuw nsw i64 %.065, 1
  %exitcond72.not = icmp eq i64 %221, %19
  br i1 %exitcond72.not, label %.loopexit, label %.lr.ph66, !llvm.loop !28

.loopexit.loopexit122.unr-lcssa:                  ; preds = %.lr.ph62, %.lr.ph62.preheader
  %.04561.unr = phi ptr [ %12, %.lr.ph62.preheader ], [ %163, %.lr.ph62 ]
  %.04660.unr = phi ptr [ %14, %.lr.ph62.preheader ], [ %164, %.lr.ph62 ]
  %lcmp.mod126.not = icmp eq i64 %xtraiter125, 0
  br i1 %lcmp.mod126.not, label %.loopexit, label %.lr.ph62.epil

.lr.ph62.epil:                                    ; preds = %.loopexit.loopexit122.unr-lcssa, %.lr.ph62.epil
  %.04561.epil = phi ptr [ %226, %.lr.ph62.epil ], [ %.04561.unr, %.loopexit.loopexit122.unr-lcssa ]
  %.04660.epil = phi ptr [ %227, %.lr.ph62.epil ], [ %.04660.unr, %.loopexit.loopexit122.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph62.epil ], [ 0, %.loopexit.loopexit122.unr-lcssa ]
  %222 = load i8, ptr %.04561.epil, align 1, !tbaa !14
  store i8 %222, ptr %.04660.epil, align 1, !tbaa !14
  %223 = getelementptr inbounds i8, ptr %.04660.epil, i64 1
  store i8 %222, ptr %223, align 1, !tbaa !14
  %224 = load i8, ptr %.04561.epil, align 1, !tbaa !14
  %225 = getelementptr inbounds i8, ptr %.04660.epil, i64 2
  store i8 %224, ptr %225, align 1, !tbaa !14
  %226 = getelementptr inbounds i8, ptr %.04561.epil, i64 1
  %227 = getelementptr inbounds i8, ptr %.04660.epil, i64 3
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter125
  br i1 %epil.iter.cmp.not, label %.loopexit, label %.lr.ph62.epil, !llvm.loop !29

.loopexit:                                        ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %.loopexit.loopexit122.unr-lcssa, %.lr.ph62.epil, %.lr.ph66, %middle.block, %.preheader54, %.preheader52, %.preheader, %6
  ret void
}

declare void @_ZN3rmg6BitmapC1Etth(ptr, i16, i16, i8) local_unnamed_addr

declare void @_ZN3rmg6BitmapC1ERKS0_(ptr, ptr) local_unnamed_addr

; 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

; 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

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass