; LLVM IR from AdaptiveCpp/AdaptiveCpp :: src/runtime/ocl (ocl_queue)

; 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.hipsycl::rt::result" = type { %"class.std::unique_ptr" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.57" }
%"struct.std::_Head_base.57" = type { ptr }
%"class.hipsycl::rt::device_id" = type { %"struct.hipsycl::rt::backend_descriptor", i32 }
%"struct.hipsycl::rt::backend_descriptor" = type { i32, i32, i32 }
%"class.hipsycl::rt::static_array" = type { %"struct.std::array.70" }
%"struct.std::array.70" = type { [3 x i64] }
%class.anon = type { i8 }
%"class.cl::Event" = type { %"class.cl::detail::Wrapper.61" }
%"class.cl::detail::Wrapper.61" = type { ptr }
%"class.std::vector.74" = type { %"struct.std::_Vector_base.75" }
%"struct.std::_Vector_base.75" = type { %"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl" }
%"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl" = type { %"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl_data" }
%"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.hipsycl::rt::source_location" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.58" = type { i8 }
%"class.hipsycl::rt::error_info" = type <{ %"class.std::__cxx11::basic_string", %"class.hipsycl::rt::error_code", i32, [4 x i8] }>
%"class.hipsycl::rt::error_code" = type { %"class.std::__cxx11::basic_string", i8, i32 }
%"class.hipsycl::rt::ocl_queue" = type { %"class.hipsycl::rt::inorder_queue", ptr, i64, %"class.cl::CommandQueue", %"class.hipsycl::rt::ocl_sscp_code_object_invoker", %"class.hipsycl::rt::worker_thread", %"class.std::shared_ptr", %"struct.hipsycl::rt::ocl_queue::protected_state", %"class.hipsycl::common::spin_lock", %"class.hipsycl::glue::jit::cxx_argument_mapper", %"class.hipsycl::rt::kernel_configuration", %"class.std::unordered_map" }
%"class.hipsycl::rt::inorder_queue" = type { ptr }
%"class.cl::CommandQueue" = type { %"class.cl::detail::Wrapper" }
%"class.cl::detail::Wrapper" = type { ptr }
%"class.hipsycl::rt::ocl_sscp_code_object_invoker" = type { %"class.hipsycl::rt::sscp_code_object_invoker", ptr }
%"class.hipsycl::rt::sscp_code_object_invoker" = type { ptr }
%"class.hipsycl::rt::worker_thread" = type { %"class.std::thread", %"struct.std::atomic", %"class.std::condition_variable", %"class.std::mutex", %"class.std::queue" }
%"class.std::thread" = type { %"class.std::thread::id" }
%"class.std::thread::id" = type { i64 }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i8 }
%"class.std::condition_variable" = type { %"class.std::__condvar" }
%"class.std::__condvar" = type { %union.pthread_cond_t }
%union.pthread_cond_t = type { %struct.__pthread_cond_s }
%struct.__pthread_cond_s = type { %union.__atomic_wide_counter, %union.__atomic_wide_counter, [2 x i32], [2 x i32], i32, i32, [2 x i32] }
%union.__atomic_wide_counter = type { i64 }
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::queue" = type { %"class.std::deque" }
%"class.std::deque" = type { %"class.std::_Deque_base" }
%"class.std::_Deque_base" = type { %"struct.std::_Deque_base<std::function<void ()>, std::allocator<std::function<void ()>>>::_Deque_impl" }
%"struct.std::_Deque_base<std::function<void ()>, std::allocator<std::function<void ()>>>::_Deque_impl" = type { %"struct.std::_Deque_base<std::function<void ()>, std::allocator<std::function<void ()>>>::_Deque_impl_data" }
%"struct.std::_Deque_base<std::function<void ()>, std::allocator<std::function<void ()>>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator", %"struct.std::_Deque_iterator" }
%"struct.std::_Deque_iterator" = type { ptr, ptr, ptr, ptr }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.hipsycl::rt::ocl_queue::protected_state" = type { %"class.std::shared_ptr.0", %"class.std::mutex" }
%"class.std::shared_ptr.0" = type { %"class.std::__shared_ptr.1" }
%"class.std::__shared_ptr.1" = type { ptr, %"class.std::__shared_count" }
%"class.hipsycl::common::spin_lock" = type { %"struct.std::atomic_flag" }
%"struct.std::atomic_flag" = type { %"struct.std::__atomic_flag_base" }
%"struct.std::__atomic_flag_base" = type { i8 }
%"class.hipsycl::glue::jit::cxx_argument_mapper" = type { i8, %"class.std::vector", %"class.std::vector.6" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<void *, std::allocator<void *>>::_Vector_impl" }
%"struct.std::_Vector_base<void *, std::allocator<void *>>::_Vector_impl" = type { %"struct.std::_Vector_base<void *, std::allocator<void *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<void *, std::allocator<void *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.6" = type { %"struct.std::_Vector_base.7" }
%"struct.std::_Vector_base.7" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.hipsycl::rt::kernel_configuration" = type { %"class.std::vector.11", %"class.std::vector.16", %"class.std::vector.21", %"class.std::vector.26", %"class.std::vector.6", %"class.std::vector.31", %"struct.std::array" }
%"class.std::vector.11" = type { %"struct.std::_Vector_base.12" }
%"struct.std::_Vector_base.12" = type { %"struct.std::_Vector_base<hipsycl::rt::kernel_build_flag, std::allocator<hipsycl::rt::kernel_build_flag>>::_Vector_impl" }
%"struct.std::_Vector_base<hipsycl::rt::kernel_build_flag, std::allocator<hipsycl::rt::kernel_build_flag>>::_Vector_impl" = type { %"struct.std::_Vector_base<hipsycl::rt::kernel_build_flag, std::allocator<hipsycl::rt::kernel_build_flag>>::_Vector_impl_data" }
%"struct.std::_Vector_base<hipsycl::rt::kernel_build_flag, std::allocator<hipsycl::rt::kernel_build_flag>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.16" = type { %"struct.std::_Vector_base.17" }
%"struct.std::_Vector_base.17" = type { %"struct.std::_Vector_base<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>, std::allocator<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>, std::allocator<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>, std::allocator<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>, std::allocator<std::pair<hipsycl::rt::kernel_build_option, hipsycl::rt::kernel_configuration::int_or_string>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.21" = type { %"struct.std::_Vector_base.22" }
%"struct.std::_Vector_base.22" = type { %"struct.std::_Vector_base<std::pair<int, unsigned long>, std::allocator<std::pair<int, unsigned long>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, unsigned long>, std::allocator<std::pair<int, unsigned long>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, unsigned long>, std::allocator<std::pair<int, unsigned long>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, unsigned long>, std::allocator<std::pair<int, unsigned long>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.26" = type { %"struct.std::_Vector_base.27" }
%"struct.std::_Vector_base.27" = type { %"struct.std::_Vector_base<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>, std::allocator<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>>>::_Vector_impl" }
%"struct.std::_Vector_base<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>, std::allocator<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>, std::allocator<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>, std::allocator<hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config<const hipsycl::glue::sscp::fcall_specialized_config *>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.31" = type { %"struct.std::_Vector_base.32" }
%"struct.std::_Vector_base.32" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::array" = type { [2 x i64] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@.str = external hidden unnamed_addr constant [87 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [29 x i8], align 1
@__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE = external hidden unnamed_addr constant [95 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [33 x i8], align 1
@__func__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE = external hidden unnamed_addr constant [14 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [110 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [114 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt15source_locationC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_i(ptr noundef nonnull align 8 dereferenceable(68), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt10error_codeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt10error_infoC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_10error_codeENS0_10error_typeE(ptr noundef nonnull align 8 dereferenceable(76), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN2cl5EventC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt9ocl_queue21register_submitted_opEN2cl5EventE(ptr noundef nonnull align 8 dereferenceable(584), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2cl5EventC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(584) %1, ptr noundef nonnull align 8 dereferenceable(272) %2, ptr noundef nonnull align 8 dereferenceable(16) %3) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"class.hipsycl::rt::device_id", align 4
  %10 = alloca %"class.hipsycl::rt::device_id", align 4
  %11 = alloca %"class.hipsycl::rt::device_id", align 4
  %12 = alloca %"class.hipsycl::rt::static_array", align 8
  %13 = alloca i32, align 4
  %14 = alloca %"class.hipsycl::rt::static_array", align 8
  %15 = alloca %"class.hipsycl::rt::static_array", align 8
  %16 = alloca %"class.hipsycl::rt::static_array", align 8
  %17 = alloca %"class.hipsycl::rt::static_array", align 8
  %18 = alloca %"class.hipsycl::rt::static_array", align 8
  %19 = alloca %"class.hipsycl::rt::static_array", align 8
  %20 = alloca %"class.hipsycl::rt::static_array", align 8
  %21 = alloca %"class.hipsycl::rt::static_array", align 8
  %22 = alloca %class.anon, align 1
  %23 = alloca %"class.cl::Event", align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.std::vector.74", align 8
  %30 = alloca %"class.hipsycl::rt::source_location", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::allocator.58", align 1
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::allocator.58", align 1
  %35 = alloca %"class.hipsycl::rt::error_info", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator.58", align 1
  %38 = alloca %"class.hipsycl::rt::error_code", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::allocator.58", align 1
  %41 = alloca i32, align 4
  %42 = alloca %"class.hipsycl::rt::static_array", align 8
  %43 = alloca %"class.hipsycl::rt::static_array", align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca %"class.hipsycl::rt::static_array", align 8
  %47 = alloca %"class.hipsycl::rt::static_array", align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca %"class.hipsycl::rt::static_array", align 8
  %51 = alloca %"class.hipsycl::rt::static_array", align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca %"class.hipsycl::rt::static_array", align 8
  %58 = alloca %"class.hipsycl::rt::static_array", align 8
  %59 = alloca %"class.hipsycl::rt::static_array", align 8
  %60 = alloca %"class.hipsycl::rt::static_array", align 8
  %61 = alloca i32, align 4
  %62 = alloca %"class.std::vector.74", align 8
  %63 = alloca %"class.hipsycl::rt::source_location", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::allocator.58", align 1
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::allocator.58", align 1
  %68 = alloca %"class.hipsycl::rt::error_info", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::allocator.58", align 1
  %71 = alloca %"class.hipsycl::rt::error_code", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::allocator.58", align 1
  %74 = alloca %"class.cl::Event", align 8
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %75 = load ptr, ptr %6, align 8
  %76 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %77 = call noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16) %76)
  %78 = icmp sgt i32 3, %77
  br i1 %78, label %79, label %80

79:                                               ; preds = %4
  br label %129

80:                                               ; preds = %4
  %81 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16) %81)
  %83 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %82, ptr noundef @.str.5)
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %83, ptr noundef @.str.6)
  %85 = getelementptr inbounds %"class.hipsycl::rt::ocl_queue", ptr %75, i32 0, i32 1
  %86 = load ptr, ptr %85, align 8, !tbaa !9
  %87 = getelementptr inbounds %"class.hipsycl::rt::ocl_queue", ptr %75, i32 0, i32 2
  %88 = load i64, ptr %87, align 8, !tbaa !78
  %89 = load ptr, ptr %86, align 8, !tbaa !79
  %90 = getelementptr inbounds ptr, ptr %89, i64 3
  %91 = load ptr, ptr %90, align 8
  %92 = call { i64, i64 } %91(ptr noundef nonnull align 8 dereferenceable(60) %86, i64 noundef %88)
  %93 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 0
  %94 = extractvalue { i64, i64 } %92, 0
  store i64 %94, ptr %93, align 4
  %95 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 1
  %96 = extractvalue { i64, i64 } %92, 1
  store i64 %96, ptr %95, align 4
  %97 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 0
  %98 = load i64, ptr %97, align 4
  %99 = getelementptr inbounds { i64, i64 }, ptr %9, i32 0, i32 1
  %100 = load i64, ptr %99, align 4
  %101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8) %84, i64 %98, i64 %100)
  %102 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef @.str.7)
  %103 = load ptr, ptr %7, align 8, !tbaa !5
  %104 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %103)
  %105 = call { i64, i64 } @_ZNK7hipsycl2rt15memory_location10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(104) %104)
  %106 = getelementptr inbounds { i64, i64 }, ptr %10, i32 0, i32 0
  %107 = extractvalue { i64, i64 } %105, 0
  store i64 %107, ptr %106, align 4
  %108 = getelementptr inbounds { i64, i64 }, ptr %10, i32 0, i32 1
  %109 = extractvalue { i64, i64 } %105, 1
  store i64 %109, ptr %108, align 4
  %110 = getelementptr inbounds { i64, i64 }, ptr %10, i32 0, i32 0
  %111 = load i64, ptr %110, align 4
  %112 = getelementptr inbounds { i64, i64 }, ptr %10, i32 0, i32 1
  %113 = load i64, ptr %112, align 4
  %114 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8) %102, i64 %111, i64 %113)
  %115 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %114, ptr noundef @.str.8)
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %116)
  %118 = call { i64, i64 } @_ZNK7hipsycl2rt15memory_location10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(104) %117)
  %119 = getelementptr inbounds { i64, i64 }, ptr %11, i32 0, i32 0
  %120 = extractvalue { i64, i64 } %118, 0
  store i64 %120, ptr %119, align 4
  %121 = getelementptr inbounds { i64, i64 }, ptr %11, i32 0, i32 1
  %122 = extractvalue { i64, i64 } %118, 1
  store i64 %122, ptr %121, align 4
  %123 = getelementptr inbounds { i64, i64 }, ptr %11, i32 0, i32 0
  %124 = load i64, ptr %123, align 4
  %125 = getelementptr inbounds { i64, i64 }, ptr %11, i32 0, i32 1
  %126 = load i64, ptr %125, align 4
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8) %115, i64 %124, i64 %126)
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %127, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %129

129:                                              ; preds = %80, %79
  %130 = load ptr, ptr %7, align 8, !tbaa !5
  %131 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %130)
  %132 = call noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %131)
  %133 = icmp ne ptr %132, null
  br i1 %133, label %134, label %135

134:                                              ; preds = %129
  br label %137

135:                                              ; preds = %129
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str, i32 noundef 179, ptr noundef @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

136:                                              ; No predecessors!
  br label %137

137:                                              ; preds = %136, %134
  %138 = load ptr, ptr %7, align 8, !tbaa !5
  %139 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %138)
  %140 = call noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %139)
  %141 = icmp ne ptr %140, null
  br i1 %141, label %142, label %143

142:                                              ; preds = %137
  br label %145

143:                                              ; preds = %137
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str, i32 noundef 180, ptr noundef @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

144:                                              ; No predecessors!
  br label %145

145:                                              ; preds = %144, %142
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #10
  %146 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %12, ptr noundef nonnull align 8 dereferenceable(272) %146)
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #10
  store i32 0, ptr %13, align 4, !tbaa !81
  %147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %12, i32 noundef 0)
  %148 = load i64, ptr %147, align 8, !tbaa !83
  %149 = icmp ugt i64 %148, 1
  br i1 %149, label %150, label %151

150:                                              ; preds = %145
  store i32 3, ptr %13, align 4, !tbaa !81
  br label %158

151:                                              ; preds = %145
  %152 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %12, i32 noundef 1)
  %153 = load i64, ptr %152, align 8, !tbaa !83
  %154 = icmp ugt i64 %153, 1
  br i1 %154, label %155, label %156

155:                                              ; preds = %151
  store i32 2, ptr %13, align 4, !tbaa !81
  br label %157

156:                                              ; preds = %151
  store i32 1, ptr %13, align 4, !tbaa !81
  br label %157

157:                                              ; preds = %156, %155
  br label %158

158:                                              ; preds = %157, %150
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #10
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %14, ptr noundef nonnull align 8 dereferenceable(272) %159)
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #10
  %160 = load ptr, ptr %7, align 8, !tbaa !5
  %161 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %160)
  call void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %15, ptr noundef nonnull align 8 dereferenceable(104) %161)
  %162 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %15)
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #10
  br i1 %162, label %163, label %176

163:                                              ; preds = %158
  %164 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %16, ptr noundef nonnull align 8 dereferenceable(272) %164)
  %165 = load ptr, ptr %7, align 8, !tbaa !5
  %166 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %165)
  call void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %17, ptr noundef nonnull align 8 dereferenceable(104) %166)
  %167 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %17)
  br i1 %167, label %168, label %176

168:                                              ; preds = %163
  %169 = load ptr, ptr %7, align 8, !tbaa !5
  %170 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %169)
  call void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %18, ptr noundef nonnull align 8 dereferenceable(104) %170)
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 24, i1 false)
  %171 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(24) %19)
  br i1 %171, label %172, label %176

172:                                              ; preds = %168
  %173 = load ptr, ptr %7, align 8, !tbaa !5
  %174 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %173)
  call void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %20, ptr noundef nonnull align 8 dereferenceable(104) %174)
  call void @llvm.memset.p0.i64(ptr align 8 %21, i8 0, i64 24, i1 false)
  %175 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %20, ptr noundef nonnull align 8 dereferenceable(24) %21)
  br label %176

176:                                              ; preds = %172, %168, %163, %158
  %177 = phi i1 [ false, %168 ], [ false, %163 ], [ false, %158 ], [ %175, %172 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #10
  br i1 %177, label %178, label %179

178:                                              ; preds = %176
  store i32 1, ptr %13, align 4, !tbaa !81
  br label %179

179:                                              ; preds = %178, %176
  %180 = load i32, ptr %13, align 4, !tbaa !81
  %181 = icmp sge i32 %180, 1
  br i1 %181, label %182, label %185

182:                                              ; preds = %179
  %183 = load i32, ptr %13, align 4, !tbaa !81
  %184 = icmp sle i32 %183, 3
  br label %185

185:                                              ; preds = %182, %179
  %186 = phi i1 [ false, %179 ], [ %184, %182 ]
  br i1 %186, label %187, label %188

187:                                              ; preds = %185
  br label %190

188:                                              ; preds = %185
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str, i32 noundef 201, ptr noundef @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

189:                                              ; No predecessors!
  br label %190

190:                                              ; preds = %189, %187
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  call void @_ZN2cl5EventC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23)
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  %191 = getelementptr inbounds %"class.hipsycl::rt::ocl_queue", ptr %75, i32 0, i32 1
  %192 = load ptr, ptr %191, align 8, !tbaa !9
  %193 = getelementptr inbounds %"class.hipsycl::rt::ocl_queue", ptr %75, i32 0, i32 2
  %194 = load i64, ptr %193, align 8, !tbaa !78
  %195 = load ptr, ptr %192, align 8, !tbaa !79
  %196 = getelementptr inbounds ptr, ptr %195, i64 2
  %197 = load ptr, ptr %196, align 8
  %198 = invoke noundef ptr %197(ptr noundef nonnull align 8 dereferenceable(60) %192, i64 noundef %194)
          to label %199 unwind label %238

199:                                              ; preds = %190
  store ptr %198, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  %200 = load ptr, ptr %24, align 8, !tbaa !5
  %201 = invoke noundef ptr @_ZN7hipsycl2rt20ocl_hardware_context16get_usm_providerEv(ptr noundef nonnull align 8 dereferenceable(89) %200)
          to label %202 unwind label %242

202:                                              ; preds = %199
  store ptr %201, ptr %27, align 8, !tbaa !5
  %203 = load i32, ptr %13, align 4, !tbaa !81
  %204 = icmp eq i32 %203, 1
  br i1 %204, label %205, label %298

205:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  %206 = load ptr, ptr %27, align 8, !tbaa !5
  %207 = getelementptr inbounds %"class.hipsycl::rt::ocl_queue", ptr %75, i32 0, i32 3
  %208 = load ptr, ptr %7, align 8, !tbaa !5
  %209 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %208)
          to label %210 unwind label %246

210:                                              ; preds = %205
  %211 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %209)
          to label %212 unwind label %246

212:                                              ; preds = %210
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %213)
          to label %215 unwind label %246

215:                                              ; preds = %212
  %216 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %214)
          to label %217 unwind label %246

217:                                              ; preds = %215
  %218 = load ptr, ptr %7, align 8, !tbaa !5
  %219 = invoke noundef i64 @_ZNK7hipsycl2rt16memcpy_operation25get_num_transferred_bytesEv(ptr noundef nonnull align 8 dereferenceable(272) %218)
          to label %220 unwind label %246

220:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 24, ptr %29) #10
  call void @llvm.memset.p0.i64(ptr align 8 %29, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  %221 = load ptr, ptr %206, align 8, !tbaa !79
  %222 = getelementptr inbounds ptr, ptr %221, i64 14
  %223 = load ptr, ptr %222, align 8
  %224 = invoke noundef i32 %223(ptr noundef nonnull align 8 dereferenceable(8) %206, ptr noundef nonnull align 8 dereferenceable(8) %207, ptr noundef %211, ptr noundef %216, i64 noundef %219, ptr noundef nonnull align 8 dereferenceable(24) %29, ptr noundef %23)
          to label %225 unwind label %250

225:                                              ; preds = %220
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #10
  store i32 %224, ptr %28, align 4, !tbaa !81
  %226 = load i32, ptr %28, align 4, !tbaa !81
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %228, label %293

228:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 72, ptr %30) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef @__func__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %229 unwind label %254

229:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %230 unwind label %258

230:                                              ; preds = %229
  invoke void @_ZN7hipsycl2rt15source_locationC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_i(ptr noundef nonnull align 8 dereferenceable(68) %30, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(32) %33, i32 noundef 221)
          to label %231 unwind label %262

231:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 80, ptr %35) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef @.str.12, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %232 unwind label %266

232:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %40)
          to label %233 unwind label %270

233:                                              ; preds = %232
  %234 = load i32, ptr %28, align 4, !tbaa !81
  invoke void @_ZN7hipsycl2rt10error_codeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi(ptr noundef nonnull align 8 dereferenceable(40) %38, ptr noundef nonnull align 8 dereferenceable(32) %39, i32 noundef %234)
          to label %235 unwind label %274

235:                                              ; preds = %233
  invoke void @_ZN7hipsycl2rt10error_infoC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_10error_codeENS0_10error_typeE(ptr noundef nonnull align 8 dereferenceable(76) %35, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef %38, i32 noundef 1)
          to label %236 unwind label %278

236:                                              ; preds = %235
  invoke void @_ZN7hipsycl2rt10make_errorERKNS0_15source_locationERKNS0_10error_infoE(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(68) %30, ptr noundef nonnull align 8 dereferenceable(76) %35)
          to label %237 unwind label %282

237:                                              ; preds = %236
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %35) #10
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %38) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr %35) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %30) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %30) #10
  store i32 1, ptr %41, align 4
  br label %294

238:                                              ; preds = %190
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %25, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %26, align 4
  br label %583

242:                                              ; preds = %575, %573, %199
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %25, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %26, align 4
  br label %582

246:                                              ; preds = %217, %215, %212, %210, %205
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %25, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %26, align 4
  br label %297

250:                                              ; preds = %220
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %25, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %26, align 4
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %29) #10
  br label %297

254:                                              ; preds = %228
  %255 = landingpad { ptr, i32 }
          cleanup
  %256 = extractvalue { ptr, i32 } %255, 0
  store ptr %256, ptr %25, align 8
  %257 = extractvalue { ptr, i32 } %255, 1
  store i32 %257, ptr %26, align 4
  br label %292

258:                                              ; preds = %229
  %259 = landingpad { ptr, i32 }
          cleanup
  %260 = extractvalue { ptr, i32 } %259, 0
  store ptr %260, ptr %25, align 8
  %261 = extractvalue { ptr, i32 } %259, 1
  store i32 %261, ptr %26, align 4
  br label %291

262:                                              ; preds = %230
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %25, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %26, align 4
  br label %290

266:                                              ; preds = %231
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %25, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %26, align 4
  br label %289

270:                                              ; preds = %232
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %25, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %26, align 4
  br label %288

274:                                              ; preds = %233
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %25, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %26, align 4
  br label %287

278:                                              ; preds = %235
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %25, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %26, align 4
  br label %286

282:                                              ; preds = %236
  %283 = landingpad { ptr, i32 }
          cleanup
  %284 = extractvalue { ptr, i32 } %283, 0
  store ptr %284, ptr %25, align 8
  %285 = extractvalue { ptr, i32 } %283, 1
  store i32 %285, ptr %26, align 4
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %35) #10
  br label %286

286:                                              ; preds = %282, %278
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %38) #10
  br label %287

287:                                              ; preds = %286, %274
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #10
  br label %288

288:                                              ; preds = %287, %270
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %40) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #10
  br label %289

289:                                              ; preds = %288, %266
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr %35) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %30) #10
  br label %290

290:                                              ; preds = %289, %262
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #10
  br label %291

291:                                              ; preds = %290, %258
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %34) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #10
  br label %292

292:                                              ; preds = %291, %254
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %30) #10
  br label %297

293:                                              ; preds = %225
  store i32 0, ptr %41, align 4
  br label %294

294:                                              ; preds = %293, %237
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  %295 = load i32, ptr %41, align 4
  switch i32 %295, label %581 [
    i32 0, label %296
  ]

296:                                              ; preds = %294
  br label %573

297:                                              ; preds = %292, %250, %246
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  br label %582

298:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #10
  %299 = load ptr, ptr %7, align 8, !tbaa !5
  %300 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %299)
          to label %301 unwind label %347

301:                                              ; preds = %298
  invoke void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %42, ptr noundef nonnull align 8 dereferenceable(104) %300)
          to label %302 unwind label %347

302:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 24, ptr %43) #10
  %303 = load ptr, ptr %7, align 8, !tbaa !5
  %304 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %303)
          to label %305 unwind label %351

305:                                              ; preds = %302
  invoke void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %43, ptr noundef nonnull align 8 dereferenceable(104) %304)
          to label %306 unwind label %351

306:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %307 = load ptr, ptr %7, align 8, !tbaa !5
  %308 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %307)
          to label %309 unwind label %355

309:                                              ; preds = %306
  %310 = invoke noundef i64 @_ZNK7hipsycl2rt15memory_location16get_element_sizeEv(ptr noundef nonnull align 8 dereferenceable(104) %308)
          to label %311 unwind label %355

311:                                              ; preds = %309
  store i64 %310, ptr %44, align 8, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %312 = load ptr, ptr %7, align 8, !tbaa !5
  %313 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %312)
          to label %314 unwind label %359

314:                                              ; preds = %311
  %315 = invoke noundef i64 @_ZNK7hipsycl2rt15memory_location16get_element_sizeEv(ptr noundef nonnull align 8 dereferenceable(104) %313)
          to label %316 unwind label %359

316:                                              ; preds = %314
  store i64 %315, ptr %45, align 8, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 24, ptr %46) #10
  %317 = load ptr, ptr %7, align 8, !tbaa !5
  %318 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %317)
          to label %319 unwind label %363

319:                                              ; preds = %316
  invoke void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %46, ptr noundef nonnull align 8 dereferenceable(104) %318)
          to label %320 unwind label %363

320:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #10
  %321 = load ptr, ptr %7, align 8, !tbaa !5
  %322 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %321)
          to label %323 unwind label %367

323:                                              ; preds = %320
  invoke void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %47, ptr noundef nonnull align 8 dereferenceable(104) %322)
          to label %324 unwind label %367

324:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  %325 = load ptr, ptr %7, align 8, !tbaa !5
  %326 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %325)
          to label %327 unwind label %371

327:                                              ; preds = %324
  %328 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location12get_base_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %326)
          to label %329 unwind label %371

329:                                              ; preds = %327
  store ptr %328, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #10
  %330 = load ptr, ptr %7, align 8, !tbaa !5
  %331 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %330)
          to label %332 unwind label %375

332:                                              ; preds = %329
  %333 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location12get_base_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %331)
          to label %334 unwind label %375

334:                                              ; preds = %332
  store ptr %333, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %50) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %50, ptr align 8 %42, i64 24, i1 false), !tbaa.struct !84
  call void @llvm.lifetime.start.p0(i64 24, ptr %51) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %51, ptr align 8 %43, i64 24, i1 false), !tbaa.struct !84
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #10
  %335 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %12, i32 noundef 2)
          to label %336 unwind label %379

336:                                              ; preds = %334
  %337 = load i64, ptr %335, align 8, !tbaa !83
  %338 = load i64, ptr %44, align 8, !tbaa !83
  %339 = mul i64 %337, %338
  store i64 %339, ptr %52, align 8, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #10
  store i64 0, ptr %53, align 8, !tbaa !83
  br label %340

340:                                              ; preds = %554, %336
  %341 = load i64, ptr %53, align 8, !tbaa !83
  %342 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %12, i32 noundef 0)
          to label %343 unwind label %383

343:                                              ; preds = %340
  %344 = load i64, ptr %342, align 8, !tbaa !83
  %345 = icmp ult i64 %341, %344
  br i1 %345, label %387, label %346

346:                                              ; preds = %343
  store i32 2, ptr %41, align 4
  br label %557

347:                                              ; preds = %301, %298
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %25, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %26, align 4
  br label %572

351:                                              ; preds = %305, %302
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %25, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %26, align 4
  br label %571

355:                                              ; preds = %309, %306
  %356 = landingpad { ptr, i32 }
          cleanup
  %357 = extractvalue { ptr, i32 } %356, 0
  store ptr %357, ptr %25, align 8
  %358 = extractvalue { ptr, i32 } %356, 1
  store i32 %358, ptr %26, align 4
  br label %570

359:                                              ; preds = %314, %311
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %25, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %26, align 4
  br label %569

363:                                              ; preds = %319, %316
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %25, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %26, align 4
  br label %568

367:                                              ; preds = %323, %320
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %25, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %26, align 4
  br label %567

371:                                              ; preds = %327, %324
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %25, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %26, align 4
  br label %566

375:                                              ; preds = %332, %329
  %376 = landingpad { ptr, i32 }
          cleanup
  %377 = extractvalue { ptr, i32 } %376, 0
  store ptr %377, ptr %25, align 8
  %378 = extractvalue { ptr, i32 } %376, 1
  store i32 %378, ptr %26, align 4
  br label %565

379:                                              ; preds = %334
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %25, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %26, align 4
  br label %564

383:                                              ; preds = %547, %545, %542, %540, %537, %535, %340
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %25, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %26, align 4
  br label %559

387:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #10
  store i64 0, ptr %54, align 8, !tbaa !83
  br label %388

388:                                              ; preds = %523, %387
  %389 = load i64, ptr %54, align 8, !tbaa !83
  %390 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %12, i32 noundef 1)
          to label %391 unwind label %395

391:                                              ; preds = %388
  %392 = load i64, ptr %390, align 8, !tbaa !83
  %393 = icmp ult i64 %389, %392
  br i1 %393, label %399, label %394

394:                                              ; preds = %391
  store i32 5, ptr %41, align 4
  br label %532

395:                                              ; preds = %388
  %396 = landingpad { ptr, i32 }
          cleanup
  %397 = extractvalue { ptr, i32 } %396, 0
  store ptr %397, ptr %25, align 8
  %398 = extractvalue { ptr, i32 } %396, 1
  store i32 %398, ptr %26, align 4
  br label %534

399:                                              ; preds = %391
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  %400 = load ptr, ptr %48, align 8, !tbaa !5
  store ptr %400, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #10
  %401 = load ptr, ptr %49, align 8, !tbaa !5
  store ptr %401, ptr %56, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %57, ptr align 8 %50, i64 24, i1 false), !tbaa.struct !84
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %58, ptr align 8 %46, i64 24, i1 false), !tbaa.struct !84
  %402 = invoke noundef i64 @"_ZZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEEENK3$_0clENS0_12static_arrayILi3EEESB_"(ptr noundef nonnull align 1 dereferenceable(1) %22, ptr noundef byval(%"class.hipsycl::rt::static_array") align 8 %57, ptr noundef byval(%"class.hipsycl::rt::static_array") align 8 %58)
          to label %403 unwind label %426

403:                                              ; preds = %399
  %404 = load i64, ptr %44, align 8, !tbaa !83
  %405 = mul i64 %402, %404
  %406 = load ptr, ptr %55, align 8, !tbaa !5
  %407 = getelementptr inbounds i8, ptr %406, i64 %405
  store ptr %407, ptr %55, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %59, ptr align 8 %51, i64 24, i1 false), !tbaa.struct !84
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %60, ptr align 8 %47, i64 24, i1 false), !tbaa.struct !84
  %408 = invoke noundef i64 @"_ZZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEEENK3$_0clENS0_12static_arrayILi3EEESB_"(ptr noundef nonnull align 1 dereferenceable(1) %22, ptr noundef byval(%"class.hipsycl::rt::static_array") align 8 %59, ptr noundef byval(%"class.hipsycl::rt::static_array") align 8 %60)
          to label %409 unwind label %426

409:                                              ; preds = %403
  %410 = load i64, ptr %45, align 8, !tbaa !83
  %411 = mul i64 %408, %410
  %412 = load ptr, ptr %56, align 8, !tbaa !5
  %413 = getelementptr inbounds i8, ptr %412, i64 %411
  store ptr %413, ptr %56, align 8, !tbaa !5
  %414 = load ptr, ptr %55, align 8, !tbaa !5
  %415 = load i64, ptr %52, align 8, !tbaa !83
  %416 = getelementptr inbounds i8, ptr %414, i64 %415
  %417 = load ptr, ptr %48, align 8, !tbaa !5
  %418 = invoke noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %46)
          to label %419 unwind label %426

419:                                              ; preds = %409
  %420 = load i64, ptr %44, align 8, !tbaa !83
  %421 = mul i64 %418, %420
  %422 = getelementptr inbounds i8, ptr %417, i64 %421
  %423 = icmp ule ptr %416, %422
  br i1 %423, label %424, label %425

424:                                              ; preds = %419
  br label %431

425:                                              ; preds = %419
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str, i32 noundef 256, ptr noundef @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

426:                                              ; preds = %431, %409, %403, %399
  %427 = landingpad { ptr, i32 }
          cleanup
  %428 = extractvalue { ptr, i32 } %427, 0
  store ptr %428, ptr %25, align 8
  %429 = extractvalue { ptr, i32 } %427, 1
  store i32 %429, ptr %26, align 4
  br label %531

430:                                              ; No predecessors!
  br label %431

431:                                              ; preds = %430, %424
  %432 = load ptr, ptr %56, align 8, !tbaa !5
  %433 = load i64, ptr %52, align 8, !tbaa !83
  %434 = getelementptr inbounds i8, ptr %432, i64 %433
  %435 = load ptr, ptr %49, align 8, !tbaa !5
  %436 = invoke noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %47)
          to label %437 unwind label %426

437:                                              ; preds = %431
  %438 = load i64, ptr %45, align 8, !tbaa !83
  %439 = mul i64 %436, %438
  %440 = getelementptr inbounds i8, ptr %435, i64 %439
  %441 = icmp ule ptr %434, %440
  br i1 %441, label %442, label %443

442:                                              ; preds = %437
  br label %445

443:                                              ; preds = %437
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str, i32 noundef 259, ptr noundef @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

444:                                              ; No predecessors!
  br label %445

445:                                              ; preds = %444, %442
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #10
  %446 = load ptr, ptr %27, align 8, !tbaa !5
  %447 = getelementptr inbounds %"class.hipsycl::rt::ocl_queue", ptr %75, i32 0, i32 3
  %448 = load ptr, ptr %56, align 8, !tbaa !5
  %449 = load ptr, ptr %55, align 8, !tbaa !5
  %450 = load i64, ptr %52, align 8, !tbaa !83
  call void @llvm.lifetime.start.p0(i64 24, ptr %62) #10
  call void @llvm.memset.p0.i64(ptr align 8 %62, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  %451 = load ptr, ptr %446, align 8, !tbaa !79
  %452 = getelementptr inbounds ptr, ptr %451, i64 14
  %453 = load ptr, ptr %452, align 8
  %454 = invoke noundef i32 %453(ptr noundef nonnull align 8 dereferenceable(8) %446, ptr noundef nonnull align 8 dereferenceable(8) %447, ptr noundef %448, ptr noundef %449, i64 noundef %450, ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef %23)
          to label %455 unwind label %468

455:                                              ; preds = %445
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %62) #10
  store i32 %454, ptr %61, align 4, !tbaa !81
  %456 = load i32, ptr %61, align 4, !tbaa !81
  %457 = icmp ne i32 %456, 0
  br i1 %457, label %458, label %511

458:                                              ; preds = %455
  call void @llvm.lifetime.start.p0(i64 72, ptr %63) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef @__func__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE, ptr noundef nonnull align 1 dereferenceable(1) %65)
          to label %459 unwind label %472

459:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %67) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef @.str, ptr noundef nonnull align 1 dereferenceable(1) %67)
          to label %460 unwind label %476

460:                                              ; preds = %459
  invoke void @_ZN7hipsycl2rt15source_locationC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_i(ptr noundef nonnull align 8 dereferenceable(68) %63, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(32) %66, i32 noundef 266)
          to label %461 unwind label %480

461:                                              ; preds = %460
  call void @llvm.lifetime.start.p0(i64 80, ptr %68) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %70) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef @.str.12, ptr noundef nonnull align 1 dereferenceable(1) %70)
          to label %462 unwind label %484

462:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 32, ptr %72) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr %73) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %73)
          to label %463 unwind label %488

463:                                              ; preds = %462
  %464 = load i32, ptr %61, align 4, !tbaa !81
  invoke void @_ZN7hipsycl2rt10error_codeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi(ptr noundef nonnull align 8 dereferenceable(40) %71, ptr noundef nonnull align 8 dereferenceable(32) %72, i32 noundef %464)
          to label %465 unwind label %492

465:                                              ; preds = %463
  invoke void @_ZN7hipsycl2rt10error_infoC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_10error_codeENS0_10error_typeE(ptr noundef nonnull align 8 dereferenceable(76) %68, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef %71, i32 noundef 1)
          to label %466 unwind label %496

466:                                              ; preds = %465
  invoke void @_ZN7hipsycl2rt10make_errorERKNS0_15source_locationERKNS0_10error_infoE(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(68) %63, ptr noundef nonnull align 8 dereferenceable(76) %68)
          to label %467 unwind label %500

467:                                              ; preds = %466
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %68) #10
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %71) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %70) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr %68) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %63) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %63) #10
  store i32 1, ptr %41, align 4
  br label %520

468:                                              ; preds = %445
  %469 = landingpad { ptr, i32 }
          cleanup
  %470 = extractvalue { ptr, i32 } %469, 0
  store ptr %470, ptr %25, align 8
  %471 = extractvalue { ptr, i32 } %469, 1
  store i32 %471, ptr %26, align 4
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %62) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %62) #10
  br label %530

472:                                              ; preds = %458
  %473 = landingpad { ptr, i32 }
          cleanup
  %474 = extractvalue { ptr, i32 } %473, 0
  store ptr %474, ptr %25, align 8
  %475 = extractvalue { ptr, i32 } %473, 1
  store i32 %475, ptr %26, align 4
  br label %510

476:                                              ; preds = %459
  %477 = landingpad { ptr, i32 }
          cleanup
  %478 = extractvalue { ptr, i32 } %477, 0
  store ptr %478, ptr %25, align 8
  %479 = extractvalue { ptr, i32 } %477, 1
  store i32 %479, ptr %26, align 4
  br label %509

480:                                              ; preds = %460
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %25, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %26, align 4
  br label %508

484:                                              ; preds = %461
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %25, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %26, align 4
  br label %507

488:                                              ; preds = %462
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %25, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %26, align 4
  br label %506

492:                                              ; preds = %463
  %493 = landingpad { ptr, i32 }
          cleanup
  %494 = extractvalue { ptr, i32 } %493, 0
  store ptr %494, ptr %25, align 8
  %495 = extractvalue { ptr, i32 } %493, 1
  store i32 %495, ptr %26, align 4
  br label %505

496:                                              ; preds = %465
  %497 = landingpad { ptr, i32 }
          cleanup
  %498 = extractvalue { ptr, i32 } %497, 0
  store ptr %498, ptr %25, align 8
  %499 = extractvalue { ptr, i32 } %497, 1
  store i32 %499, ptr %26, align 4
  br label %504

500:                                              ; preds = %466
  %501 = landingpad { ptr, i32 }
          cleanup
  %502 = extractvalue { ptr, i32 } %501, 0
  store ptr %502, ptr %25, align 8
  %503 = extractvalue { ptr, i32 } %501, 1
  store i32 %503, ptr %26, align 4
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %68) #10
  br label %504

504:                                              ; preds = %500, %496
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %71) #10
  br label %505

505:                                              ; preds = %504, %492
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #10
  br label %506

506:                                              ; preds = %505, %488
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %73) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %72) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #10
  br label %507

507:                                              ; preds = %506, %484
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %70) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr %68) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %63) #10
  br label %508

508:                                              ; preds = %507, %480
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #10
  br label %509

509:                                              ; preds = %508, %476
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %67) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #10
  br label %510

510:                                              ; preds = %509, %472
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %65) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %63) #10
  br label %530

511:                                              ; preds = %455
  %512 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %50, i32 noundef 1)
          to label %513 unwind label %526

513:                                              ; preds = %511
  %514 = load i64, ptr %512, align 8, !tbaa !83
  %515 = add i64 %514, 1
  store i64 %515, ptr %512, align 8, !tbaa !83
  %516 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %51, i32 noundef 1)
          to label %517 unwind label %526

517:                                              ; preds = %513
  %518 = load i64, ptr %516, align 8, !tbaa !83
  %519 = add i64 %518, 1
  store i64 %519, ptr %516, align 8, !tbaa !83
  store i32 0, ptr %41, align 4
  br label %520

520:                                              ; preds = %517, %467
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  %521 = load i32, ptr %41, align 4
  switch i32 %521, label %532 [
    i32 0, label %522
  ]

522:                                              ; preds = %520
  br label %523

523:                                              ; preds = %522
  %524 = load i64, ptr %54, align 8, !tbaa !83
  %525 = add i64 %524, 1
  store i64 %525, ptr %54, align 8, !tbaa !83
  br label %388, !llvm.loop !86

526:                                              ; preds = %513, %511
  %527 = landingpad { ptr, i32 }
          cleanup
  %528 = extractvalue { ptr, i32 } %527, 0
  store ptr %528, ptr %25, align 8
  %529 = extractvalue { ptr, i32 } %527, 1
  store i32 %529, ptr %26, align 4
  br label %530

530:                                              ; preds = %526, %510, %468
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #10
  br label %531

531:                                              ; preds = %530, %426
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  br label %534

532:                                              ; preds = %520, %394
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #10
  %533 = load i32, ptr %41, align 4
  switch i32 %533, label %557 [
    i32 5, label %535
  ]

534:                                              ; preds = %531, %395
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #10
  br label %559

535:                                              ; preds = %532
  %536 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %42, i32 noundef 1)
          to label %537 unwind label %383

537:                                              ; preds = %535
  %538 = load i64, ptr %536, align 8, !tbaa !83
  %539 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %50, i32 noundef 1)
          to label %540 unwind label %383

540:                                              ; preds = %537
  store i64 %538, ptr %539, align 8, !tbaa !83
  %541 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %43, i32 noundef 1)
          to label %542 unwind label %383

542:                                              ; preds = %540
  %543 = load i64, ptr %541, align 8, !tbaa !83
  %544 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %51, i32 noundef 1)
          to label %545 unwind label %383

545:                                              ; preds = %542
  store i64 %543, ptr %544, align 8, !tbaa !83
  %546 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %51, i32 noundef 0)
          to label %547 unwind label %383

547:                                              ; preds = %545
  %548 = load i64, ptr %546, align 8, !tbaa !83
  %549 = add i64 %548, 1
  store i64 %549, ptr %546, align 8, !tbaa !83
  %550 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %50, i32 noundef 0)
          to label %551 unwind label %383

551:                                              ; preds = %547
  %552 = load i64, ptr %550, align 8, !tbaa !83
  %553 = add i64 %552, 1
  store i64 %553, ptr %550, align 8, !tbaa !83
  br label %554

554:                                              ; preds = %551
  %555 = load i64, ptr %53, align 8, !tbaa !83
  %556 = add i64 %555, 1
  store i64 %556, ptr %53, align 8, !tbaa !83
  br label %340, !llvm.loop !88

557:                                              ; preds = %532, %346
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  %558 = load i32, ptr %41, align 4
  switch i32 %558, label %561 [
    i32 2, label %560
  ]

559:                                              ; preds = %534, %383
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  br label %564

560:                                              ; preds = %557
  store i32 0, ptr %41, align 4
  br label %561

561:                                              ; preds = %560, %557
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #10
  %562 = load i32, ptr %41, align 4
  switch i32 %562, label %581 [
    i32 0, label %563
  ]

563:                                              ; preds = %561
  br label %573

564:                                              ; preds = %559, %379
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #10
  br label %565

565:                                              ; preds = %564, %375
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  br label %566

566:                                              ; preds = %565, %371
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  br label %567

567:                                              ; preds = %566, %367
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #10
  br label %568

568:                                              ; preds = %567, %363
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #10
  br label %569

569:                                              ; preds = %568, %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %570

570:                                              ; preds = %569, %355
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %571

571:                                              ; preds = %570, %351
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #10
  br label %572

572:                                              ; preds = %571, %347
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #10
  br label %582

573:                                              ; preds = %563, %296
  invoke void @_ZN2cl5EventC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %574 unwind label %242

574:                                              ; preds = %573
  invoke void @_ZN7hipsycl2rt9ocl_queue21register_submitted_opEN2cl5EventE(ptr noundef nonnull align 8 dereferenceable(584) %75, ptr noundef %74)
          to label %575 unwind label %577

575:                                              ; preds = %574
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #10
  invoke void @_ZN7hipsycl2rt12make_successEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::result") align 8 %0)
          to label %576 unwind label %242

576:                                              ; preds = %575
  store i32 1, ptr %41, align 4
  br label %581

577:                                              ; preds = %574
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %25, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %26, align 4
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %74) #10
  br label %582

581:                                              ; preds = %576, %561, %294
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #10
  ret void

582:                                              ; preds = %577, %572, %297, %242
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  br label %583

583:                                              ; preds = %582, %238
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #10
  br label %584

584:                                              ; preds = %583
  %585 = load ptr, ptr %25, align 8
  %586 = load i32, ptr %26, align 4
  %587 = insertvalue { ptr, i32 } poison, ptr %585, 0
  %588 = insertvalue { ptr, i32 } %587, i32 %586, 1
  resume { ptr, i32 } %588
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv() #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8), i64, i64) #5

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16)) #1 align 2

declare noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272)) #5

declare { i64, i64 } @_ZNK7hipsycl2rt15memory_location10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(104)) #5

declare noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272)) #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

declare noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104)) #5

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

declare void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(272)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #2

declare void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(104)) #5

declare void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(104)) #5

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

declare noundef ptr @_ZN7hipsycl2rt20ocl_hardware_context16get_usm_providerEv(ptr noundef nonnull align 8 dereferenceable(89)) #5

declare noundef i64 @_ZNK7hipsycl2rt16memcpy_operation25get_num_transferred_bytesEv(ptr noundef nonnull align 8 dereferenceable(272)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN2cl5EventESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt10make_errorERKNS0_15source_locationERKNS0_10error_infoE(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::result") align 8, ptr noundef nonnull align 8 dereferenceable(68), ptr noundef nonnull align 8 dereferenceable(76)) #4

declare noundef i64 @_ZNK7hipsycl2rt15memory_location16get_element_sizeEv(ptr noundef nonnull align 8 dereferenceable(104)) #5

declare noundef ptr @_ZNK7hipsycl2rt15memory_location12get_base_ptrEv(ptr noundef nonnull align 8 dereferenceable(104)) #5

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #8

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i64 @"_ZZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEEENK3$_0clENS0_12static_arrayILi3EEESB_"(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef byval(%"class.hipsycl::rt::static_array") align 8, ptr noundef byval(%"class.hipsycl::rt::static_array") align 8) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt12make_successEv(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::result") align 8) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { inlinehint 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 #4 = { inlinehint 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 #5 = { "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 #6 = { noreturn nounwind "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 #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { noreturn nounwind }
attributes #10 = { 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, !6, i64 8}
!10 = !{!"_ZTSN7hipsycl2rt9ocl_queueE", !11, i64 0, !6, i64 8, !12, i64 16, !13, i64 24, !15, i64 32, !17, i64 48, !33, i64 232, !36, i64 248, !39, i64 304, !42, i64 312, !51, i64 368, !73, i64 528}
!11 = !{!"_ZTSN7hipsycl2rt13inorder_queueE"}
!12 = !{!"long", !7, i64 0}
!13 = !{!"_ZTSN2cl12CommandQueueE", !14, i64 0}
!14 = !{!"_ZTSN2cl6detail7WrapperIP17_cl_command_queueEE", !6, i64 0}
!15 = !{!"_ZTSN7hipsycl2rt28ocl_sscp_code_object_invokerE", !16, i64 0, !6, i64 8}
!16 = !{!"_ZTSN7hipsycl2rt24sscp_code_object_invokerE"}
!17 = !{!"_ZTSN7hipsycl2rt13worker_threadE", !18, i64 0, !20, i64 8, !23, i64 16, !25, i64 64, !27, i64 104}
!18 = !{!"_ZTSSt6thread", !19, i64 0}
!19 = !{!"_ZTSNSt6thread2idE", !12, i64 0}
!20 = !{!"_ZTSSt6atomicIbE", !21, i64 0}
!21 = !{!"_ZTSSt13__atomic_baseIbE", !22, i64 0}
!22 = !{!"bool", !7, i64 0}
!23 = !{!"_ZTSSt18condition_variable", !24, i64 0}
!24 = !{!"_ZTSSt9__condvar", !7, i64 0}
!25 = !{!"_ZTSSt5mutex", !26, i64 0}
!26 = !{!"_ZTSSt12__mutex_base", !7, i64 0}
!27 = !{!"_ZTSSt5queueISt8functionIFvvEESt5dequeIS2_SaIS2_EEE", !28, i64 0}
!28 = !{!"_ZTSSt5dequeISt8functionIFvvEESaIS2_EE", !29, i64 0}
!29 = !{!"_ZTSSt11_Deque_baseISt8functionIFvvEESaIS2_EE", !30, i64 0}
!30 = !{!"_ZTSNSt11_Deque_baseISt8functionIFvvEESaIS2_EE11_Deque_implE", !31, i64 0}
!31 = !{!"_ZTSNSt11_Deque_baseISt8functionIFvvEESaIS2_EE16_Deque_impl_dataE", !6, i64 0, !12, i64 8, !32, i64 16, !32, i64 48}
!32 = !{!"_ZTSSt15_Deque_iteratorISt8functionIFvvEERS2_PS2_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!33 = !{!"_ZTSSt10shared_ptrIN7hipsycl2rt12kernel_cacheEE", !34, i64 0}
!34 = !{!"_ZTSSt12__shared_ptrIN7hipsycl2rt12kernel_cacheELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !35, i64 8}
!35 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0}
!36 = !{!"_ZTSN7hipsycl2rt9ocl_queue15protected_stateE", !37, i64 0, !25, i64 16}
!37 = !{!"_ZTSSt10shared_ptrIN7hipsycl2rt14dag_node_eventEE", !38, i64 0}
!38 = !{!"_ZTSSt12__shared_ptrIN7hipsycl2rt14dag_node_eventELN9__gnu_cxx12_Lock_policyE2EE", !6, i64 0, !35, i64 8}
!39 = !{!"_ZTSN7hipsycl6common9spin_lockE", !40, i64 0}
!40 = !{!"_ZTSSt11atomic_flag", !41, i64 0}
!41 = !{!"_ZTSSt18__atomic_flag_base", !22, i64 0}
!42 = !{!"_ZTSN7hipsycl4glue3jit19cxx_argument_mapperE", !22, i64 0, !43, i64 8, !47, i64 32}
!43 = !{!"_ZTSSt6vectorIPvSaIS0_EE", !44, i64 0}
!44 = !{!"_ZTSSt12_Vector_baseIPvSaIS0_EE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIPvSaIS0_EE12_Vector_implE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIPvSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!47 = !{!"_ZTSSt6vectorImSaImEE", !48, i64 0}
!48 = !{!"_ZTSSt12_Vector_baseImSaImEE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseImSaImEE12_Vector_implE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseImSaImEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!51 = !{!"_ZTSN7hipsycl2rt20kernel_configurationE", !52, i64 0, !56, i64 24, !60, i64 48, !64, i64 72, !47, i64 96, !68, i64 120, !72, i64 144}
!52 = !{!"_ZTSSt6vectorIN7hipsycl2rt17kernel_build_flagESaIS2_EE", !53, i64 0}
!53 = !{!"_ZTSSt12_Vector_baseIN7hipsycl2rt17kernel_build_flagESaIS2_EE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl2rt17kernel_build_flagESaIS2_EE12_Vector_implE", !55, i64 0}
!55 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl2rt17kernel_build_flagESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!56 = !{!"_ZTSSt6vectorISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE", !57, i64 0}
!57 = !{!"_ZTSSt12_Vector_baseISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE12_Vector_implE", !59, i64 0}
!59 = !{!"_ZTSNSt12_Vector_baseISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!60 = !{!"_ZTSSt6vectorISt4pairIimESaIS1_EE", !61, i64 0}
!61 = !{!"_ZTSSt12_Vector_baseISt4pairIimESaIS1_EE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseISt4pairIimESaIS1_EE12_Vector_implE", !63, i64 0}
!63 = !{!"_ZTSNSt12_Vector_baseISt4pairIimESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!64 = !{!"_ZTSSt6vectorIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE", !65, i64 0}
!65 = !{!"_ZTSSt12_Vector_baseIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE12_Vector_implE", !67, i64 0}
!67 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!68 = !{!"_ZTSSt6vectorISt4pairIiiESaIS1_EE", !69, i64 0}
!69 = !{!"_ZTSSt12_Vector_baseISt4pairIiiESaIS1_EE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implE", !71, i64 0}
!71 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!72 = !{!"_ZTSSt5arrayImLm2EE", !7, i64 0}
!73 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmSt4hashIS5_ESt8equal_toIS5_ESaISt4pairIKS5_mEEE", !74, i64 0}
!74 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESaIS8_ENSt8__detail10_Select1stESt8equal_toIS5_ESt4hashIS5_ENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !12, i64 8, !75, i64 16, !12, i64 24, !76, i64 32, !6, i64 48}
!75 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!76 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !77, i64 0, !12, i64 8}
!77 = !{!"float", !7, i64 0}
!78 = !{!10, !12, i64 16}
!79 = !{!80, !80, i64 0}
!80 = !{!"vtable pointer", !8, i64 0}
!81 = !{!82, !82, i64 0}
!82 = !{!"int", !7, i64 0}
!83 = !{!12, !12, i64 0}
!84 = !{i64 0, i64 24, !85}
!85 = !{!7, !7, i64 0}
!86 = distinct !{!86, !87}
!87 = !{!"llvm.loop.mustprogress"}
!88 = distinct !{!88, !87}


; 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.hipsycl::rt::result" = type { %"class.std::unique_ptr" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.57" }
%"struct.std::_Head_base.57" = type { ptr }
%"class.hipsycl::rt::static_array" = type { %"struct.std::array.70" }
%"struct.std::array.70" = type { [3 x i64] }
%class.anon = type { i8 }
%"class.cl::Event" = type { %"class.cl::detail::Wrapper.61" }
%"class.cl::detail::Wrapper.61" = type { ptr }
%"class.std::vector.74" = type { %"struct.std::_Vector_base.75" }
%"struct.std::_Vector_base.75" = type { %"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl" }
%"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl" = type { %"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl_data" }
%"struct.std::_Vector_base<cl::Event, std::allocator<cl::Event>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.hipsycl::rt::source_location" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::allocator.58" = type { i8 }
%"class.hipsycl::rt::error_info" = type <{ %"class.std::__cxx11::basic_string", %"class.hipsycl::rt::error_code", i32, [4 x i8] }>
%"class.hipsycl::rt::error_code" = type { %"class.std::__cxx11::basic_string", i8, i32 }

@.str = external hidden unnamed_addr constant [87 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [29 x i8], align 1
@__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE = external hidden unnamed_addr constant [95 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [27 x i8], align 1
@__func__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE = external hidden unnamed_addr constant [14 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [110 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [114 x i8], align 1

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt15source_locationC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_i(ptr noundef nonnull align 8 dereferenceable(68), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt10error_codeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt10error_infoC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_10error_codeENS0_10error_typeE(ptr noundef nonnull align 8 dereferenceable(76), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN2cl5EventC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt9ocl_queue21register_submitted_opEN2cl5EventE(ptr noundef nonnull align 8 dereferenceable(584), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN2cl5EventC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(584) %1, ptr noundef nonnull align 8 dereferenceable(272) %2, ptr nocapture noundef nonnull readnone align 8 dereferenceable(16) %3) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.hipsycl::rt::static_array", align 8
  %6 = alloca %"class.hipsycl::rt::static_array", align 8
  %7 = alloca %"class.hipsycl::rt::static_array", align 8
  %8 = alloca %"class.hipsycl::rt::static_array", align 8
  %9 = alloca %"class.hipsycl::rt::static_array", align 8
  %10 = alloca %"class.hipsycl::rt::static_array", align 8
  %11 = alloca %"class.hipsycl::rt::static_array", align 8
  %12 = alloca %"class.hipsycl::rt::static_array", align 8
  %13 = alloca %"class.hipsycl::rt::static_array", align 8
  %14 = alloca %class.anon, align 1
  %15 = alloca %"class.cl::Event", align 8
  %16 = alloca %"class.std::vector.74", align 8
  %17 = alloca %"class.hipsycl::rt::source_location", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator.58", align 1
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::allocator.58", align 1
  %22 = alloca %"class.hipsycl::rt::error_info", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::allocator.58", align 1
  %25 = alloca %"class.hipsycl::rt::error_code", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator.58", align 1
  %28 = alloca %"class.hipsycl::rt::static_array", align 8
  %29 = alloca %"class.hipsycl::rt::static_array", align 8
  %30 = alloca %"class.hipsycl::rt::static_array", align 8
  %31 = alloca %"class.hipsycl::rt::static_array", align 8
  %32 = alloca %"class.hipsycl::rt::static_array", align 8
  %33 = alloca %"class.hipsycl::rt::static_array", align 8
  %34 = alloca %"class.std::vector.74", align 8
  %35 = alloca %"class.hipsycl::rt::source_location", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.std::allocator.58", align 1
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::allocator.58", align 1
  %40 = alloca %"class.hipsycl::rt::error_info", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::allocator.58", align 1
  %43 = alloca %"class.hipsycl::rt::error_code", align 8
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::allocator.58", align 1
  %46 = alloca %"class.cl::Event", align 8
  %47 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %48 = tail call noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16) %47)
  %49 = icmp slt i32 %48, 3
  br i1 %49, label %79, label %50

50:                                               ; preds = %4
  %51 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %52 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16) %51)
  %53 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull @.str.5)
  %54 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull @.str.6)
  %55 = getelementptr inbounds i8, ptr %1, i64 8
  %56 = load ptr, ptr %55, align 8, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %1, i64 16
  %58 = load i64, ptr %57, align 8, !tbaa !77
  %59 = load ptr, ptr %56, align 8, !tbaa !78
  %60 = getelementptr inbounds i8, ptr %59, i64 24
  %61 = load ptr, ptr %60, align 8
  %62 = tail call { i64, i64 } %61(ptr noundef nonnull align 8 dereferenceable(60) %56, i64 noundef %58)
  %63 = extractvalue { i64, i64 } %62, 0
  %64 = extractvalue { i64, i64 } %62, 1
  %65 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8) %54, i64 %63, i64 %64)
  %66 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull @.str.7)
  %67 = tail call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  %68 = tail call { i64, i64 } @_ZNK7hipsycl2rt15memory_location10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(104) %67)
  %69 = extractvalue { i64, i64 } %68, 0
  %70 = extractvalue { i64, i64 } %68, 1
  %71 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8) %66, i64 %69, i64 %70)
  %72 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %71, ptr noundef nonnull @.str.8)
  %73 = tail call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  %74 = tail call { i64, i64 } @_ZNK7hipsycl2rt15memory_location10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(104) %73)
  %75 = extractvalue { i64, i64 } %74, 0
  %76 = extractvalue { i64, i64 } %74, 1
  %77 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8) %72, i64 %75, i64 %76)
  %78 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %77, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %79

79:                                               ; preds = %4, %50
  %80 = tail call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  %81 = tail call noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %80)
  %.not = icmp eq ptr %81, null
  br i1 %.not, label %82, label %83

82:                                               ; preds = %79
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str, i32 noundef 179, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

83:                                               ; preds = %79
  %84 = tail call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  %85 = tail call noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %84)
  %.not106 = icmp eq ptr %85, null
  br i1 %.not106, label %86, label %87

86:                                               ; preds = %83
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str, i32 noundef 180, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

87:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #10
  call void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %5, ptr noundef nonnull align 8 dereferenceable(272) %2)
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 0)
  %89 = load i64, ptr %88, align 8, !tbaa !80
  %90 = icmp ugt i64 %89, 1
  br i1 %90, label %95, label %91

91:                                               ; preds = %87
  %92 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1)
  %93 = load i64, ptr %92, align 8, !tbaa !80
  %94 = icmp ugt i64 %93, 1
  %. = select i1 %94, i32 2, i32 1
  br label %95

95:                                               ; preds = %91, %87
  %.0 = phi i32 [ 3, %87 ], [ %., %91 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #10
  call void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %6, ptr noundef nonnull align 8 dereferenceable(272) %2)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #10
  %96 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  call void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %7, ptr noundef nonnull align 8 dereferenceable(104) %96)
  %97 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %7)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #10
  br i1 %97, label %98, label %.critedge

98:                                               ; preds = %95
  call void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %8, ptr noundef nonnull align 8 dereferenceable(272) %2)
  %99 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  call void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %9, ptr noundef nonnull align 8 dereferenceable(104) %99)
  %100 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) %9)
  br i1 %100, label %101, label %.critedge

101:                                              ; preds = %98
  %102 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  call void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %10, ptr noundef nonnull align 8 dereferenceable(104) %102)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %11, i8 0, i64 24, i1 false)
  %103 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %11)
  br i1 %103, label %104, label %.critedge

104:                                              ; preds = %101
  %105 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
  call void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %12, ptr noundef nonnull align 8 dereferenceable(104) %105)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %13, i8 0, i64 24, i1 false)
  %106 = call noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(24) %13)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #10
  %spec.select = select i1 %106, i32 1, i32 %.0
  br label %107

.critedge:                                        ; preds = %95, %98, %101
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #10
  br label %107

107:                                              ; preds = %104, %.critedge
  %.1 = phi i32 [ %.0, %.critedge ], [ %spec.select, %104 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  call void @_ZN2cl5EventC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15)
  %108 = getelementptr inbounds i8, ptr %1, i64 8
  %109 = load ptr, ptr %108, align 8, !tbaa !5
  %110 = getelementptr inbounds i8, ptr %1, i64 16
  %111 = load i64, ptr %110, align 8, !tbaa !77
  %112 = load ptr, ptr %109, align 8, !tbaa !78
  %113 = getelementptr inbounds i8, ptr %112, i64 16
  %114 = load ptr, ptr %113, align 8
  %115 = invoke noundef ptr %114(ptr noundef nonnull align 8 dereferenceable(60) %109, i64 noundef %111)
          to label %116 unwind label %146

116:                                              ; preds = %107
  %117 = invoke noundef ptr @_ZN7hipsycl2rt20ocl_hardware_context16get_usm_providerEv(ptr noundef nonnull align 8 dereferenceable(89) %115)
          to label %118 unwind label %148

118:                                              ; preds = %116
  %119 = icmp eq i32 %.1, 1
  br i1 %119, label %120, label %177

120:                                              ; preds = %118
  %121 = getelementptr inbounds i8, ptr %1, i64 24
  %122 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %123 unwind label %150

123:                                              ; preds = %120
  %124 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %122)
          to label %125 unwind label %150

125:                                              ; preds = %123
  %126 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %127 unwind label %150

127:                                              ; preds = %125
  %128 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %126)
          to label %129 unwind label %150

129:                                              ; preds = %127
  %130 = invoke noundef i64 @_ZNK7hipsycl2rt16memcpy_operation25get_num_transferred_bytesEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %131 unwind label %150

131:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %16, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  %132 = load ptr, ptr %117, align 8, !tbaa !78
  %133 = getelementptr inbounds i8, ptr %132, i64 112
  %134 = load ptr, ptr %133, align 8
  %135 = invoke noundef i32 %134(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull align 8 dereferenceable(8) %121, ptr noundef %124, ptr noundef %128, i64 noundef %130, ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull %15)
          to label %136 unwind label %152

136:                                              ; preds = %131
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  %.not129 = icmp eq i32 %135, 0
  br i1 %.not129, label %.critedge143, label %137

137:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %17) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @__func__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %138 unwind label %154

138:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %139 unwind label %156

139:                                              ; preds = %138
  invoke void @_ZN7hipsycl2rt15source_locationC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_i(ptr noundef nonnull align 8 dereferenceable(68) %17, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %20, i32 noundef 221)
          to label %140 unwind label %158

140:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %22) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull @.str.12, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %141 unwind label %160

141:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %27) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %142 unwind label %162

142:                                              ; preds = %141
  invoke void @_ZN7hipsycl2rt10error_codeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi(ptr noundef nonnull align 8 dereferenceable(40) %25, ptr noundef nonnull align 8 dereferenceable(32) %26, i32 noundef %135)
          to label %143 unwind label %164

143:                                              ; preds = %142
  invoke void @_ZN7hipsycl2rt10error_infoC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_10error_codeENS0_10error_typeE(ptr noundef nonnull align 8 dereferenceable(76) %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull %25, i32 noundef 1)
          to label %144 unwind label %166

144:                                              ; preds = %143
  invoke void @_ZN7hipsycl2rt10make_errorERKNS0_15source_locationERKNS0_10error_infoE(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(68) %17, ptr noundef nonnull align 8 dereferenceable(76) %22)
          to label %145 unwind label %168

145:                                              ; preds = %144
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %22) #10
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %22) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %17) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %17) #10
  br label %325

146:                                              ; preds = %107
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %326

148:                                              ; preds = %.critedge143, %116
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %326

150:                                              ; preds = %129, %127, %125, %123, %120
  %151 = landingpad { ptr, i32 }
          cleanup
  br label %326

152:                                              ; preds = %131
  %153 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #10
  br label %326

154:                                              ; preds = %137
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %176

156:                                              ; preds = %138
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %175

158:                                              ; preds = %139
  %159 = landingpad { ptr, i32 }
          cleanup
  br label %174

160:                                              ; preds = %140
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %173

162:                                              ; preds = %141
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %172

164:                                              ; preds = %142
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %171

166:                                              ; preds = %143
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %170

168:                                              ; preds = %144
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %22) #10
  br label %170

170:                                              ; preds = %168, %166
  %.pn130 = phi { ptr, i32 } [ %169, %168 ], [ %167, %166 ]
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #10
  br label %171

171:                                              ; preds = %170, %164
  %.pn130.pn = phi { ptr, i32 } [ %.pn130, %170 ], [ %165, %164 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #10
  br label %172

172:                                              ; preds = %171, %162
  %.pn130.pn.pn = phi { ptr, i32 } [ %.pn130.pn, %171 ], [ %163, %162 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #10
  br label %173

173:                                              ; preds = %172, %160
  %.pn130.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn, %172 ], [ %161, %160 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %22) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %17) #10
  br label %174

174:                                              ; preds = %173, %158
  %.pn130.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn, %173 ], [ %159, %158 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #10
  br label %175

175:                                              ; preds = %174, %156
  %.pn130.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn, %174 ], [ %157, %156 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  br label %176

176:                                              ; preds = %175, %154
  %.pn130.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn130.pn.pn.pn.pn.pn, %175 ], [ %155, %154 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %17) #10
  br label %326

177:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %28) #10
  %178 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %179 unwind label %214

179:                                              ; preds = %177
  invoke void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %28, ptr noundef nonnull align 8 dereferenceable(104) %178)
          to label %180 unwind label %214

180:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %29) #10
  %181 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %182 unwind label %216

182:                                              ; preds = %180
  invoke void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %29, ptr noundef nonnull align 8 dereferenceable(104) %181)
          to label %183 unwind label %216

183:                                              ; preds = %182
  %184 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %185 unwind label %218

185:                                              ; preds = %183
  %186 = invoke noundef i64 @_ZNK7hipsycl2rt15memory_location16get_element_sizeEv(ptr noundef nonnull align 8 dereferenceable(104) %184)
          to label %187 unwind label %218

187:                                              ; preds = %185
  %188 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %189 unwind label %220

189:                                              ; preds = %187
  %190 = invoke noundef i64 @_ZNK7hipsycl2rt15memory_location16get_element_sizeEv(ptr noundef nonnull align 8 dereferenceable(104) %188)
          to label %191 unwind label %220

191:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #10
  %192 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %193 unwind label %222

193:                                              ; preds = %191
  invoke void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %30, ptr noundef nonnull align 8 dereferenceable(104) %192)
          to label %194 unwind label %222

194:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %31) #10
  %195 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %196 unwind label %224

196:                                              ; preds = %194
  invoke void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %31, ptr noundef nonnull align 8 dereferenceable(104) %195)
          to label %197 unwind label %224

197:                                              ; preds = %196
  %198 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %199 unwind label %226

199:                                              ; preds = %197
  %200 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location12get_base_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %198)
          to label %201 unwind label %226

201:                                              ; preds = %199
  %202 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272) %2)
          to label %203 unwind label %228

203:                                              ; preds = %201
  %204 = invoke noundef ptr @_ZNK7hipsycl2rt15memory_location12get_base_ptrEv(ptr noundef nonnull align 8 dereferenceable(104) %202)
          to label %205 unwind label %228

205:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %32) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(24) %28, i64 24, i1 false), !tbaa.struct !81
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %33) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(24) %29, i64 24, i1 false), !tbaa.struct !81
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 2)
  %207 = load i64, ptr %206, align 8, !tbaa !80
  %208 = mul i64 %207, %186
  %209 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 0)
  %210 = load i64, ptr %209, align 8, !tbaa !80
  %.not128150.not = icmp eq i64 %210, 0
  br i1 %.not128150.not, label %.critedge147, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %205
  %211 = getelementptr inbounds i8, ptr %1, i64 24
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %.critedge145
  %.070151 = phi i64 [ 0, %.preheader.lr.ph ], [ %313, %.critedge145 ]
  %212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1)
  %213 = load i64, ptr %212, align 8, !tbaa !80
  %.not127148.not = icmp eq i64 %213, 0
  br i1 %.not127148.not, label %.critedge145, label %.lr.ph

214:                                              ; preds = %179, %177
  %215 = landingpad { ptr, i32 }
          cleanup
  br label %320

216:                                              ; preds = %182, %180
  %217 = landingpad { ptr, i32 }
          cleanup
  br label %319

218:                                              ; preds = %185, %183
  %219 = landingpad { ptr, i32 }
          cleanup
  br label %319

220:                                              ; preds = %189, %187
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %319

222:                                              ; preds = %193, %191
  %223 = landingpad { ptr, i32 }
          cleanup
  br label %318

224:                                              ; preds = %196, %194
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %317

226:                                              ; preds = %199, %197
  %227 = landingpad { ptr, i32 }
          cleanup
  br label %317

228:                                              ; preds = %203, %201
  %229 = landingpad { ptr, i32 }
          cleanup
  br label %317

.lr.ph:                                           ; preds = %.preheader, %290
  %.069149 = phi i64 [ %297, %290 ], [ 0, %.preheader ]
  %230 = invoke noundef i64 @"_ZZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEEENK3$_0clENS0_12static_arrayILi3EEESB_"(ptr noundef nonnull align 1 dereferenceable(1) %14, ptr noundef nonnull byval(%"class.hipsycl::rt::static_array") align 8 %32, ptr noundef nonnull byval(%"class.hipsycl::rt::static_array") align 8 %30)
          to label %231 unwind label %243

231:                                              ; preds = %.lr.ph
  %232 = mul i64 %230, %186
  %233 = getelementptr inbounds i8, ptr %200, i64 %232
  %234 = invoke noundef i64 @"_ZZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEEENK3$_0clENS0_12static_arrayILi3EEESB_"(ptr noundef nonnull align 1 dereferenceable(1) %14, ptr noundef nonnull byval(%"class.hipsycl::rt::static_array") align 8 %33, ptr noundef nonnull byval(%"class.hipsycl::rt::static_array") align 8 %31)
          to label %235 unwind label %243

235:                                              ; preds = %231
  %236 = mul i64 %234, %190
  %237 = getelementptr inbounds i8, ptr %204, i64 %236
  %238 = getelementptr inbounds i8, ptr %233, i64 %208
  %239 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %30)
  %240 = mul i64 %239, %186
  %241 = getelementptr inbounds i8, ptr %200, i64 %240
  %.not107 = icmp ugt ptr %238, %241
  br i1 %.not107, label %242, label %245

242:                                              ; preds = %235
  call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str, i32 noundef 256, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

243:                                              ; preds = %231, %.lr.ph
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %300

245:                                              ; preds = %235
  %246 = getelementptr inbounds i8, ptr %237, i64 %208
  %247 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %31)
  %248 = mul i64 %247, %190
  %249 = getelementptr inbounds i8, ptr %204, i64 %248
  %.not108 = icmp ugt ptr %246, %249
  br i1 %.not108, label %250, label %251

250:                                              ; preds = %245
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str, i32 noundef 259, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE) #9
  unreachable

251:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %34, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  %252 = load ptr, ptr %117, align 8, !tbaa !78
  %253 = getelementptr inbounds i8, ptr %252, i64 112
  %254 = load ptr, ptr %253, align 8
  %255 = invoke noundef i32 %254(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull align 8 dereferenceable(8) %211, ptr noundef %237, ptr noundef %233, i64 noundef %208, ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull %15)
          to label %256 unwind label %265

256:                                              ; preds = %251
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #10
  %.not109 = icmp eq i32 %255, 0
  br i1 %.not109, label %290, label %257

257:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %35) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %37) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @__func__._ZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEE, ptr noundef nonnull align 1 dereferenceable(1) %37)
          to label %258 unwind label %267

258:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %39) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull @.str, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %259 unwind label %269

259:                                              ; preds = %258
  invoke void @_ZN7hipsycl2rt15source_locationC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_i(ptr noundef nonnull align 8 dereferenceable(68) %35, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 8 dereferenceable(32) %38, i32 noundef 266)
          to label %260 unwind label %271

260:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %40) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %42) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull @.str.12, ptr noundef nonnull align 1 dereferenceable(1) %42)
          to label %261 unwind label %273

261:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %45) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull @.str.3, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %262 unwind label %275

262:                                              ; preds = %261
  invoke void @_ZN7hipsycl2rt10error_codeC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi(ptr noundef nonnull align 8 dereferenceable(40) %43, ptr noundef nonnull align 8 dereferenceable(32) %44, i32 noundef %255)
          to label %263 unwind label %277

263:                                              ; preds = %262
  invoke void @_ZN7hipsycl2rt10error_infoC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_10error_codeENS0_10error_typeE(ptr noundef nonnull align 8 dereferenceable(76) %40, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull %43, i32 noundef 1)
          to label %264 unwind label %279

264:                                              ; preds = %263
  invoke void @_ZN7hipsycl2rt10make_errorERKNS0_15source_locationERKNS0_10error_infoE(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::result") align 8 %0, ptr noundef nonnull align 8 dereferenceable(68) %35, ptr noundef nonnull align 8 dereferenceable(76) %40)
          to label %316 unwind label %281

265:                                              ; preds = %251
  %266 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #10
  br label %300

267:                                              ; preds = %257
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %289

269:                                              ; preds = %258
  %270 = landingpad { ptr, i32 }
          cleanup
  br label %288

271:                                              ; preds = %259
  %272 = landingpad { ptr, i32 }
          cleanup
  br label %287

273:                                              ; preds = %260
  %274 = landingpad { ptr, i32 }
          cleanup
  br label %286

275:                                              ; preds = %261
  %276 = landingpad { ptr, i32 }
          cleanup
  br label %285

277:                                              ; preds = %262
  %278 = landingpad { ptr, i32 }
          cleanup
  br label %284

279:                                              ; preds = %263
  %280 = landingpad { ptr, i32 }
          cleanup
  br label %283

281:                                              ; preds = %264
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %40) #10
  br label %283

283:                                              ; preds = %281, %279
  %.pn = phi { ptr, i32 } [ %282, %281 ], [ %280, %279 ]
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %43) #10
  br label %284

284:                                              ; preds = %283, %277
  %.pn.pn = phi { ptr, i32 } [ %.pn, %283 ], [ %278, %277 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #10
  br label %285

285:                                              ; preds = %284, %275
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %284 ], [ %276, %275 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %45) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  br label %286

286:                                              ; preds = %285, %273
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %285 ], [ %274, %273 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %40) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %35) #10
  br label %287

287:                                              ; preds = %286, %271
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %286 ], [ %272, %271 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  br label %288

288:                                              ; preds = %287, %269
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %287 ], [ %270, %269 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #10
  br label %289

289:                                              ; preds = %288, %267
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %288 ], [ %268, %267 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %35) #10
  br label %300

290:                                              ; preds = %256
  %291 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef 1)
  %292 = load i64, ptr %291, align 8, !tbaa !80
  %293 = add i64 %292, 1
  store i64 %293, ptr %291, align 8, !tbaa !80
  %294 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 1)
  %295 = load i64, ptr %294, align 8, !tbaa !80
  %296 = add i64 %295, 1
  store i64 %296, ptr %294, align 8, !tbaa !80
  %297 = add nuw i64 %.069149, 1
  %298 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1)
  %299 = load i64, ptr %298, align 8, !tbaa !80
  %.not127 = icmp ult i64 %297, %299
  br i1 %.not127, label %.lr.ph, label %.critedge145, !llvm.loop !83

300:                                              ; preds = %265, %289, %243
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %244, %243 ], [ %.pn.pn.pn.pn.pn.pn.pn, %289 ], [ %266, %265 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #10
  br label %317

.critedge145:                                     ; preds = %290, %.preheader
  %301 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %28, i32 noundef 1)
  %302 = load i64, ptr %301, align 8, !tbaa !80
  %303 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef 1)
  store i64 %302, ptr %303, align 8, !tbaa !80
  %304 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %29, i32 noundef 1)
  %305 = load i64, ptr %304, align 8, !tbaa !80
  %306 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 1)
  store i64 %305, ptr %306, align 8, !tbaa !80
  %307 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %33, i32 noundef 0)
  %308 = load i64, ptr %307, align 8, !tbaa !80
  %309 = add i64 %308, 1
  store i64 %309, ptr %307, align 8, !tbaa !80
  %310 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %32, i32 noundef 0)
  %311 = load i64, ptr %310, align 8, !tbaa !80
  %312 = add i64 %311, 1
  store i64 %312, ptr %310, align 8, !tbaa !80
  %313 = add nuw i64 %.070151, 1
  %314 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 0)
  %315 = load i64, ptr %314, align 8, !tbaa !80
  %.not128 = icmp ult i64 %313, %315
  br i1 %.not128, label %.preheader, label %.critedge147, !llvm.loop !85

316:                                              ; preds = %264
  call void @_ZN7hipsycl2rt10error_infoD2Ev(ptr noundef nonnull align 8 dereferenceable(76) %40) #10
  call void @_ZN7hipsycl2rt10error_codeD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %43) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %45) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %42) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %42) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #10
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %40) #10
  call void @_ZN7hipsycl2rt15source_locationD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %35) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %37) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %37) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %35) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #10
  br label %325

317:                                              ; preds = %226, %300, %228, %224
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %225, %224 ], [ %227, %226 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn, %300 ], [ %229, %228 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #10
  br label %318

318:                                              ; preds = %317, %222
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %317 ], [ %223, %222 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #10
  br label %319

319:                                              ; preds = %218, %318, %220, %216
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %217, %216 ], [ %219, %218 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %318 ], [ %221, %220 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #10
  br label %320

320:                                              ; preds = %319, %214
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %319 ], [ %215, %214 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #10
  br label %326

.critedge147:                                     ; preds = %.critedge145, %205
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %29) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #10
  br label %.critedge143

.critedge143:                                     ; preds = %136, %.critedge147
  invoke void @_ZN2cl5EventC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %321 unwind label %148

321:                                              ; preds = %.critedge143
  invoke void @_ZN7hipsycl2rt9ocl_queue21register_submitted_opEN2cl5EventE(ptr noundef nonnull align 8 dereferenceable(584) %1, ptr noundef nonnull %46)
          to label %322 unwind label %323

322:                                              ; preds = %321
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  call void @_ZN7hipsycl2rt12make_successEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::result") align 8 %0)
  br label %325

323:                                              ; preds = %321
  %324 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  br label %326

325:                                              ; preds = %316, %145, %322
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  ret void

326:                                              ; preds = %148, %320, %323, %176, %152, %150, %146
  %.pn139.pn = phi { ptr, i32 } [ %147, %146 ], [ %324, %323 ], [ %149, %148 ], [ %.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %320 ], [ %.pn130.pn.pn.pn.pn.pn.pn, %176 ], [ %153, %152 ], [ %151, %150 ]
  call void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #10
  resume { ptr, i32 } %.pn139.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv() local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rtlsERSoNS0_9device_idE(ptr noundef nonnull align 8 dereferenceable(8), i64, i64) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1 align 2

declare noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation6sourceEv(ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #5

declare { i64, i64 } @_ZNK7hipsycl2rt15memory_location10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

declare noundef nonnull align 8 dereferenceable(104) ptr @_ZNK7hipsycl2rt16memcpy_operation4destEv(ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

declare noundef ptr @_ZNK7hipsycl2rt15memory_location14get_access_ptrEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

declare void @_ZNK7hipsycl2rt16memcpy_operation28get_num_transferred_elementsEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN7hipsycl2rteqERKNS0_12static_arrayILi3EEES4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2

declare void @_ZNK7hipsycl2rt15memory_location20get_allocation_shapeEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

declare void @_ZNK7hipsycl2rt15memory_location17get_access_offsetEv(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

declare noundef ptr @_ZN7hipsycl2rt20ocl_hardware_context16get_usm_providerEv(ptr noundef nonnull align 8 dereferenceable(89)) local_unnamed_addr #5

declare noundef i64 @_ZNK7hipsycl2rt16memcpy_operation25get_num_transferred_bytesEv(ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN2cl5EventESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN2cl5EventESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN7hipsycl2rt10make_errorERKNS0_15source_locationERKNS0_10error_infoE(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::result") align 8, ptr noundef nonnull align 8 dereferenceable(68), ptr noundef nonnull align 8 dereferenceable(76)) local_unnamed_addr #4

declare noundef i64 @_ZNK7hipsycl2rt15memory_location16get_element_sizeEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

declare noundef ptr @_ZNK7hipsycl2rt15memory_location12get_base_ptrEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #8

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i64 @"_ZZN7hipsycl2rt9ocl_queue13submit_memcpyERNS0_16memcpy_operationERKSt10shared_ptrINS0_8dag_nodeEEENK3$_0clENS0_12static_arrayILi3EEESB_"(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef byval(%"class.hipsycl::rt::static_array") align 8, ptr noundef byval(%"class.hipsycl::rt::static_array") align 8) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rt12make_successEv(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::result") align 8) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN2cl6detail7WrapperIP9_cl_eventED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress 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 = { inlinehint 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 #4 = { inlinehint 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 #5 = { "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 #6 = { noreturn nounwind "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 #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { noreturn nounwind }
attributes #10 = { 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, !8, i64 8}
!6 = !{!"_ZTSN7hipsycl2rt9ocl_queueE", !7, i64 0, !8, i64 8, !11, i64 16, !12, i64 24, !14, i64 32, !16, i64 48, !32, i64 232, !35, i64 248, !38, i64 304, !41, i64 312, !50, i64 368, !72, i64 528}
!7 = !{!"_ZTSN7hipsycl2rt13inorder_queueE"}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"long", !9, i64 0}
!12 = !{!"_ZTSN2cl12CommandQueueE", !13, i64 0}
!13 = !{!"_ZTSN2cl6detail7WrapperIP17_cl_command_queueEE", !8, i64 0}
!14 = !{!"_ZTSN7hipsycl2rt28ocl_sscp_code_object_invokerE", !15, i64 0, !8, i64 8}
!15 = !{!"_ZTSN7hipsycl2rt24sscp_code_object_invokerE"}
!16 = !{!"_ZTSN7hipsycl2rt13worker_threadE", !17, i64 0, !19, i64 8, !22, i64 16, !24, i64 64, !26, i64 104}
!17 = !{!"_ZTSSt6thread", !18, i64 0}
!18 = !{!"_ZTSNSt6thread2idE", !11, i64 0}
!19 = !{!"_ZTSSt6atomicIbE", !20, i64 0}
!20 = !{!"_ZTSSt13__atomic_baseIbE", !21, i64 0}
!21 = !{!"bool", !9, i64 0}
!22 = !{!"_ZTSSt18condition_variable", !23, i64 0}
!23 = !{!"_ZTSSt9__condvar", !9, i64 0}
!24 = !{!"_ZTSSt5mutex", !25, i64 0}
!25 = !{!"_ZTSSt12__mutex_base", !9, i64 0}
!26 = !{!"_ZTSSt5queueISt8functionIFvvEESt5dequeIS2_SaIS2_EEE", !27, i64 0}
!27 = !{!"_ZTSSt5dequeISt8functionIFvvEESaIS2_EE", !28, i64 0}
!28 = !{!"_ZTSSt11_Deque_baseISt8functionIFvvEESaIS2_EE", !29, i64 0}
!29 = !{!"_ZTSNSt11_Deque_baseISt8functionIFvvEESaIS2_EE11_Deque_implE", !30, i64 0}
!30 = !{!"_ZTSNSt11_Deque_baseISt8functionIFvvEESaIS2_EE16_Deque_impl_dataE", !8, i64 0, !11, i64 8, !31, i64 16, !31, i64 48}
!31 = !{!"_ZTSSt15_Deque_iteratorISt8functionIFvvEERS2_PS2_E", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24}
!32 = !{!"_ZTSSt10shared_ptrIN7hipsycl2rt12kernel_cacheEE", !33, i64 0}
!33 = !{!"_ZTSSt12__shared_ptrIN7hipsycl2rt12kernel_cacheELN9__gnu_cxx12_Lock_policyE2EE", !8, i64 0, !34, i64 8}
!34 = !{!"_ZTSSt14__shared_countILN9__gnu_cxx12_Lock_policyE2EE", !8, i64 0}
!35 = !{!"_ZTSN7hipsycl2rt9ocl_queue15protected_stateE", !36, i64 0, !24, i64 16}
!36 = !{!"_ZTSSt10shared_ptrIN7hipsycl2rt14dag_node_eventEE", !37, i64 0}
!37 = !{!"_ZTSSt12__shared_ptrIN7hipsycl2rt14dag_node_eventELN9__gnu_cxx12_Lock_policyE2EE", !8, i64 0, !34, i64 8}
!38 = !{!"_ZTSN7hipsycl6common9spin_lockE", !39, i64 0}
!39 = !{!"_ZTSSt11atomic_flag", !40, i64 0}
!40 = !{!"_ZTSSt18__atomic_flag_base", !21, i64 0}
!41 = !{!"_ZTSN7hipsycl4glue3jit19cxx_argument_mapperE", !21, i64 0, !42, i64 8, !46, i64 32}
!42 = !{!"_ZTSSt6vectorIPvSaIS0_EE", !43, i64 0}
!43 = !{!"_ZTSSt12_Vector_baseIPvSaIS0_EE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIPvSaIS0_EE12_Vector_implE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIPvSaIS0_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!46 = !{!"_ZTSSt6vectorImSaImEE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseImSaImEE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseImSaImEE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseImSaImEE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!50 = !{!"_ZTSN7hipsycl2rt20kernel_configurationE", !51, i64 0, !55, i64 24, !59, i64 48, !63, i64 72, !46, i64 96, !67, i64 120, !71, i64 144}
!51 = !{!"_ZTSSt6vectorIN7hipsycl2rt17kernel_build_flagESaIS2_EE", !52, i64 0}
!52 = !{!"_ZTSSt12_Vector_baseIN7hipsycl2rt17kernel_build_flagESaIS2_EE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl2rt17kernel_build_flagESaIS2_EE12_Vector_implE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl2rt17kernel_build_flagESaIS2_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!55 = !{!"_ZTSSt6vectorISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseISt4pairIN7hipsycl2rt19kernel_build_optionENS2_20kernel_configuration13int_or_stringEESaIS6_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!59 = !{!"_ZTSSt6vectorISt4pairIimESaIS1_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseISt4pairIimESaIS1_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseISt4pairIimESaIS1_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseISt4pairIimESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!63 = !{!"_ZTSSt6vectorIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE", !64, i64 0}
!64 = !{!"_ZTSSt12_Vector_baseIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE12_Vector_implE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIN7hipsycl4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS2_24fcall_specialized_configEEESaIS7_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!67 = !{!"_ZTSSt6vectorISt4pairIiiESaIS1_EE", !68, i64 0}
!68 = !{!"_ZTSSt12_Vector_baseISt4pairIiiESaIS1_EE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE12_Vector_implE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseISt4pairIiiESaIS1_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!71 = !{!"_ZTSSt5arrayImLm2EE", !9, i64 0}
!72 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEmSt4hashIS5_ESt8equal_toIS5_ESaISt4pairIKS5_mEEE", !73, i64 0}
!73 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_mESaIS8_ENSt8__detail10_Select1stESt8equal_toIS5_ESt4hashIS5_ENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb1ELb0ELb1EEEE", !8, i64 0, !11, i64 8, !74, i64 16, !11, i64 24, !75, i64 32, !8, i64 48}
!74 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !8, i64 0}
!75 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !76, i64 0, !11, i64 8}
!76 = !{!"float", !9, i64 0}
!77 = !{!6, !11, i64 16}
!78 = !{!79, !79, i64 0}
!79 = !{!"vtable pointer", !10, i64 0}
!80 = !{!11, !11, i64 0}
!81 = !{i64 0, i64 24, !82}
!82 = !{!9, !9, i64 0}
!83 = distinct !{!83, !84}
!84 = !{!"llvm.loop.mustprogress"}
!85 = distinct !{!85, !84}


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