; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal (PxeBcParseVendorOptions)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.PXEBC_VENDOR_OPTION = type { [8 x i32], %struct.EFI_IPv4_ADDRESS, i16, i16, i8, i8, i8, %struct.EFI_IPv4_ADDRESS, %struct.EFI_IPv4_ADDRESS, i16, i16, i16, i16, ptr, i8, ptr, i8, ptr, i8, ptr, i8 }
%struct.EFI_IPv4_ADDRESS = type { [4 x i8] }
%struct.EFI_DHCP4_PACKET_OPTION = type { i8, i8, [1 x i8] }

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

declare ptr @CopyMem(ptr noundef, ptr noundef, i64 noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local zeroext i8 @PxeBcParseVendorOptions(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #3
  %9 = load ptr, ptr %4, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %9, i32 0, i32 0
  %11 = getelementptr inbounds [8 x i32], ptr %10, i64 0, i64 0
  store ptr %11, ptr %5, align 8, !tbaa !5
  %12 = load ptr, ptr %3, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %12, i32 0, i32 1
  %14 = load i8, ptr %13, align 1, !tbaa !9
  store i8 %14, ptr %6, align 1, !tbaa !11
  %15 = load ptr, ptr %3, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %15, i32 0, i32 2
  %17 = getelementptr inbounds [1 x i8], ptr %16, i64 0, i64 0
  store ptr %17, ptr %7, align 8, !tbaa !5
  store i8 0, ptr %8, align 1, !tbaa !11
  br label %18

18:                                               ; preds = %208, %2
  %19 = load i8, ptr %8, align 1, !tbaa !11
  %20 = zext i8 %19 to i32
  %21 = load i8, ptr %6, align 1, !tbaa !11
  %22 = zext i8 %21 to i32
  %23 = icmp slt i32 %20, %22
  br i1 %23, label %24, label %30

24:                                               ; preds = %18
  %25 = load ptr, ptr %7, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %25, i32 0, i32 0
  %27 = load i8, ptr %26, align 1, !tbaa !12
  %28 = zext i8 %27 to i32
  %29 = icmp ne i32 %28, 255
  br label %30

30:                                               ; preds = %24, %18
  %31 = phi i1 [ false, %18 ], [ %29, %24 ]
  br i1 %31, label %32, label %216

32:                                               ; preds = %30
  %33 = load ptr, ptr %7, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %33, i32 0, i32 0
  %35 = load i8, ptr %34, align 1, !tbaa !12
  %36 = zext i8 %35 to i32
  switch i32 %36, label %165 [
    i32 1, label %37
    i32 2, label %44
    i32 3, label %51
    i32 4, label %58
    i32 5, label %65
    i32 6, label %72
    i32 7, label %79
    i32 8, label %86
    i32 9, label %97
    i32 10, label %108
    i32 11, label %119
    i32 12, label %140
    i32 71, label %151
  ]

37:                                               ; preds = %32
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %38, i32 0, i32 1
  %40 = load ptr, ptr %7, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %40, i32 0, i32 2
  %42 = getelementptr inbounds [1 x i8], ptr %41, i64 0, i64 0
  %43 = call ptr @CopyMem(ptr noundef %39, ptr noundef %42, i64 noundef 4)
  br label %165

44:                                               ; preds = %32
  %45 = load ptr, ptr %4, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %45, i32 0, i32 2
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %47, i32 0, i32 2
  %49 = getelementptr inbounds [1 x i8], ptr %48, i64 0, i64 0
  %50 = call ptr @CopyMem(ptr noundef %46, ptr noundef %49, i64 noundef 2)
  br label %165

51:                                               ; preds = %32
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %52, i32 0, i32 3
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %54, i32 0, i32 2
  %56 = getelementptr inbounds [1 x i8], ptr %55, i64 0, i64 0
  %57 = call ptr @CopyMem(ptr noundef %53, ptr noundef %56, i64 noundef 2)
  br label %165

58:                                               ; preds = %32
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %59, i32 0, i32 2
  %61 = getelementptr inbounds [1 x i8], ptr %60, i64 0, i64 0
  %62 = load i8, ptr %61, align 1, !tbaa !11
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %63, i32 0, i32 4
  store i8 %62, ptr %64, align 8, !tbaa !13
  br label %165

65:                                               ; preds = %32
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %66, i32 0, i32 2
  %68 = getelementptr inbounds [1 x i8], ptr %67, i64 0, i64 0
  %69 = load i8, ptr %68, align 1, !tbaa !11
  %70 = load ptr, ptr %4, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %70, i32 0, i32 5
  store i8 %69, ptr %71, align 1, !tbaa !17
  br label %165

72:                                               ; preds = %32
  %73 = load ptr, ptr %7, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %73, i32 0, i32 2
  %75 = getelementptr inbounds [1 x i8], ptr %74, i64 0, i64 0
  %76 = load i8, ptr %75, align 1, !tbaa !11
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %77, i32 0, i32 6
  store i8 %76, ptr %78, align 2, !tbaa !18
  br label %165

79:                                               ; preds = %32
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %80, i32 0, i32 7
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %82, i32 0, i32 2
  %84 = getelementptr inbounds [1 x i8], ptr %83, i64 0, i64 0
  %85 = call ptr @CopyMem(ptr noundef %81, ptr noundef %84, i64 noundef 4)
  br label %165

86:                                               ; preds = %32
  %87 = load ptr, ptr %7, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %87, i32 0, i32 1
  %89 = load i8, ptr %88, align 1, !tbaa !9
  %90 = load ptr, ptr %4, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %90, i32 0, i32 14
  store i8 %89, ptr %91, align 8, !tbaa !19
  %92 = load ptr, ptr %7, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %92, i32 0, i32 2
  %94 = getelementptr inbounds [1 x i8], ptr %93, i64 0, i64 0
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %95, i32 0, i32 13
  store ptr %94, ptr %96, align 8, !tbaa !20
  br label %165

97:                                               ; preds = %32
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %98, i32 0, i32 1
  %100 = load i8, ptr %99, align 1, !tbaa !9
  %101 = load ptr, ptr %4, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %101, i32 0, i32 16
  store i8 %100, ptr %102, align 8, !tbaa !21
  %103 = load ptr, ptr %7, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %103, i32 0, i32 2
  %105 = getelementptr inbounds [1 x i8], ptr %104, i64 0, i64 0
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %106, i32 0, i32 15
  store ptr %105, ptr %107, align 8, !tbaa !22
  br label %165

108:                                              ; preds = %32
  %109 = load ptr, ptr %7, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %109, i32 0, i32 1
  %111 = load i8, ptr %110, align 1, !tbaa !9
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %112, i32 0, i32 18
  store i8 %111, ptr %113, align 8, !tbaa !23
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %114, i32 0, i32 2
  %116 = getelementptr inbounds [1 x i8], ptr %115, i64 0, i64 0
  %117 = load ptr, ptr %4, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %117, i32 0, i32 17
  store ptr %116, ptr %118, align 8, !tbaa !24
  br label %165

119:                                              ; preds = %32
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %120, i32 0, i32 8
  %122 = load ptr, ptr %7, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %122, i32 0, i32 2
  %124 = getelementptr inbounds [1 x i8], ptr %123, i64 0, i64 0
  %125 = call ptr @CopyMem(ptr noundef %121, ptr noundef %124, i64 noundef 4)
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %126, i32 0, i32 9
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %128, i32 0, i32 2
  %130 = getelementptr inbounds [1 x i8], ptr %129, i64 0, i64 0
  %131 = getelementptr inbounds i8, ptr %130, i64 4
  %132 = call ptr @CopyMem(ptr noundef %127, ptr noundef %131, i64 noundef 2)
  %133 = load ptr, ptr %4, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %133, i32 0, i32 10
  %135 = load ptr, ptr %7, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %135, i32 0, i32 2
  %137 = getelementptr inbounds [1 x i8], ptr %136, i64 0, i64 0
  %138 = getelementptr inbounds i8, ptr %137, i64 6
  %139 = call ptr @CopyMem(ptr noundef %134, ptr noundef %138, i64 noundef 2)
  br label %165

140:                                              ; preds = %32
  %141 = load ptr, ptr %7, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %141, i32 0, i32 1
  %143 = load i8, ptr %142, align 1, !tbaa !9
  %144 = load ptr, ptr %4, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %144, i32 0, i32 20
  store i8 %143, ptr %145, align 8, !tbaa !25
  %146 = load ptr, ptr %7, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %146, i32 0, i32 2
  %148 = getelementptr inbounds [1 x i8], ptr %147, i64 0, i64 0
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %149, i32 0, i32 19
  store ptr %148, ptr %150, align 8, !tbaa !26
  br label %165

151:                                              ; preds = %32
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %152, i32 0, i32 11
  %154 = load ptr, ptr %7, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %154, i32 0, i32 2
  %156 = getelementptr inbounds [1 x i8], ptr %155, i64 0, i64 0
  %157 = call ptr @CopyMem(ptr noundef %153, ptr noundef %156, i64 noundef 2)
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.PXEBC_VENDOR_OPTION, ptr %158, i32 0, i32 12
  %160 = load ptr, ptr %7, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %160, i32 0, i32 2
  %162 = getelementptr inbounds [1 x i8], ptr %161, i64 0, i64 0
  %163 = getelementptr inbounds i8, ptr %162, i64 2
  %164 = call ptr @CopyMem(ptr noundef %159, ptr noundef %163, i64 noundef 2)
  br label %165

165:                                              ; preds = %151, %140, %119, %108, %97, %86, %79, %72, %65, %58, %51, %44, %37, %32
  %166 = load ptr, ptr %5, align 8, !tbaa !5
  %167 = load ptr, ptr %7, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %167, i32 0, i32 0
  %169 = load i8, ptr %168, align 1, !tbaa !12
  %170 = zext i8 %169 to i32
  %171 = sdiv i32 %170, 32
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds i32, ptr %166, i64 %172
  %174 = load i32, ptr %173, align 4, !tbaa !27
  %175 = load ptr, ptr %7, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %175, i32 0, i32 0
  %177 = load i8, ptr %176, align 1, !tbaa !12
  %178 = zext i8 %177 to i32
  %179 = srem i32 %178, 32
  %180 = shl i32 1, %179
  %181 = or i32 %174, %180
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %183, i32 0, i32 0
  %185 = load i8, ptr %184, align 1, !tbaa !12
  %186 = zext i8 %185 to i32
  %187 = sdiv i32 %186, 32
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %182, i64 %188
  store i32 %181, ptr %189, align 4, !tbaa !27
  %190 = load ptr, ptr %7, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %190, i32 0, i32 0
  %192 = load i8, ptr %191, align 1, !tbaa !12
  %193 = zext i8 %192 to i32
  %194 = icmp eq i32 %193, 0
  br i1 %194, label %195, label %198

195:                                              ; preds = %165
  %196 = load i8, ptr %8, align 1, !tbaa !11
  %197 = add i8 %196, 1
  store i8 %197, ptr %8, align 1, !tbaa !11
  br label %208

198:                                              ; preds = %165
  %199 = load i8, ptr %8, align 1, !tbaa !11
  %200 = zext i8 %199 to i32
  %201 = load ptr, ptr %7, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %201, i32 0, i32 1
  %203 = load i8, ptr %202, align 1, !tbaa !9
  %204 = zext i8 %203 to i32
  %205 = add nsw i32 %200, %204
  %206 = add nsw i32 %205, 2
  %207 = trunc i32 %206 to i8
  store i8 %207, ptr %8, align 1, !tbaa !11
  br label %208

208:                                              ; preds = %198, %195
  %209 = load ptr, ptr %3, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.EFI_DHCP4_PACKET_OPTION, ptr %209, i32 0, i32 2
  %211 = getelementptr inbounds [1 x i8], ptr %210, i64 0, i64 0
  %212 = load i8, ptr %8, align 1, !tbaa !11
  %213 = zext i8 %212 to i32
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds i8, ptr %211, i64 %214
  store ptr %215, ptr %7, align 8, !tbaa !5
  br label %18, !llvm.loop !29

216:                                              ; preds = %30
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  ret i8 1
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind 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/C++ TBAA"}
!9 = !{!10, !7, i64 1}
!10 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2}
!11 = !{!7, !7, i64 0}
!12 = !{!10, !7, i64 0}
!13 = !{!14, !7, i64 40}
!14 = !{!"", !7, i64 0, !15, i64 32, !16, i64 36, !16, i64 38, !7, i64 40, !7, i64 41, !7, i64 42, !15, i64 43, !15, i64 47, !16, i64 52, !16, i64 54, !16, i64 56, !16, i64 58, !6, i64 64, !7, i64 72, !6, i64 80, !7, i64 88, !6, i64 96, !7, i64 104, !6, i64 112, !7, i64 120}
!15 = !{!"", !7, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!14, !7, i64 41}
!18 = !{!14, !7, i64 42}
!19 = !{!14, !7, i64 72}
!20 = !{!14, !6, i64 64}
!21 = !{!14, !7, i64 88}
!22 = !{!14, !6, i64 80}
!23 = !{!14, !7, i64 104}
!24 = !{!14, !6, i64 96}
!25 = !{!14, !7, i64 120}
!26 = !{!14, !6, i64 112}
!27 = !{!28, !28, i64 0}
!28 = !{!"int", !7, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}


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

declare ptr @CopyMem(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local noundef zeroext i8 @PxeBcParseVendorOptions(ptr noundef %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = getelementptr inbounds i8, ptr %0, i64 1
  %4 = load i8, ptr %3, align 1, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 2
  %.not = icmp eq i8 %4, 0
  br i1 %.not, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %2
  %6 = getelementptr inbounds i8, ptr %1, i64 56
  %7 = getelementptr inbounds i8, ptr %1, i64 58
  %8 = getelementptr inbounds i8, ptr %1, i64 120
  %9 = getelementptr inbounds i8, ptr %1, i64 112
  %10 = getelementptr inbounds i8, ptr %1, i64 47
  %11 = getelementptr inbounds i8, ptr %1, i64 52
  %12 = getelementptr inbounds i8, ptr %1, i64 54
  %13 = getelementptr inbounds i8, ptr %1, i64 104
  %14 = getelementptr inbounds i8, ptr %1, i64 96
  %15 = getelementptr inbounds i8, ptr %1, i64 88
  %16 = getelementptr inbounds i8, ptr %1, i64 80
  %17 = getelementptr inbounds i8, ptr %1, i64 72
  %18 = getelementptr inbounds i8, ptr %1, i64 64
  %19 = getelementptr inbounds i8, ptr %1, i64 43
  %20 = getelementptr inbounds i8, ptr %1, i64 42
  %21 = getelementptr inbounds i8, ptr %1, i64 41
  %22 = getelementptr inbounds i8, ptr %1, i64 40
  %23 = getelementptr inbounds i8, ptr %1, i64 38
  %24 = getelementptr inbounds i8, ptr %1, i64 36
  %25 = getelementptr inbounds i8, ptr %1, i64 32
  br label %26

26:                                               ; preds = %.lr.ph, %95
  %.061 = phi i8 [ 0, %.lr.ph ], [ %.1, %95 ]
  %.05760 = phi ptr [ %5, %.lr.ph ], [ %97, %95 ]
  %27 = load i8, ptr %.05760, align 1, !tbaa !9
  switch i8 %27, label %77 [
    i8 -1, label %.critedge
    i8 1, label %28
    i8 2, label %31
    i8 3, label %34
    i8 4, label %37
    i8 5, label %40
    i8 6, label %43
    i8 7, label %46
    i8 8, label %49
    i8 9, label %53
    i8 10, label %57
    i8 11, label %61
    i8 12, label %68
    i8 71, label %72
  ]

28:                                               ; preds = %26
  %29 = getelementptr inbounds i8, ptr %.05760, i64 2
  %30 = tail call ptr @CopyMem(ptr noundef nonnull %25, ptr noundef nonnull %29, i64 noundef 4) #2
  br label %thread-pre-split

31:                                               ; preds = %26
  %32 = getelementptr inbounds i8, ptr %.05760, i64 2
  %33 = tail call ptr @CopyMem(ptr noundef nonnull %24, ptr noundef nonnull %32, i64 noundef 2) #2
  br label %thread-pre-split

34:                                               ; preds = %26
  %35 = getelementptr inbounds i8, ptr %.05760, i64 2
  %36 = tail call ptr @CopyMem(ptr noundef nonnull %23, ptr noundef nonnull %35, i64 noundef 2) #2
  br label %thread-pre-split

37:                                               ; preds = %26
  %38 = getelementptr inbounds i8, ptr %.05760, i64 2
  %39 = load i8, ptr %38, align 1, !tbaa !10
  store i8 %39, ptr %22, align 8, !tbaa !11
  br label %thread-pre-split

40:                                               ; preds = %26
  %41 = getelementptr inbounds i8, ptr %.05760, i64 2
  %42 = load i8, ptr %41, align 1, !tbaa !10
  store i8 %42, ptr %21, align 1, !tbaa !16
  br label %thread-pre-split

43:                                               ; preds = %26
  %44 = getelementptr inbounds i8, ptr %.05760, i64 2
  %45 = load i8, ptr %44, align 1, !tbaa !10
  store i8 %45, ptr %20, align 2, !tbaa !17
  br label %thread-pre-split

46:                                               ; preds = %26
  %47 = getelementptr inbounds i8, ptr %.05760, i64 2
  %48 = tail call ptr @CopyMem(ptr noundef nonnull %19, ptr noundef nonnull %47, i64 noundef 4) #2
  br label %thread-pre-split

49:                                               ; preds = %26
  %50 = getelementptr inbounds i8, ptr %.05760, i64 1
  %51 = load i8, ptr %50, align 1, !tbaa !5
  store i8 %51, ptr %17, align 8, !tbaa !18
  %52 = getelementptr inbounds i8, ptr %.05760, i64 2
  store ptr %52, ptr %18, align 8, !tbaa !19
  br label %thread-pre-split

53:                                               ; preds = %26
  %54 = getelementptr inbounds i8, ptr %.05760, i64 1
  %55 = load i8, ptr %54, align 1, !tbaa !5
  store i8 %55, ptr %15, align 8, !tbaa !20
  %56 = getelementptr inbounds i8, ptr %.05760, i64 2
  store ptr %56, ptr %16, align 8, !tbaa !21
  br label %thread-pre-split

57:                                               ; preds = %26
  %58 = getelementptr inbounds i8, ptr %.05760, i64 1
  %59 = load i8, ptr %58, align 1, !tbaa !5
  store i8 %59, ptr %13, align 8, !tbaa !22
  %60 = getelementptr inbounds i8, ptr %.05760, i64 2
  store ptr %60, ptr %14, align 8, !tbaa !23
  br label %thread-pre-split

61:                                               ; preds = %26
  %62 = getelementptr inbounds i8, ptr %.05760, i64 2
  %63 = tail call ptr @CopyMem(ptr noundef nonnull %10, ptr noundef nonnull %62, i64 noundef 4) #2
  %64 = getelementptr inbounds i8, ptr %.05760, i64 6
  %65 = tail call ptr @CopyMem(ptr noundef nonnull %11, ptr noundef nonnull %64, i64 noundef 2) #2
  %66 = getelementptr inbounds i8, ptr %.05760, i64 8
  %67 = tail call ptr @CopyMem(ptr noundef nonnull %12, ptr noundef nonnull %66, i64 noundef 2) #2
  br label %thread-pre-split

68:                                               ; preds = %26
  %69 = getelementptr inbounds i8, ptr %.05760, i64 1
  %70 = load i8, ptr %69, align 1, !tbaa !5
  store i8 %70, ptr %8, align 8, !tbaa !24
  %71 = getelementptr inbounds i8, ptr %.05760, i64 2
  store ptr %71, ptr %9, align 8, !tbaa !25
  br label %thread-pre-split

72:                                               ; preds = %26
  %73 = getelementptr inbounds i8, ptr %.05760, i64 2
  %74 = tail call ptr @CopyMem(ptr noundef nonnull %6, ptr noundef nonnull %73, i64 noundef 2) #2
  %75 = getelementptr inbounds i8, ptr %.05760, i64 4
  %76 = tail call ptr @CopyMem(ptr noundef nonnull %7, ptr noundef nonnull %75, i64 noundef 2) #2
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %28, %31, %34, %37, %40, %43, %46, %49, %53, %57, %61, %68, %72
  %.pr = load i8, ptr %.05760, align 1, !tbaa !9
  br label %77

77:                                               ; preds = %thread-pre-split, %26
  %78 = phi i8 [ %.pr, %thread-pre-split ], [ %27, %26 ]
  %79 = zext i8 %78 to i32
  %80 = lshr i32 %79, 5
  %81 = zext nneg i32 %80 to i64
  %82 = getelementptr inbounds i32, ptr %1, i64 %81
  %83 = load i32, ptr %82, align 4, !tbaa !26
  %84 = and i32 %79, 31
  %85 = shl nuw i32 1, %84
  %86 = or i32 %85, %83
  store i32 %86, ptr %82, align 4, !tbaa !26
  %87 = icmp eq i8 %78, 0
  br i1 %87, label %88, label %90

88:                                               ; preds = %77
  %89 = add nuw i8 %.061, 1
  br label %95

90:                                               ; preds = %77
  %91 = getelementptr inbounds i8, ptr %.05760, i64 1
  %92 = load i8, ptr %91, align 1, !tbaa !5
  %93 = add i8 %.061, 2
  %94 = add i8 %93, %92
  br label %95

95:                                               ; preds = %90, %88
  %.1 = phi i8 [ %89, %88 ], [ %94, %90 ]
  %96 = zext i8 %.1 to i64
  %97 = getelementptr inbounds i8, ptr %5, i64 %96
  %98 = icmp ult i8 %.1, %4
  br i1 %98, label %26, label %.critedge, !llvm.loop !28

.critedge:                                        ; preds = %95, %26, %2
  ret i8 1
}

attributes #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 #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

!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 1}
!6 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!6, !7, i64 0}
!10 = !{!7, !7, i64 0}
!11 = !{!12, !7, i64 40}
!12 = !{!"", !7, i64 0, !13, i64 32, !14, i64 36, !14, i64 38, !7, i64 40, !7, i64 41, !7, i64 42, !13, i64 43, !13, i64 47, !14, i64 52, !14, i64 54, !14, i64 56, !14, i64 58, !15, i64 64, !7, i64 72, !15, i64 80, !7, i64 88, !15, i64 96, !7, i64 104, !15, i64 112, !7, i64 120}
!13 = !{!"", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!12, !7, i64 41}
!17 = !{!12, !7, i64 42}
!18 = !{!12, !7, i64 72}
!19 = !{!12, !15, i64 64}
!20 = !{!12, !7, i64 88}
!21 = !{!12, !15, i64 80}
!22 = !{!12, !7, i64 104}
!23 = !{!12, !15, i64 96}
!24 = !{!12, !7, i64 120}
!25 = !{!12, !15, i64 112}
!26 = !{!27, !27, i64 0}
!27 = !{!"int", !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass